原文地址: https://blog.cloudnueva.com/23ai-vector-search-rag ## 23ai 向量搜索与RAG技术实现 ![23ai Vector Search & RAG](https://cdn.hashnode.com/res/hashnode/image/upload/v1728822005003/14fd09e0-e7ec-4e91-8593-89d48899c9c4.png?w=1600&h=840&fit=crop&crop=entropy&auto=compress,format&format=webp) ## 简介 在我的前一篇博客《23ai Vector/Semantic Search in APEX》中,我介绍了如何在APEX应用中集成23ai向量搜索功能。本文将在此基础上进一步讲解如何将向量搜索与生成式AI相结合,构建检索增强生成(RAG)解决方案。 ## 什么是RAG? 检索增强生成(RAG)是自然语言处理(NLP)中的一种技术,它结合了检索方法和生成模型,以产生更准确、与上下文相关且最新的响应。RAG的核心思想是通过在响应生成过程中访问外部知识源来增强大型语言模型(LLM)的能力。 本文将为一个APEX开发者博客构建RAG解决方案。我们将使用23ai向量搜索返回与用户搜索相关的博客片段,然后将这些片段与提示一起发送给Open AI,要求它使用这些博客片段作为参考回答用户的问题。 ## 关键实现步骤 1. **查询精简** * 用户问题中的多余词汇会影响向量搜索的准确性 * 使用AI模型简化查询文本 2. **运行向量搜索** * 使用23ai的向量搜索功能获取相关文本片段 3. **发送指令、片段和问题到Open AI** * 精心构造提示,告诉AI如何处理这些信息 * 需要考虑模型的最大上下文窗口限制 4. **补充引用链接** * 在响应中标记来源博客ID * 将ID转换为可点击的博客链接 5. **向用户展示响应** * 格式化最终输出,包括引用部分 ## 核心代码实现 ### 主函数 ```sql FUNCTION rag_blog_chunks (p_question IN VARCHAR2, p_months_ago IN NUMBER, p_max_chunks IN NUMBER, p_max_bytes IN NUMBER, p_ai_model IN VARCHAR2, p_ai_temp IN NUMBER, p_qr_model IN VARCHAR2, p_ai_qr_temp IN NUMBER) RETURN VARCHAR2 IS -- 实现细节... END rag_blog_chunks; ``` ### 查询精简函数 ```sql FUNCTION query_reduction (p_original_question IN VARCHAR2, p_qr_model IN VARCHAR2, p_qr_temp IN NUMBER) RETURN VARCHAR2 IS -- 实现细节... END query_reduction; ``` ### 生成引用过程 ```sql PROCEDURE generate_references (x_ai_response IN OUT NOCOPY VARCHAR2) IS -- 实现细节... END generate_references; ``` ## 最终效果展示 ![RAG结果截图](https://cdn.hashnode.com/res/hashnode/image/upload/v1728756875176/7d32d521-9e33-44b1-9670-9d7230f4079b.png?auto=compress,format&format=webp) ## 结论 在Oracle数据库中运行的RAG解决方案可以: * 提高响应准确性 * 减少AI幻觉 * 降低token消耗及成本 * 加快请求响应速度 整个过程将向量搜索与生成式AI的强大能力相结合,为开发者问题提供了更精准的答案。