38 · 开卷考试——从阿明的“AI 凭空捏造答案“,看 RAG 检索增强生成 —— **5 大核心环节 + 7 大高级模式 + 评测体系 + 生产化**

📅 2026/6/18 21:14:27
38 · 开卷考试——从阿明的“AI 凭空捏造答案“,看 RAG 检索增强生成 —— **5 大核心环节 + 7 大高级模式 + 评测体系 + 生产化**
系列定位本篇是「阿明餐厅」系列的续集十四。在正传 4 · 《厨房质检员》第四章我们提到了 RAG 的忠实性维度。在续集六 · 《AI 的黑暗料理》我们提到过 RAG 是抑制幻觉的主要手段。在34b · AI 评测流水线第六章我们讲了 RAG 评测的 4 大指标。本篇是RAG 专题—— 从架构到优化、从基础到高级模式、从离线评测到生产化完整讲透 RAG。「阿明餐厅」技术系列导读githubgitee引言AI 一本正经地胡说八道2025 年底阿明的客服 AI 上线 2 个月。一个用户问“你们的红烧肉热量是多少”AI 回答“每份红烧肉约 480 千卡含蛋白质 25 克、脂肪 35 克、碳水化合物 15 克。建议每日摄入不超过 2000 千卡。”听起来很专业对吧但阿明翻遍了所有文档从未记录过红烧肉的热量数据。AI 在编造数据幻觉。这就是 LLM 的核心问题没有外部知识LLM 只能基于训练时的模式生成回答 —— 可能是对的也可能是编的。解决思路检索增强生成Retrieval-Augmented Generation, RAG—— 先从知识库检索相关文档再让 LLM 基于检索结果生成答案。传统 LLM 用户问 → LLM基于训练数据→ 答案可能是幻觉 RAG 用户问 → 检索相关文档 → LLM基于检索结果→ 答案基于事实RAG 不是新技术但 2026 年它成了生产级 AI 应用的事实标准。本篇完整讲透 RAG。第一章RAG 的 5 大核心环节 —— 先翻菜谱再下锅别凭空瞎炒1.1 整体流程离线检索用户问题1. Query 理解2. 检索3. 后处理4. Prompt 组装5. 生成答案文档分块Embedding向量库1.2 5 大环节详解环节 1Query 理解输入用户原始问题 输出优化后的查询 关键操作 - Query 改写附近有川菜吗 → 附近的川菜餐厅推荐 - HyDEHypothetical Document Embeddings先生成假设答案再检索 - Multi-Query一个问题生成多个变体查询 - Step-Back抽象问题 → 具体问题 → 检索 → 具体回答 工具LangChain / LlamaIndex QueryTransform环节 2检索输入优化后的查询 输出相关文档片段top-K 检索方式 - 向量检索Dense Retrieval基于语义相似度 - 关键词检索Sparse RetrievalBM25 / Elasticsearch - 混合检索Hybrid向量 关键词 - 重排序ReRank用更强模型对 top-K 重排 工具Qdrant / Milvus / pgvector Elasticsearch Cohere Rerank环节 3后处理输入检索到的 top-K 文档 输出精简后的相关文档 关键操作 - 去重相似文档合并 - 过滤按时间 / 来源 / 权限 - 压缩提取关键句子 - 重排ReRank 提升相关文档排名 工具LlamaIndex Postprocessor / Cohere Rerank / BGE Rerank环节 4Prompt 组装输入用户问题 检索文档 系统 Prompt 输出完整 Prompt 关键模板 系统 Prompt你是客服 AI只基于参考资料回答不知道就说不知道 用户 Prompt 参考资料 [1] {{doc1}} [2] {{doc2}} [3] {{doc3}} 用户问题{{user_query}} 请基于参考资料回答。环节 5生成输入完整 Prompt 输出答案 约束 - 温度0事实性问题/ 0.7创造性问题 - 引用标注每个事实标注来源 [1][2][3] - 兜底我不知道当文档不相关时 - Length 控制避免过长输出 工具OpenAI / Claude / Qwen / DeepSeek1.3 RAG vs 长上下文 vs 微调维度RAG长上下文微调知识更新秒级更新文档不可慢重训成本低检索 短 Prompt高百万 token × 多次高训练事实性高基于文档中可能幻觉中可能过拟合适用场景知识密集 / 时效性强一次性分析风格 / 领域适应2026 趋势⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐结论RAG 是 2026 年事实性 AI 应用的首选长上下文是补充微调是次选。第二章RAG 的 7 大高级模式 —— 混合翻书、多问几遍、先猜再查七种高阶翻法2.1 模式 1Hybrid Search混合检索# 向量 关键词混合检索defhybrid_search(query,top_k10,alpha0.7):# 1. 向量检索vector_resultsvector_db.search(query,top_ktop_k)# 2. 关键词检索keyword_resultsbm25.search(query,top_ktop_k)# 3. 加权融合combined{}forrinvector_results:combined[r.id]combined.get(r.id,0)alpha*r.scoreforrinkeyword_results:combined[r.id]combined.get(r.id,0)(1-alpha)*r.score# 4. 取 top-Kreturnsorted(combined.items(),keylambdax:-x[1])[:top_k]为什么需要混合向量检索强项语义理解川菜 ≈ 辣的食物 关键词检索强项精确匹配产品型号、专有名词 混合检索 取长补短 实测Hybrid 比纯向量检索提升 10-15% Recall2.2 模式 2ReRank重排序# 用更强模型重排fromsentence_transformersimportCrossEncoder rerankerCrossEncoder(BAAI/bge-reranker-large)defrerank(query,docs,top_k5):# 1. 计算相关性分数pairs[[query,d.content]fordindocs]scoresreranker.predict(pairs)# 2. 按分数重排rankedsorted(zip(docs,scores),keylambdax:-x[1])# 3. 取 top-Kreturn[dford,_inranked[:top_k]]为什么需要 ReRank向量检索快但粗排top-100 可能相关但排序不准 ReRank慢但精排top-5 准确度大幅提升 典型流程 向量检索 top-100 → ReRank top-5 → 给 LLM 实测ReRank 提升 Faithfulness 5-10%2.3 模式 3Query Transformation查询转换# Multi-Query一个问题生成多个查询defmulti_query_retrieval(query,llm):# 1. 让 LLM 生成 3-5 个查询变体variantsllm.generate(f 请基于以下问题生成 3 个不同的查询用于检索 原问题{query}要求每个查询角度不同覆盖更全面。 )# 2. 多次检索all_docs[]forvariantinvariants:docsvector_db.search(variant,top_k10)all_docs.extend(docs)# 3. 去重 重排returnrerank(query,all_docs,top_k5)2.4 模式 4HyDEHypothetical Document Embeddings# HyDE先生成假设答案再用假设答案检索defhyde_retrieval(query,llm):# 1. 让 LLM 生成假设答案hypotheticalllm.generate(f假设你是这个领域的专家请回答{query})# 2. 用假设答案的 Embedding 检索docsvector_db.search(hypothetical,top_k5)# 3. 返回文档returndocs为什么 HyDE 有效传统用户问题的 Embedding vs 文档 Embedding差距大 HyDE假设答案的 Embedding vs 文档 Embedding更接近 实测HyDE 在某些领域提升 15-20% Recall2.5 模式 5Self-RAG / Corrective RAG# Self-RAGAI 自己判断检索结果是否相关defself_rag(query,llm):# 1. 检索docsvector_db.search(query,top_k10)# 2. 让 LLM 判断每个文档是否相关relevant_docs[]fordocindocs:relevancellm.generate(f 问题{query}文档{doc.content}这个文档是否包含回答问题所需的信息 请回答 YES / NO。 )ifYESinrelevance:relevant_docs.append(doc)# 3. 基于相关文档生成答案ifrelevant_docs:answerllm.generate(build_prompt(query,relevant_docs))else:answer抱歉知识库中没有相关信息。returnanswer2.6 模式 6Multi-Step / Agentic RAG# Multi-Step RAG分步检索 推理defmulti_step_rag(query,llm):# 1. 拆解问题sub_questionsllm.generate(f将以下问题拆解成 2-3 个子问题{query})# 2. 分别检索每个子问题all_docs[]forsub_qinsub_questions:docsvector_db.search(sub_q,top_k5)all_docs.extend(docs)# 3. 综合推理answerllm.generate(f 子问题{sub_questions}检索到的资料{all_docs}请综合所有资料回答原问题{query})returnanswer2.7 模式 7GraphRAG图谱 RAGGraphRAG 知识图谱 RAG 传统 RAG检索文档片段 GraphRAG检索实体关系川菜 → 辣 → 红烧肉 → 480 千卡 优势 - 关系推理川菜有什么菜 能找到所有川菜 - 多跳问题老周是哪个菜的主厨 → 老周 → 主厨 → 红烧肉 工具Neo4j LangChain / LlamaIndex第三章RAG 的 5 大调优技巧 —— 菜谱字号、书签位置、重点标注让 AI 看得准3.1 调优 1Chunk 策略Chunk 大小选择 - 太小 200 字信息不足AI 拼不出答案 - 太大 2000 字噪音多AI 容易分心 - 适中500-1000 字大多数场景最佳 Chunk 重叠 - overlap 10-20%避免切断关键信息 切分方法 - 固定长度最简单 - 按段落保持语义完整 - 按标题结构化文档 - 语义切分LLM 判断边界最智能但最慢3.2 调优 2Embedding 模型选择模型维度强项弱项OpenAI text-embedding-3-large3072通用贵BGE-large-zh-v1.51024中文英文略弱M3E-large1024中文 多任务略旧Cohere embed-multilingual-v31024多语言国内访问难选型建议中文为主BGE-large-zh-v1.5开源 私有化 英文为主OpenAI text-embedding-3-large 多语言Cohere embed-multilingual-v33.3 调优 3检索参数优化# 关键参数config{top_k:5,# 检索文档数太多浪费 token太少信息不足score_threshold:0.7,# 相似度阈值过滤不相关文档search_type:hybrid,# 检索方式rerank:True,# 是否 ReRankrerank_top_k:20,# ReRank 前 K 个filter:{source:internal,date:2025-01-01},# 元数据过滤}3.4 调优 4Prompt 工程# 系统 Prompt 模板 你是一个专业的客服 AI。 ## 规则 1. 只基于参考资料回答不要编造信息 2. 如果参考资料不相关请回答抱歉我不清楚这个问题 3. 引用必须标注来源 [1][2][3] 4. 保持简洁不超过 200 字 ## 参考资料 [1] {{doc1.title}}: {{doc1.content}} [2] {{doc2.title}}: {{doc2.content}} [3] {{doc3.title}}: {{doc3.content}} ## 用户问题 {{user_query}} 请基于参考资料回答并标注引用来源。3.5 调优 5引用验证# 让 AI 验证自己的引用answer_prompt 请回答以下问题并标注引用来源 问题{query} 资料{docs} 回答后请自检 1. 每个事实是否都有引用 2. 引用是否真的支持这个事实 3. 如果有不支持的请重新组织答案。 第四章RAG 的 4 大常见陷阱 —— 找到了没看到、找对了做错了、凭空脑补4.1 陷阱 1检索到了但 AI 没看到原因 - Chunk 切分过大关键信息在 chunk 中间 - 检索 top-K 太小错过关键文档 - Prompt 中淹没了检索内容system prompt 过长 应对 - 调小 chunk_size 增加 overlap - 增大 top_K - 把检索内容放在 Prompt 最前面4.2 陷阱 2检索对了但生成错了原因 - Prompt 没强调基于参考资料 - 温度太高AI 自由发挥 - LLM 太弱理解不了复杂文档 应对 - Prompt 强调只基于参考资料 - 温度设为 0 - 用更强的 LLMGPT-4o / Claude Sonnet4.3 陷阱 3检索错了原因 - Embedding 模型不适合中文场景用了英文模型 - 文档质量差OCR 错误 / 格式混乱 - 用户问题太模糊那个东西 应对 - 选合适的 Embedding 模型 - 文档预处理清理 OCR、统一格式 - Query 改写 / HyDE4.4 陷阱 4检索对了但幻觉了原因 - LLM 没有不知道选项 - 文档中部分相关AI 脑补了其他部分 - 用户诱导你刚才说... 应对 - 显式我不知道兜底 - Self-RAG 让 AI 自检 - 引用验证第五章RAG 评测体系 —— 四维度试吃打分查得准不准做得像不像5.1 4 大核心指标详见34b 第六章指标含义工具Context Precision召回的文档中相关比例RAGASContext Recall相关文档被召回比例RAGASFaithfulness答案忠于上下文RAGAS / HHEMAnswer Relevancy答案切题RAGAS5.2 RAG 黄金集构建# 黄金集示例cases:-case_id:faq_001question:红烧肉热量是多少expected_answer:480 千卡relevant_docs:[menu/red_cooked_meat.md#nutrition]irrelevant_docs_should_not_appear:[menu/other_dishes.md]difficulty:easy-case_id:complex_002question:老周的红烧肉和普通的有什么区别expected_answer:老周的是祖传配方使用 XX 酱油...relevant_docs:[chef/zhou.md,menu/red_cooked_meat.md]difficulty:hard5.3 RAG 评测流水线# RAGAS 评测示例fromragasimportevaluatefromragas.metricsimport(context_precision,context_recall,faithfulness,answer_relevancy,)resultevaluate(dataset,# 黄金集 实际检索结果 实际生成结果metrics[context_precision,context_recall,faithfulness,answer_relevancy],)print(result)第六章RAG 的生产化与成本 —— 从试菜到大灶每翻一次菜谱多少钱6.1 RAG 的成本结构RAG 调用成本单次 - Embedding用户问题$0.0001 - 向量检索$0.00001 - LLM 生成基于检索结果$0.01-0.1 - 总计约 $0.01-0.1 / 次 每月 100 万次调用 ≈ $10,000 - $100,000 详见 [36a 第二章 2.1 LLM 推理成本](./36a-ai-token-cost-structure.md#21-组件-1llm-推理成本占-60-80)6.2 RAG 的性能优化# 关键优化手段optimizations{# 1. Embedding 缓存embedding_cache:Redis 缓存命中率 30-50%,# 2. 检索结果缓存retrieval_cache:语义相似度缓存命中率 20-30%,# 3. Prompt 缓存prompt_cache:稳定 system prompt 缓存,# 4. 批处理batching:100 个查询 → 1 次 Embedding 调用,# 5. 异步并发async:检索 Embedding 并发执行,# 6. 预热warmup:高频查询预计算 Embedding,}6.3 RAG 的可观测性RAG 系统需要专门的 RAG Observability详见 37 · AI Observability观测指标 - 检索命中率检索到相关文档的比例 - 平均检索 top-K - 平均 Faithfulness 分数 - 检索延迟 / 生成延迟 - 每次调用的成本 - 用户反馈点赞 / 点踩 工具LangSmith RAGAS 自建仪表盘第七章RAG 的未来趋势2026-2028 —— 翻菜谱成了行规未来厨师还会看图做菜7.1 趋势 1Agentic RAG 成为主流传统 RAG固定检索 生成 Agentic RAGAI 自主决定要不要检索 / 检索几次 / 用哪些工具 Agentic RAG 的典型流程 AI 收到问题 → 决定是否需要检索 → 如果需要自主选择检索策略 → 检索后判断信息是否足够 → 不够则再次检索 → 足够则生成答案 工具LangGraph / LangChain Agents7.2 趋势 2GraphRAG 普及传统 RAG文档片段 GraphRAG实体关系 适合场景 - 关系密集社交网络、推荐系统 - 多跳问题X 的朋友的同事是谁 - 全局问题公司所有产品线 工具Neo4j LangChain / Microsoft GraphRAG7.3 趋势 3RAG 长上下文混合纯 RAG检索 top-5 → 短 Prompt 纯长上下文百万 token 全文 混合关键部分长上下文背景 检索补充最新信息 适合场景 - 一次性的深度分析财报分析、合同审查 - 长期记忆 短期上下文7.4 趋势 4多模态 RAG传统 RAG检索文本 多模态 RAG检索文本 图像 表格 视频 工具 - CLIP图像 Embedding - ColPali文档图像检索 - GPT-4V / Claude Vision核心总结RAG 全景维度核心内容工具 / 方法5 大环节Query / Retrieval / Postprocess / Prompt / GenerateLangChain / LlamaIndex7 大高级模式Hybrid / ReRank / Multi-Query / HyDE / Self-RAG / Multi-Step / Graph见第二章5 大调优Chunk / Embedding / 检索参数 / Prompt / 引用验证见第三章4 大陷阱检索不到 / 生成错 / 检索错 / 幻觉见第四章4 大评测指标Context Precision / Recall / Faithfulness / Answer RelevancyRAGAS生产化成本 / 性能 / 可观测见第六章4 大趋势Agentic / Graph / 混合 / 多模态见第七章一句心法RAG 是 2026 年事实性 AI 应用的事实标准从基础到高级从评测到生产化构成了完整的基于事实回答工程体系。没有 RAGAI 就是幻觉机器有了 RAGAI 才是可信赖的知识助手。延伸阅读厨房质检员 —— 正传 4RAG 忠实性维度AI 的黑暗料理 —— 续集六RAG 是抑制幻觉的主要手段AI 评测工程 34a/34b / 34b —— 续集十RAG 评测的 4 大指标详解AI 可观测性 37 —— 续集十三RAG 的可观测性AI 成本结构 36a / 36b —— 续集十二RAG 的成本与优化向量数据库与 Embedding 39 —— 39 续集十五RAG 的向量库与 Embedding 详解跨章节衔接11.ai/02-technology-stack/README.md —— AI 技术栈 —— RAG 在 AI 技术栈中的位置11.ai/03-engineering/ai-platforms/README.md —— AI 平台 —— Dify/Coze/LangGraph 的 RAG 实现结语阿明引入 RAG 后AI 的幻觉率从 29% 降到了 3%用户满意度大幅提升。引入 RAG 前 - AI 幻觉率29% - 用户满意度60% - 月度投诉200 起 引入 RAG 后 - AI 幻觉率3%-90% - 用户满意度88%47% - 月度投诉20 起-90%下次当你做 AI 应用时不妨问自己我的 AI 是基于事实回答还是凭空捏造我的知识库多久更新一次能否秒级更新我的检索是否 Hybrid向量 关键词我有ReRank吗top-K 排序准确吗我的Prompt有没有强调只基于参考资料我的 AI 有我不知道兜底吗我用RAGAS评测 Faithfulness 吗我的 RAG能处理多模态吗好的 RAG 不是加个向量库就完事而是5 大环节 7 大高级模式 评测 生产化的完整工程。这是 AI 时代事实性应用的基石。「阿明餐厅」技术系列导读githubgitee