怎样构建一个更“好”的知识库?
本文深入探讨构建高质量RAG知识库的技术原理与工程实践,系统解决幻觉、召回不准等问题,实现端到端性能优化。核心内容:1. RAG知识库的评估标准与技术架构2. 文档切分、检索增强与重排序等关键技术详解3. 前沿优化方案与自动化工具的应用实践
本文深入探讨构建高质量 RAG 知识库的垂直技术原理与工程实践。文章首先界定知识库作为外部记忆系统的角色,并引入 RAGAS 框架从检索相关性、生成忠实度及答案相关性维度建立评估标准。随后详细拆解离线索引与在线查询流程,重点分析文档切分策略如 Late Chunking 和意图驱动切分,对比稀疏、稠密及混合检索范式,并阐述HyDE等查询增强技术。此外,文章探讨 Cross-Encoder 重排序机制以优化精度,介绍 AutoRAG 自动化优化、 QuIM-RAG 问题倒排索引及 OpenViking 文件系统范式等前沿架构,旨在通过系统性技术选型解决幻觉、召回不准等问题,实现知识库性能的端到端优化。
▐ 考古一下,RAG 的起源
RAG(Retrieval-Augmented Generation,检索增强生成) 由 Facebook AI Research(现 Meta AI)于 2020 年首次提出。
| 项目 | 内容 |
| 论文 | Retrieval-Augmented Generation for Knowledge-Intensive NLP Tasks |
| 作者 | Patrick Lewis, Ethan Perez, Aleksandra Piktus, Fabio Petroni, Vladimir Karpukhin 等 |
| 发表 | NeurIPS 2020 |
| 链接 | https://arxiv.org/abs/2005.11401 |
论文的核心贡献在于提出了一种将参数化记忆(Parametric Memory) 与非参数化记忆(Non-Parametric Memory) 相结合的架构:
▐ 知识库的定义
在 Agent 构建的语境下,知识库(Knowledge Base) 是一个外部记忆系统,用于存储和检索不在模型参数中的信息。它作为 RAG 架构的核心组件,承担非参数化记忆的角色。
▐ 使用知识库可以解决什么问题?
▐ 适用场景分析
结合前面几点,使用场景也比较清晰了。
▐ RAG vs Long Context
▐ 评估框架:RAGAS
| 项目 | 内容 |
| 论文 | RAGAS: Automated Evaluation of Retrieval Augmented Generation |
| 链接 | https://arxiv.org/abs/2309.15217 |
| 发表 | 2023 |
▐ 检索质量指标
检索环节的目标是:召回与 query 相关的文档片段,并将相关内容排在前面。
Context Recall(上下文召回率)
具体步骤:
- 将参考答案分解为多个 claims(声明)
- 判断每个 claim 是否可归因于检索到的上下文
- 计算被支持的 claims 占比
注意:Context Recall 需要参考答案(reference),因此不是完全的 reference-free 指标。
传统 IR 指标:(除 RAGAS 定义的指标外,传统 IR(Information Retrieval)指标仍然适用)
▐ 生成质量指标
Faithfulness(忠实度)
定义:生成的答案在事实上是否与检索到的上下文一致。取值范围 [0, 1],值越高表示答案越忠实于上下文。
具体步骤:
- 使用 LLM 从答案中提取所有声明(claims)
- 对每个声明,验证是否能从检索上下文中推断
- 计算被支持的声明占比
示例:
Answer Relevance(答案相关性)
其中:
▐ 幻觉问题的深入分析
Faithfulness 指标的本质是检测幻觉。RAG 系统的幻觉可进一步细分为三类:
参考论文:https://arxiv.org/abs/2601.19927
幻觉检测方法
参考论文:https://arxiv.org/abs/2503.21157
▐ RAG 场景的特殊考量
传统 IR 指标基于语义相似度评估检索质量,但在 RAG 场景下存在一个核心问题:语义相似 ≠ 对 LLM 有用。
参考论文:https://arxiv.org/abs/2411.18947
知识库的构建可以分为两个阶段:离线索引阶段(Indexing) 和 在线查询阶段(Querying)。本章节结合idealab平台(https://idealab.alibaba-inc.com/#/aistudio)的操作进行讲解。
Load → Split → Embed → StoreQuery → Retrieve → Rerank → Generate▐ 离线索引阶段
Step 1: Load(文档加载)
Step 2: Split(文档切分)
目前idealab提供的知识库支持的有默认智能切分(使用Opensearch切分方案),自定义切分(固定长度,符号切分),自定义工具切分。
chunk_size:块大小,通常 256-1024 tokenschunk_overlap:重叠区域,通常 10%-20%,防止切断关键信息
Step 3: Embed(向量化)
Step 4: Store(存储与索引)
▐ 在线查询阶段
Step 5: Query(查询处理)
Step 6: Retrieve(向量检索)
Step 7: Rerank(重排序,可选)
Step 8: Generate(答案生成)
▐ 知识库的开源项目和案例
上述是 RAG 的常用实践路径,以及 idealab 提供了搭建 Agent 知识库的能力。但作为扩展 LLM 能力的一个方案,其选型和能做的还有很多想象空间。不妨站的更高一点看看别人搞了些啥。
案例一:AutoRAG - 自动化 RAG 模块优化框架
| 项目信息 | 内容 |
| 论文 | AutoRAG: Automated Framework for optimization of Retrieval Augmented Generation Pipeline |
| 链接 | https://arxiv.org/abs/2410.20878 |
| GitHub | https://github.com/Marker-Inc-Korea/AutoRAG |
解决的问题:
案例二:QuIM-RAG - 问题倒排索引匹配
| 项目信息 | 内容 |
| 论文 | |
| 发表 | IEEE Access, vol. 12, pp. 185401-185410, 2024 |
| 链接 | https://arxiv.org/abs/2501.02702 |
将"Query-Document 匹配"转化为"Query-Query 匹配",提升检索精度。
案例三:OpenViking - 文件系统范式的上下文数据库
| 项目信息 | 内容 |
| GitHub | https://github.com/volcengine/OpenViking |
| 作者 | 字节跳动火山引擎 |
知识库构建没有标准答案,需要根据数据特点和业务场景选择合适的架构模式。核心原则:
- 分块粒度要匹配信息单元的自然边界
- Embedding 模型要匹配语料语种和领域
- 检索策略要兼顾语义召回和精确匹配
- 架构模式要根据查询复杂度选择(线性/条件/分支/循环)
切分(Chunking)是知识库构建中影响最大但最容易被忽视的环节。切分质量直接决定了:
▐ 切分的核心挑战
▐ 常见切分策略对比
固定长度切分(Fixed-size Chunking)
递归切分(Recursive Chunking)
语义切分(Semantic Chunking)
- 对每个句子计算 embedding
- 计算相邻句子的余弦相似度
- 相似度低于阈值处切分