RAG(Retrieval-Augmented Generation,检索增强生成)把外部知识检索和模型生成连接起来,适合处理经常更新、规模较大或不能完整放进提示词的知识。
一、标准流程
text
文档 → 清洗 → 切分 → 向量化 → 建库
查询 → 改写 → 检索 → 重排 → 拼接上下文 → 生成答案离线阶段决定知识是否可检索,在线阶段决定结果是否相关。两者都要记录版本,便于定位问题。
二、关键设计点
文档处理
- 保留标题、章节、来源和更新时间等元数据。
- 按语义和结构切分,避免把一个完整表格或代码示例拆散。
- 先去除重复、导航和无意义模板,再计算向量。
检索策略
BM25适合精确关键词,向量检索适合语义相似,两者可以混合。- 使用元数据过滤缩小范围,例如产品、版本、权限和语言。
- 召回后用重排模型筛选最相关片段,减少无关上下文。
生成与引用
- 明确要求模型只依据给定上下文回答,不确定时说明不知道。
- 为每个片段保留来源和位置,让答案可以回溯。
- 控制上下文长度,优先保留相关、完整且互不重复的内容。
三、如何评测
把检索和生成拆开评测:
- 检索:
Recall@K、MRR、命中率、重复率。 - 生成:事实正确性、引用覆盖率、答案完整性和拒答质量。
- 系统:延迟、成本、索引更新时间和权限隔离。
四、常见失败原因
- 切分过小,答案缺少上下文。
- 只做向量检索,精确名称和编号召回失败。
- 召回内容很多,却没有重排和去重。
- 文档版本和权限没有进入检索条件。
- 没有保留引用,无法区分模型记忆和知识库证据。
RAG 的目标不是让模型“读更多”,而是让它在正确的时间拿到正确的证据。