RAG 技术详解:从检索增强生成到企业级知识库系统
一、什么是 RAG?
RAG(Retrieval-Augmented Generation,检索增强生成)是一种将信息检索与大语言模型生成能力相结合的技术架构。它的核心思想是:在大语言模型回答问题之前,先从外部知识库中检索相关信息,再将检索结果作为上下文提供给模型,从而生成更加准确、可靠的回答。
传统的大语言模型主要依赖预训练阶段学习到的参数化知识。这种方式存在几个明显的问题:
- 知识时效性不足:模型无法天然感知训练数据之后发生的事件。
- 专业知识有限:模型可能缺乏企业内部文档、行业资料等私有知识。
- 幻觉问题:当模型缺乏可靠依据时,可能生成看似合理但实际错误的内容。
- 知识更新成本高:通过重新训练或微调更新模型知识,通常需要较高的计算和数据成本。
RAG 通过引入外部知识检索机制,将模型自身的语言理解与生成能力和外部知识库结合起来,不需要频繁修改模型参数,就能够让模型使用最新的、特定领域的知识。
二、RAG 的整体架构
一个典型的 RAG 系统可以划分为两个主要阶段:离线知识库构建和在线检索生成。
1. 离线阶段:知识库构建
离线阶段负责将原始数据转换为可以检索的知识表示。
主要流程如下:
- 数据采集:获取 PDF、Word、Markdown、网页、数据库等不同来源的数据。
- 数据解析:提取文本内容,处理表格、图片、标题和文档结构。
- 文本切分(Chunking):将长文档切分成适当大小的文本片段。
- 向量化(Embedding):通过 Embedding 模型将文本转换为高维向量。
- 数据存储:将文本、向量以及相关 Metadata 保存到向量数据库中。
其中,文本切分和 Embedding 是影响检索效果的两个重要环节。
如果 Chunk 过大,可能引入大量无关信息;如果 Chunk 过小,又可能破坏原始语义的完整性。因此,需要根据文档类型、内容结构和具体业务选择合适的切分策略。
2. 在线阶段:检索增强生成
在线阶段负责接收用户问题,并利用知识库辅助模型回答。
典型流程如下:
- Query Embedding:将用户问题转换为向量。
- 向量检索:在向量数据库中寻找与问题语义相似的文本片段。
- 结果排序(Rerank):利用重排序模型对候选文档进行相关性评分。
- Prompt 构建:将用户问题和检索到的上下文组合成 Prompt。
- LLM 生成:将构建好的 Prompt 输入大语言模型,生成最终答案。
整个过程可以概括为:
用户提问 → 问题向量化 → 知识检索 → 结果重排序 → 上下文构建 → LLM 生成 → 最终回答。
三、RAG 的核心技术
1. Embedding:文本向量化
Embedding 是将文本映射到高维向量空间的过程。语义相近的文本通常具有较高的向量相似度。
例如:
- 用户问题:如何申请公司的年假?
- 知识库内容:员工年度带薪休假申请流程。
虽然两段文本使用的词语不同,但它们表达的语义相近,因此有机会通过向量检索匹配成功。
常见的相似度计算方式包括:
- 余弦相似度(Cosine Similarity)
- 点积(Dot Product)
- 欧氏距离(Euclidean Distance)
Embedding 模型的选择需要结合语言类型、领域知识、向量维度以及检索效果进行评估。
2. 向量数据库
向量数据库主要负责存储和检索文本向量,同时保存原始文本及其 Metadata。
常见方案包括:
- Milvus:面向大规模向量数据的开源向量数据库。
- Qdrant:支持向量检索和丰富的 Metadata 过滤能力。
- Weaviate:提供向量搜索和混合检索等能力。
- Chroma:适合轻量级应用和开发测试。
- FAISS:由 Meta 开源的向量检索库,并非完整的数据库系统。
向量数据库通常通过 HNSW、IVF 等近似最近邻(ANN)索引算法提高检索效率,在检索速度和召回率之间取得平衡。
3. Hybrid Search:混合检索
单纯依赖向量检索并不能解决所有问题。
例如,用户询问:
“Qwen3-8B 模型的最大上下文长度是多少?”
这类问题包含具体的模型名称和数字标识。向量检索可能无法准确匹配这些关键词。
因此,实际系统通常结合:
- 向量检索:关注语义相似度,适合自然语言表达。
- 关键词检索:例如 BM25,关注词项匹配,适合专有名词、编号和精确关键词。
将两种检索方式结合,可以提升不同类型问题的召回能力。常见的融合方式包括 RRF(Reciprocal Rank Fusion,倒数排名融合)。
4. Rerank:重排序
初始检索的目标是尽可能召回相关文档,但召回结果不一定按照真正的相关性排列。
Rerank 通常采用 Cross-Encoder 架构,对用户问题和候选文本进行联合编码,输出相关性分数。
例如,初始检索返回 Top 20 文档,经过 Rerank 后,重新选取最相关的 Top 5 文档进入上下文。
这种方式能够进一步改善检索结果的精确性,但也会增加一定的计算延迟。
四、如何优化 RAG 系统?
在实际项目中,RAG 的效果并不完全取决于模型本身,数据处理、检索策略和上下文构建同样重要。
以下是几种常见的优化方向:
1. 优化文本切分策略
根据文档结构进行切分,而不是简单按照固定字符数截断。可以结合标题、段落、语义边界进行切分,并使用适当的 Chunk Overlap 保留上下文联系。
2. Query 改写
用户的问题可能存在表达不完整、指代不明确等情况。可以先利用 LLM 对问题进行改写、扩展关键词,或者将复杂问题拆分成多个子问题,再分别检索。
3. Metadata 过滤
在检索时加入文档类型、部门、时间、权限等 Metadata 条件,缩小检索范围。例如,查询财务制度时,可以优先检索财务部门相关文档。
需要注意,权限过滤应在检索层可靠执行,不能仅依赖 Prompt 要求模型忽略无权访问的信息。
4. 父子文档检索
将文档切分为较小的子 Chunk 用于精准检索,同时保留较大的父级文档作为生成上下文。这样既能提高匹配精度,也能避免上下文过于碎片化。
5. 自适应检索
并不是所有问题都需要进行知识库检索。可以通过问题分类或检索置信度判断是否需要检索、是否需要二次检索,以及是否应该直接拒绝回答。
五、RAG 系统如何评估?
RAG 是一个由检索和生成组成的复合系统,因此不能只依赖最终答案的主观质量进行评估。
通常可以从三个维度考虑:
| 评估维度 | 核心指标 | 评估目标 |
|---|---|---|
| 检索质量 | Recall@K、Precision@K、MRR、NDCG | 判断相关知识是否被召回 |
| 生成质量 | Faithfulness、Answer Relevance | 判断答案是否忠于上下文、是否切合问题 |
| 系统性能 | Latency、吞吐量、Token 成本 | 衡量系统的响应速度和运行成本 |
其中,Recall@K 衡量前 K 个检索结果中是否包含目标相关文档;Faithfulness 则关注生成答案是否能够从检索到的上下文中得到支持。
在实际项目中,建议构建固定的测试数据集,分别评估检索模块、生成模块和端到端链路,避免出现检索效果差却通过调整 Prompt 掩盖问题的情况。
六、总结
RAG 并不是简单地将向量数据库连接到大语言模型,而是一套包含数据处理、文本切分、向量化、检索、排序和生成的完整工程体系。
从实际落地来看,RAG 的核心竞争力往往不在于使用了哪一个大模型,而在于能否构建高质量的知识数据、设计合理的检索策略,并通过持续评估优化整个链路。
随着 Agent 技术的发展,RAG 也正在从传统的单次检索生成模式向 Agentic RAG 演进。系统可以根据任务需求自主决定何时检索、检索什么内容、是否需要重新检索,以及如何组合多个知识来源。
未来,RAG 将继续作为大语言模型连接外部知识、企业数据和业务系统的重要技术基础设施。
- 点赞
- 收藏
- 关注作者
评论(0)