你以为的 RAG vs 真实的 RAG
“检索到了,但回答还是胡编”(生成没被证据约束 / 证据噪声太大)
“引用了一堆段落,但都不相关”(相似度不是相关性、chunk 不合理、缺重排)
“效果时好时坏”(query 改写、topK、分块策略、embedding 模型不稳)
结论先给:RAG 是一条 4 段检索-生成链路,每段都有可测指标。效果差时,先定位是哪一段坏了。
1)RAG 的第一性原理(为什么它有效)
纯大模型回答是“闭卷”:只靠参数中的记忆做概率生成,缺证据就会补全(幻觉)。
RAG 把问题变“开卷”:先把外部知识作为上下文注入,让模型在回答时条件化于证据。
工程视角:RAG 的价值不是“更聪明”,而是把真值来源外置,让输出更可控、更可验证(能引用、能追溯)。
2)RAG 四段链路:Chunk → Retrieve → Rerank → Generate
把系统拆成四段,你就能分别优化,而不是盲目调 prompt。
2.1 Chunk(分块与索引)
输入:原始文档(PDF/网页/Markdown/数据库导出)
输出:chunk 列表(每块带 id、来源、时间、权限、内容)
文档结构没保留:标题/小节/表格丢失导致证据不可用
以“语义段落”为单位:200500 tokens/块,overlap 50100 tokens
chunk 元数据必须有:doc_id, section, updated_at, ACL, source_url
2.2 Retrieve(召回:向量/关键词/混合)
目标:把“可能相关”的证据先找全(宁可多一点再筛)
关键点:召回阶段优先追求 recall,而不是 precision。
2.3 Rerank(重排:把相关的放前面)
向量相似度 ≠ 问题相关性。重排器(cross-encoder 或 rerank LLM)把 topK 候选重新打分,选出 topN 进上下文。
2.4 Generate(生成:基于证据回答 + 引用)
这一步你已经在第二篇建立了“输出契约”:结构化输出、引用校验、答/追问/拒答动作枚举。
3)每段的核心指标(让 RAG 可量化)
想让工程团队愿意投入,必须把“效果”变成指标。建议从这组最小指标开始:
3.1 Chunk 指标
avg_chunk_tokens/ p95_chunk_tokens
chunk_coverage:能否覆盖常见问题(抽样人工评估)
structure_retention_rate:标题/表格是否被保留(抽样)
3.2 Retrieve 指标(离线评测最关键)
需要一个小规模标注集:(query, relevant_chunk_ids),几十到几百条就能起步。
Recall@K:相关 chunk 是否在 topK 里(最重要)
3.3 Rerank 指标
evidence_density:进入上下文的 chunk 中相关比例
3.4 Generate 指标(线上最实用)
citation_success_rate:引用是否可在 evidence 中定位(子串/offset)
grounded_answer_rate:回答是否能被引用支撑(抽样人工或 LLM-judge)
ask_clarify_rate:追问比例(过高可能检索不足,过低可能爱编)
成本与体验:avg_tokens, p95_latency
核心理念:RAG 的问题经常不在“生成”,而在“Recall@K 不够”。
4)排障树:RAG 效果差时从哪一步开始查(强烈建议收藏)
Step 1:先判定是“召回问题”还是“生成问题”
如果不在:优先修 Retrieve/Chunk(别折腾 prompt)
优先检查:chunk 是否切坏了(答案跨多段、表格被打散、标题丢失)
query 是否偏离文档用词(需要 query rewrite 或混合检索)
embedding 模型是否不适配语料(中英混杂、专业术语)
过滤条件是否误杀(ACL、时间、doc type)
加 query rewrite(把口语问题改写为检索友好问法)
调 chunk 策略(语义分段 + overlap)
Step 3:召回到了但不相关(Precision 低,噪声大)
加 rerank(cross-encoder/LLM rerank)
生成 prompt 没有“基于 Evidence、信息不足要追问/拒答”的硬约束
上下文太长,关键证据被淹没(注意 token 预算与排序)
5)一个工程可落地的 RAG 参考架构(后端/架构关心)
建议把 RAG 做成可观测的流水线,而不是一坨 prompt:
Query Processor(意图识别、query rewrite、语言检测)
Retriever(hybrid:BM25+Vector)
Reranker(cross-encoder/LLM)
Context Builder(token 预算、去重、排序、拼装 evidence)
LLM Generator(结构化输出/工具调用)
Validator(schema 校验、引用校验、安全策略)
Observability(样本回放、指标、告警)
关键工程点:每个阶段都要输出中间产物(e.g. retrieved_ids、rerank_scores、final_context),否则线上坏了你无法定位。
6)你可以直接用的“RAG 最小评测集”搭建法(低成本)
很多团队卡在“没法评测”。最小可行方案:
从真实日志里抽 50~200 条 query(覆盖高频场景)
人工为每条 query 标注:相关 chunk(1~3 个即可)
跑离线检索,算 Recall@K / MRR
每次改 chunk/retrieve/rerank 都回归一次
这一步做完,你团队会立刻从“感觉好点了”变成“Recall@20 从 0.62 到 0.81”。
7)本篇小结
RAG 不是“向量库 + prompt”,而是四段链路工程
优化顺序通常是:召回(Recall) > 重排(证据密度) > 生成约束(grounding)
没有指标与中间产物日志,就没有可迭代性