主题
RAG 优化和排错
知识库搭好了,但 AI 回答不准?这篇告诉你哪里出了问题,怎么修。
RAG 的 7 个常见失败点
RAG 是一条流水线,任何一个环节出问题都会导致最终回答不好。
| # | 失败点 | 症状 | 原因 |
|---|---|---|---|
| 1 | 文档质量差 | AI 回答的信息过时或矛盾 | 源文档没更新、有冲突内容 |
| 2 | 切片不合理 | AI 回答断断续续、缺少上下文 | 切片太小,一段话被切成两半 |
| 3 | Embedding 不好 | 明明有答案但检索不到 | Embedding 模型对中文支持差 |
| 4 | 检索不准 | 返回的内容和问题不相关 | 检索策略单一,只用向量检索 |
| 5 | 返回太少 | AI 说"信息不足" | Top K 设太小,或阈值设太高 |
| 6 | 返回太多 | AI 回答啰嗦、包含无关信息 | Top K 设太大,噪音干扰 |
| 7 | 提示词没约束 | AI 不看检索结果,自己编 | 系统提示词没强调"只基于检索结果回答" |
逐个击破
问题 1:文档质量 — 垃圾进垃圾出
这是最常见也最容易被忽视的问题。
修复方法:
| 做法 | 具体操作 |
|---|---|
| 去重 | 同一个问题如果在多个文档中有不同答案,只保留最新的 |
| 更新 | 产品下架了就删掉,政策变了就更新 |
| 补充口语表达 | 客户说"退钱",你的文档写"退款"——加上同义词映射 |
| 加元数据 | 给每段内容标注来源、更新时间、适用范围 |
问题 2:切片策略 — 切得好是成功的一半
| 切片方式 | 推荐场景 | 参数建议 |
|---|---|---|
| 按标题切 | 有明确标题结构的手册 | 每个 H2 为一个切片 |
| 按段落切 | 自然段落清晰的文章 | 保持段落完整 |
| 按固定长度 | 没有结构的纯文本 | 300-500 字,重叠 50-100 字 |
| 按语义切 | 内容跳跃性大 | 需要平台支持(Dify、RAGFlow 支持) |
重叠(Overlap)很重要:相邻切片之间重叠 50-100 字,可以避免关键信息被切断。
Anthropic 的发现:
"给每个切片加上文档级别的上下文说明(Contextual Retrieval),检索失败率降低 67%。"
具体做法:在每个切片开头加上"这段内容来自 XX 文档的 XX 章节,主要讲 XX"——让 AI 更容易理解这段内容的背景。
问题 3:Embedding 模型选择
| 模型 | 中文效果 | 成本 | 说明 |
|---|---|---|---|
| 通义 text-embedding-v3 | 优秀 | 约 ¥0.7/百万 Token | 阿里出品,中文最优选 |
| 智谱 embedding-3 | 优秀 | 按量付费 | 国产,中文效果好 |
| OpenAI text-embedding-3-small | 良好 | $0.02/百万 Token | 便宜,中文还行 |
| OpenAI text-embedding-3-large | 良好 | $0.13/百万 Token | 贵,但维度高 |
| BGE-M3(开源) | 优秀 | 免费 | 自部署,BAAI 出品 |
建议:中文场景优先用通义或 BGE-M3,不要用英文为主的模型。
问题 4:检索策略优化
只用向量检索(语义检索)是不够的。 推荐混合检索:
用户问题
↓
├── 向量检索(语义相似度)→ 找到语义相关的内容
├── 关键词检索(BM25)→ 找到包含关键词的内容
↓
合并 + 重排序(Reranking)
↓
返回 Top K 个最相关的切片| 检索方式 | 优势 | 劣势 |
|---|---|---|
| 纯向量检索 | 理解语义,"退钱"能找到"退款" | 可能漏掉精确匹配 |
| 纯关键词检索 | 精确匹配快 | 不理解同义词 |
| 混合检索 | 两者优势结合 | 需要调权重 |
| 混合 + 重排序 | 效果最好 | 多一步 API 调用成本 |
Dify、RAGFlow 都支持混合检索,建议直接开启。
问题 5-6:Top K 调优
| 场景 | 推荐 Top K | 说明 |
|---|---|---|
| 简单问答(产品参数、价格) | 2-3 | 信息集中在一两段 |
| 复杂问题(退货流程、售后政策) | 4-6 | 需要综合多段信息 |
| 开放式分析(市场趋势、竞品对比) | 6-10 | 需要更多上下文 |
Score 阈值建议:0.3-0.5。太高会漏掉有用信息,太低会引入噪音。
问题 7:提示词优化
一个好的 RAG 系统提示词模板:
你是 XX 品牌的客服助手。
## 回答规则
1. 只基于下面的"参考信息"回答客户问题
2. 如果参考信息中没有相关内容,说"这个问题我需要确认后回复您"
3. 绝对不要编造信息
4. 回答要简洁,不超过 200 字
5. 如果需要列步骤,用数字编号
## 参考信息
{{context}}
## 客户问题
{{query}}成本控制
成本构成
| 环节 | 成本来源 | 说明 |
|---|---|---|
| 建库 | Embedding API | 一次性,约 ¥2-5/万页文档 |
| 检索 | Embedding API | 每次查询都要把问题向量化 |
| 生成 | LLM API | 把检索结果 + 问题发给大模型 |
| 重排序 | Reranker API(可选) | 如果用了重排序模型 |
实际成本参考
| 场景 | 知识库大小 | 日查询量 | 模型 | 月成本估算 |
|---|---|---|---|---|
| 小型 FAQ | 50 页文档 | 100 次/天 | 通义千问(免费) | ¥0-10 |
| 中型客服 | 500 页文档 | 1,000 次/天 | Claude Haiku | ¥200-500 |
| 大型企业 | 5,000 页文档 | 10,000 次/天 | GPT-4o | ¥3,000-8,000 |
省钱三板斧
| 方法 | 节省比例 | 怎么做 |
|---|---|---|
| 模型路由 | 40-60% | 简单 FAQ 用便宜模型,复杂问题用强模型 |
| 缓存 | 20-40% | 相同问题直接返回缓存答案 |
| 精简上下文 | 10-20% | 减少每次发给 LLM 的切片数量 |
评估你的 RAG 效果
三个核心指标
| 指标 | 怎么测 | 及格线 |
|---|---|---|
| 检索准确率 | 返回的切片是否包含正确答案 | >80% |
| 回答准确率 | AI 的最终回答是否正确 | >85% |
| 幻觉率 | AI 编造了多少不在知识库里的信息 | <5% |
简单测试方法
- 准备 30 个测试问题(知识库里有答案的 20 个 + 没有的 10 个)
- 逐个提问,记录:
- 检索到的内容是否包含正确答案?
- AI 的回答是否正确?
- AI 是否在知识库之外编造了信息?
- 计算三个指标
持续优化循环
收集用户实际问题
↓
分析回答质量(正确/错误/部分正确)
↓
错误分析(是检索没找到?还是 AI 理解错了?)
↓
针对性修复(补文档/调切片/改提示词)
↓
重新测试一句话总结
RAG 效果 80% 取决于文档质量,15% 取决于检索策略,5% 取决于模型。先把文档整理好,再想优化技术。