为什么需要 RAG

直接把所有文档塞给模型有两个问题:装不下,以及长文本中靠后内容容易被忽略。RAG(检索增强生成)的思路是:先根据你的问题找到相关片段,再让模型只基于这些片段回答。

基本流程(四步)

  1. 切分:把文档切成较小的片段(按章节/段落,而非固定字数硬切)
  2. 索引:把每个片段转成向量存入向量库
  3. 检索:把你提问的内容也转成向量,找出最相似的若干片段
  4. 生成:模型只基于检索到的片段作答,并要求给出引用

决定效果好坏的三个关键点

1. 切分方式比想象中重要

  • 语义单元切(一个小节、一个问答对)优于按固定字数切
  • 每个片段尽量自包含:能脱离上下文看懂
  • 给片段加标题路径作为前缀(如「第三章 > 3.2 退款规则」),检索准确率会明显提升

2. 检索要「召回 + 重排」

单纯向量相似度会漏掉一些相关内容。实用做法:

  • 先用向量检索召回较多候选(如 20 条)
  • 再用更精确的方法重排,取最相关的几条

3. 让模型「只基于资料回答」

明确要求:

  • 资料里没有就说「未找到」,不要推测
  • 每个结论标注来自哪一段
  • 区分「原文明确」与「推断」

常见坑与对策

现象 常见原因 对策
答非所问 切分破坏语义 / 文档未更新 按语义切分、重建索引
答案不完整 召回数量太少 增加候选数并重排
编造内容 未限制「只基于资料」 加约束 + 要求引用
同一问题答案不一致 检索结果波动 固定参数、记录日志排查

上线前必须确认

  • 权限:不同人问同一问题,不应看到越权内容(检索阶段就要做权限过滤)
  • 更新机制:文档变更后要重建索引,否则会答旧内容
  • 敏感信息:入库前的脱敏与合规检查

小结

RAG 的核心不在模型,而在切分与检索质量。把文档切得合理、检索召回准确、并严格约束「只基于资料回答」,效果通常就能达到可用水平。