为了更好地使用和配置 PyRAG-Kit,理解其背后的一些核心技术概念至关重要。本节将深入解析项目中的关键机制。
RAG (Retrieval-Augmented Generation) 是本项目所基于的核心技术范式。它旨在解决大语言模型 (LLM) 的两个主要问题:
- 知识局限性: LLM 的知识截止于其训练数据,无法获知最新的或私有的信息。
- “幻觉”问题: 在信息不足时,LLM 可能会编造不准确的答案。
RAG 通过一个两步过程来应对这些挑战:
- 检索 (Retrieval): 当用户提出问题时,系统首先不是直接将问题发送给 LLM,而是在一个外部知识库(例如,本项目中的
knowledge_base目录)中进行搜索,找出与问题最相关的文本片段。 - 增强生成 (Augmented Generation): 系统将用户原始问题和从知识库中检索到的相关文本片段一起打包,作为一个内容更丰富的“增强提示词” (Augmented Prompt) 发送给 LLM。LLM 基于这些给定的上下文来生成答案,从而使其回答更准确、更具事实依据。
PyRAG-Kit 就是这个 RAG 流程的一个完整实现。
PyRAG-Kit 提供了三种不同的检索策略,您可以在 /config 菜单中动态切换。
- 原理: 将用户问题和知识库中的所有文档片段都通过一个“向量化模型” (Embedding Model) 转换成高维数学向量。检索时,计算问题向量与所有文档向量之间的“余弦相似度”,相似度越高的文档被认为在语义上越相关。
- 优点: 能够理解词语和句子的深层含义,即便是同义词或不同表述也能准确匹配。例如,能理解“公司年假”和“年度休假天数”是相关的。
- 缺点: 对于专有名词、特定ID或关键词的匹配可能不如全文检索精确。
- 原理: 基于传统的关键词匹配算法(本项目中使用 BM25)。它会分析用户问题中的关键词,并在知识库中查找包含这些关键词的文档。
- 优点: 对于关键词、产品型号、人名等专有名词的匹配非常精确、快速。
- 缺点: 无法理解语义。如果用户的提问方式与文档中的表述不完全一致(例如,使用同义词),就可能找不到结果。
- 原理: 结合了向量检索和全文检索的优点。它会同时执行这两种搜索,然后通过一个加权算法将两边的结果进行合并和重新排序。
- 优点: 既能保证对关键词的精确匹配,又能通过语义理解发现更广泛的相关内容,是目前效果最好、最推荐的检索方式。
- 配置: 在
/config菜单中,您可以调整“混合搜索权重”,来决定更侧重于向量检索的结果还是全文检索的结果。
在通过上述任何一种方法检索到一批初步的候选文档后(例如,Top K=10),为了进一步提升最终答案的质量,PyRAG-Kit 引入了 Rerank(重排)机制。
-
工作流程:
- 将用户问题和初步检索到的所有文档片段一起发送给一个专门的“Rerank 模型”。
- 这个模型会逐一评估每个文档片段与用户问题的“真正”相关性,并给出一个精确的相关度分数。
- 最后,根据这个新的分数对文档进行重新排序,将最相关的文档排在最前面。
-
作用: Rerank 模型相当于一个“精选”过程。它弥补了初步检索(特别是向量检索)可能存在的偏差,能够更精准地识别出哪些信息是回答问题的关键,从而将它们优先提供给 LLM。启用 Rerank 通常会显著提高答案的准确性,但也会增加一点点处理延迟。