2026-05-08
Question
企业知识库 RAG 的检索质量优化
你在做一个企业内部知识库问答系统,用户经常反馈两类问题:
- 明明文档里有答案,但系统没检索到;
- 检索到了相关文档,但模型回答仍然不准确,甚至混入了不相关内容。
如果让你负责优化这个 RAG 系统,你会怎么分析和改进?
可以从这几个角度回答:
- chunking strategy 怎么设计和调整?
- embedding / vector search / hybrid search / reranking 分别解决什么问题?
- 如何判断问题出在 retrieval 还是 generation?
- 生产环境里如何持续评测和监控 RAG 质量?
Your Answer
我不知道
Review
本次未作答,完整示范回答如下。
Improved Answer
结论先行:优化企业知识库 RAG,不能只调 prompt,而要把问题拆成两段看:retrieval 是否找到了正确证据,generation 是否忠实基于证据回答。前者决定“有没有把答案拿进上下文”,后者决定“模型有没有正确使用证据”。
1. 先定位问题:retrieval 还是 generation
我会先建立一批带标准答案的 golden dataset,每条包含:
- 用户问题
- 应命中的文档或段落
- 标准答案
- 可接受引用范围
然后分别评测:
- Retrieval Recall@K:正确证据是否出现在 top-k 结果中;
- MRR / nDCG:正确证据排序是否靠前;
- Answer Faithfulness:回答是否被检索证据支持;
- Answer Relevance:回答是否真正回答了用户问题。
如果正确文档没进 top-k,说明主要是 retrieval 问题;如果正确文档进来了但回答错,说明主要是 generation / context organization 问题。
2. 优化 chunking strategy
chunking 的目标不是“平均切文本”,而是让每个 chunk 保持完整语义,同时适合检索。
我会关注:
- 按结构切分:优先按标题、段落、表格、FAQ、章节切,而不是固定长度硬切;
- 控制 chunk size:太小会丢上下文,太大 embedding 会被噪声稀释;
- 保留上下文信息:chunk 中带上文档标题、章节路径、更新时间、权限标签;
- 适当 overlap:避免答案跨 chunk 时被切断;
- 特殊文档特殊处理:表格、流程文档、代码文档、PDF 扫描件需要不同解析策略。
例如企业制度类文档,可以按“制度标题 → 章节 → 条款”切分;API 文档可以按“接口 → 参数 → 示例”切分。
3. 组合 embedding、vector search、hybrid search、reranking
不同检索组件解决的问题不同:
- embedding / vector search:解决语义相似问题,比如“请假规则”和“年假申请政策”不是字面相同但语义相关;
- keyword search / BM25:解决精确匹配问题,比如产品名、错误码、合同编号、人名、缩写;
- hybrid search:同时利用语义召回和关键词召回,适合企业知识库这种专业词多、表达方式又不统一的场景;
- reranking:对初召回结果重新排序,让真正能回答问题的 chunk 排在前面,而不是只看向量距离。
一个常见链路是:
query rewrite → hybrid search 召回 top 50 → reranker 排序 → 选 top 5~10 → 组织 context → LLM 生成答案并引用来源
4. 优化 generation 和 context organization
如果检索结果是对的,但回答仍然不准,我会优化生成阶段:
- 要求模型只基于给定 context 回答;
- 没有证据时明确回答“不知道”;
- 每个关键结论附带 citation;
- 将多个 chunk 按相关性、章节顺序、文档权威性组织;
- 避免把大量弱相关 chunk 塞进 prompt,减少干扰;
- 对冲突文档按更新时间、来源优先级处理。
这里的重点是:RAG 不是把检索结果简单拼进 prompt,而是要控制证据质量、顺序和使用规则。
5. 生产环境持续评测和监控
上线后我会持续监控四类指标:
- 检索指标:Recall@K、top-k 命中文档、reranker 分数分布;
- 生成指标:faithfulness、answer relevance、citation accuracy;
- 用户反馈:点赞/点踩、追问率、人工纠错记录;
- 系统指标:延迟、token 成本、检索耗时、不同文档类型的失败率。
同时建立 prompt regression test:每次调整 chunking、embedding model、reranker、prompt 或模型版本,都跑固定测试集,避免局部优化导致整体退化。
总结
所以我的优化思路是:
先用评测数据判断问题发生在 retrieval 还是 generation;
retrieval 侧优化 document parsing、chunking、hybrid search 和 reranking;
generation 侧优化 context organization、citation 和拒答策略;
最后用 golden dataset、线上反馈和 observability 持续迭代。
这样才能把 RAG 从 demo 变成稳定可用的企业知识库问答系统。