type
status
date
slug
summary
tags
category
icon
password
最近在做知识库的检索以及和openai直接提高专业领域知识的回答准确性的学习研究,这个做一下整理。这里参考了开源的知识库wiki项目,dify,来看他们是如何实现RAG和检索回答的。
📝 理解RAG和检索直接的关系
Concept概念
RAG 的概念
以向量检索为核心的RAG架构已成为应对大型模型两大挑战的领先技术框架:
获取最新外部知识和缓解产生幻觉的问题。
这一架构已在众多实际应用场景中广泛实施。
开发人员可以利用这项技术,经济高效地构建人工智能驱动的客户服务机器人、企业知识库、人工智能搜索引擎等。这些系统通过自然语言输入与各种形式的有组织知识进行交互。
下面是一个具有代表性的 RAG 应用实例:
在图中,当用户问 "谁是美国总统?"时,系统并不直接将问题转发给大型模型,而是首先进行矢量分析,以获得答案。相反,它首先在知识库(如维基百科,如图所示)中对用户的查询进行矢量搜索。它通过语义相似性匹配找到相关内容(例如,"拜登是美国现任第 46 任总统......"),然后将用户的问题和找到的知识一起提供给大型模型。这样,模型就能拥有足够和完整的知识来回答问题,从而得到更可靠的回答。
为什么需要这样做?
我们可以把大型模型比作一个超级专家,他对人类的各个领域都很了解。但是,这个专家也有其局限性,比如,它并不了解你的个人情况,因为这些信息都是私人信息,不会在互联网上公开,因此,它也没有机会事先了解这些信息。
当你想聘请这位超级专家作为你的家庭理财顾问时,你需要允许他们查看你的投资记录、家庭开支和其他相关数据,然后才能回复你的咨询。这样,他们才能根据您的个人情况提供专业建议。
这就是RAG系统的作用:
它可以帮助大型模型暂时获取它所不具备的外部知识,使其能够在回答问题之前搜索答案。
从这个例子可以看出,RAG 系统最关键的地方在于外部知识的检索。专家能否提供专业的财务建议,取决于能否准确找到必要的信息。如果专家检索到的是与金融投资无关的信息,比如家庭减肥计划,那么即使是最有能力的专家也会无能为力。
Hybrid Search 混合检索
为什么需要混合搜索?
RAG 检索阶段的主流方法是基于语义相关性匹配的向量搜索(Vector Search)。其技术原理是先将外部知识库中的文档划分为语义完整的段落或句子,然后通过一种称为嵌入的过程将其转换为计算机能够理解的一系列数字表达式(多维向量)。
用户的查询也要经过类似的转换。
计算机可以检测用户查询和句子之间微妙的语义关联。例如,"猫追老鼠 "和 "小猫捕食老鼠 "之间的语义相关性要高于 "猫追老鼠 "和 "我喜欢吃火腿 "之间的相关性。在识别出相关性最高的文本后,RAG 系统会将其作为用户查询的上下文一并提供给大型模型,从而帮助回答问题。
除了复杂的语义文本搜索,矢量搜索还有其他优势:
理解相似语义(例如,鼠标/捕鼠器/奶酪,谷歌/Bing/搜索引擎)
多语言理解(例如,将中文输入与英文内容进行匹配)
多模态理解(支持文本、图像、音频和视频匹配)
容错(处理拼写错误、模糊描述)
不过,矢量搜索在某些情况下可能表现不佳,例如
搜索人或物体的名称(如 Elon Musk、iPhone 15)
搜索缩略词或短语(如 RAG、RLHF)
搜索 ID(如 gpt-3.5-turbo、titan-xlarge-v1.01)
这些限制恰恰是传统关键字搜索的优势所在,它擅长于
精确匹配(如产品名称、个人姓名、产品编号)
匹配少量字符(矢量搜索在字符较少的情况下表现不佳,但用户往往只输入几个关键词)
匹配低频词汇(低频词汇通常具有更重要的含义,如在 "你想和我去喝咖啡吗?"中,"喝 "和 "咖啡 "等词的权重要高于 "你"、"想 "和 "我 "等词)
在大多数文本搜索场景中,确保候选结果中出现最相关的结果至关重要。在搜索领域,向量搜索和关键词搜索各有所长。混合搜索结合了这两种技术的优点,同时弥补了它们各自的不足。
在混合搜索中,数据库中预先建立了矢量和关键词索引。用户输入查询后,系统会使用这两种搜索方法搜索文档中最相关的文本。
"混合搜索 "没有明确的定义,本文将其定义为向量搜索和关键词搜索的组合。不过,该术语也可用于搜索算法的其他组合。例如,我们可以将用于检索实体关系的知识图谱技术与矢量搜索相结合。
不同的搜索系统都擅长发现文本(段落、句子、单词)中的各种微妙联系,包括精确关系、语义关系、主题关系、结构关系、实体关系、时间关系和事件关系。可以说,没有一种搜索模式适用于所有情况。混合搜索通过整合多种搜索系统,实现了各种搜索技术之间的互补。
Vector Search 向量搜索
定义 矢量搜索包括生成查询嵌入,然后搜索在矢量表示方面与这些嵌入最匹配的文本块。
TopK:此设置用于过滤与用户查询相似度最高的文本块。系统还会根据所选模型的上下文窗口大小动态调整文本块的数量。此设置的默认值为 3。
分数阈值: 此设置用于设置选择文本块的相似度阈值。这意味着只有超过设定分数的文本块才会被调用。默认情况下,此设置为关闭,即系统不会过滤调用文本块的相似度值。激活后,默认值设为 0.5。
Rerank 模型: 在 "模型提供程序 "页面配置 Rerank 模型的 API 密钥后,就可以在搜索设置中启用 "Rerank 模型"。然后,系统会对语义搜索后调用的文档结果进行语义重新排序,优化这些结果的顺序。一旦设置了重新排序模型,TopK 和分数阈值设置只在重新排序步骤中有效。
Full-Text Search 全文检索
定义 全文搜索包括为文档中的所有词语编制索引,使用户能够查询任何词语并检索包含这些词语的文本块。
TopK:此设置用于选择与用户查询相似度最高的文本块。系统还会根据所选模型的上下文窗口大小动态调整文本块的数量。TopK 的默认值为 3。
重新排名模型: 在 "模型提供程序 "页面配置 Rerank 模型的 API 密钥后,就可以在搜索设置中激活 "Rerank 模型"。然后,系统将对通过全文搜索检索到的文档结果进行语义重新排序,优化这些结果的顺序。一旦配置了 Rerank 模型,TopK 和任何分数阈值设置将只在 Rerank 步骤中有效。
Hybrid Search 混合检索
混合搜索通过同时执行全文搜索和矢量搜索来运行。然后,它会应用重新排序步骤,从两种搜索结果中选择与用户查询相匹配的最佳结果。要有效使用这一功能,必须配置重新排序模型 API。
TopK:此设置用于过滤与用户查询相似度最高的文本块。系统会根据所用模型的上下文窗口大小动态调整文本块的数量。TopK 的默认值为 3。
Rerank 模型: 在 "模型供应商 "页面配置 Rerank 模型的 API 密钥后,就可以在搜索设置中启用 "Rerank 模型"。系统将对通过混合搜索检索到的文档结果进行语义重新排序,从而优化这些结果的顺序。一旦设置了 Rerank 模型,TopK 和任何分数阈值设置都只适用于 Rerank 步骤。
创建知识时设置搜索模式
要在创建知识库时设置搜索模式,请导航至 "知识 -> 创建知识 "页面。您可以在检索设置部分配置不同的搜索模式。
修改提示工程中的搜索模式
在创建应用程序时,您可以通过导航至 "提示工程 -> 上下文 -> 选择知识 -> 设置 "页面来修改搜索模式。这样就可以在提示安排阶段调整不同的搜索模式。
Rerank 评分系统模型
为什么需要重新排名?
混合搜索结合了各种搜索技术的优势,可以获得更好的召回结果。然而,不同搜索模式的结果需要合并和归一化(将数据转换成统一的标准范围或分布,以便更好地进行比较、分析和处理),然后才能共同提供给大型模型。这就需要引入评分系统: Rerank 模型。
Rerank 模型的工作原理是根据候选文档与用户问题的语义匹配程度对其重新排序,从而改善语义排序的结果。它通过计算用户问题与每个候选文档之间的相关性得分,返回一个按相关性从高到低排序的文档列表。常见的 Rerank 模型包括 Cohere rerank、bge-reranker 等。
在大多数情况下,由于计算一个查询和数百万个文档之间的相关性得分效率极低,因此在进行 rerank 之前需要先进行初始搜索。因此,rerank 通常被放在搜索过程的最后,非常适合对来自不同搜索系统的结果进行合并和排序。
然而,rerank 不仅适用于合并来自不同搜索系统的结果。即使在单一搜索模式下,引入 rerank 步骤也能有效提高文档的召回率,例如在关键词搜索后添加语义 rerank。
在实践中,除了对来自多个查询的结果进行归一化处理外,我们通常会在提供相关文本块(即 TopK,可在 rerank 模型参数中设置)之前限制传递给大型模型的文本块数量。这样做是因为大型模型的输入窗口有大小限制(一般为 4K、8K、16K、128K 标记数),因此需要根据所选模型输入窗口的大小限制来选择合适的分割策略和 TopK 值。
需要注意的是,即使模型的上下文窗口足够大,过多的召回块也可能会引入相关性较低的内容,从而降低答案的质量。因此,reerank 的 TopK 参数并不一定越大越好。
Rerank 不是搜索技术的替代品,而是增强现有搜索系统的辅助工具。它的最大优势在于,它不仅提供了一种简单、低复杂度的方法来改进搜索结果,还允许用户将语义相关性整合到现有搜索系统中,而无需对基础设施进行重大修改。
如何获取 Cohere Rerank 模型?
访问 https://cohere.com/rerank,在页面上注册,申请 Rerank 模型的使用权,获取 API 密钥。
在知识搜索模式下设置 Rerank 模型
通过导航至 "知识 -> 创建知识 -> 检索设置 "访问 Rerank 设置。除了在创建知识时设置 Rerank 外,还可以在已创建知识库的设置中修改 Rerank 配置,以及在应用程序安排的知识检索模式设置中更改 Rerank 配置。
TopK:用于设置 Rerank 后返回的相关文档数量。
分数阈值: 用于设置 Rerank 后返回的相关文档的最低分数。设置 Rerank 模型后,TopK 和分数阈值设置仅在 Rerank 步骤中有效。
在多路径检索中设置 Rerank 模型
在 "提示工程 -> 上下文 -> 设置 "页面中将 Rerank 模型设置为多路径检索模式。
Retrieval 检索
当用户建立知识库问答人工智能应用程序时,如果应用程序中关联了多个知识库,Dify 支持两种检索模式: N-to-1 检索和多路径检索。
检索设置
N-to-1 Retrieve
根据用户意图和知识描述,Agent 独立判断并选择最匹配的单一知识库来查询相关文本。这种模式适用于知识点独特、知识库数量较少的应用。N-to-1检索依赖于模型的推理能力,根据用户意图选择最相关的知识库。在推理知识时,知识作为Agent的工具,通过意图推理来选择;工具描述实质上就是知识描述。
当用户上传知识时,系统会自动创建每个知识库的摘要描述。为了在这种模式下达到最佳检索效果,可以在 "知识 -> 设置 -> 知识描述 "下查看系统生成的摘要描述,检查这些内容是否清晰地概括了知识的内容。
以下是N-to-1检索的技术流程图:
因此,当知识库过多或知识描述缺乏足够的区分度时,这种模式的召回效果就会受到影响。这种模式更适合知识库较少的应用程序。
提示: OpenAI 功能调用已支持多个工具调用,Dify 计划在未来版本中将此模式升级为 "N-to-M 检索"。
多路径检索
根据用户意图,该模式可同时匹配所有知识库,从多个知识库中查询相关文本块,并在重新排序步骤后,从多路径查询结果中选择与用户问题相匹配的最佳结果。需要配置 Rerank 模型 API。在多路径检索模式下,搜索引擎会从与应用程序相关的所有知识库中检索与用户查询相关的文本内容,合并多路径检索的结果,并使用 Rerank 模型对检索到的文档进行语义重新排序。
在多路径检索模式下,有必要配置 Rerank 模型。如何配置 Rerank 模型: 🔗
以下是多路径检索的技术流程图:
由于多路径检索不依赖于模型的推理能力或知识描述,这种模式可以在多知识检索中获得更高质量的召回结果。此外,结合 Rerank 步骤可以有效提高文档召回率。因此,在创建与多个知识库相关联的知识库问答应用程序时,我们建议将检索模式配置为多路径检索。
🤗 总结归纳
整体看了下预处理和文档清洗,在到chunks的分割,在到向量化,在到后面的问答,算上rerank需要至少调用3-4次接口,这块cost还是存在的。
从实际来看,混合检索效果还是不错的,rerank需要去弄个api测试下。
📎 参考文章
对本文由任何问题,欢迎您在底部评论区留言,一起交流~
- 作者:xinqiyang
- 链接:https://yangxinqi.com/article/rag-search-rank
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。