RAG 优化实战:去幻觉 / 提召回 / 成本控制 接上篇《RAG 从零搭建》没有看过上篇的可以点开这里RAG 从零搭建8 步搞定知识库问答。Demo 能跑只是开始——真实场景一用就露怯要么问啥都瞎编要么资料里有却召回不到。这篇解决这俩上线拦路虎。一、先搞清RAG 的两大痛点低召回 ≈ SQL索引建错WHERE没命中查出来空或错幻觉 ≈ 接口没查到数据却自己编个默认值返回——静默失败最坑排查思路先分层定位RAG也一样要分层查二、提召回三层排查法面试必考① 检索层索引建对没相似度阈值太高② 嵌入层Embedding适配领域吗通用模型查专业术语拉胯③ 切片层块是不是切坏了语义# 检索命中快速诊断results vectorstore.similarity_search_with_score(question, k5)for doc, score in results:print(fscore{score:.4f} | {doc.page_content[:50]}...)三、去幻觉4招让模型不知道就说不知道1. Prompt强制约束只依据资料没有就明确说不知道2. 要求输出引用块ID——逼它不敢乱说3. 低置信度兜底检索分数低→拒答≈接口查空返回4044. 二次校验答案原文再核对一遍四、分块策略优化切法是命门块太大→混入不相关内容块太小→上下文丢失建议按标题/段落结构切chunk_size 300-800overlap 50-100五、Embedding选型中文别用错中文场景用 bge/m3e中文优化比英文模型准维度越高≠越好看召回评测六、成本控制4招降Token1. 精简system prompt 2. 压缩对话历史 3. 小模型做初筛 4. 缓存高频问答七、量化评测别靠感觉调参写问题-标准答案集算召回率/准确率——像给接口写测试用例八、过关清单☐ 无答案时模型明确说不知道不编☐ 能默述召回低先查哪三层☐ 调整chunk_size能观察召回变化并解释☐ 讲出≥2种去幻觉工程手段☐ 有评测集用数据说话九、常见坑1. 只靠hard召回没设阈值 → 加score过滤2. 块切太大 → 按语义切300-8003. Embedding语言不对版 → 中文库用bge4. 只靠prompt没兜底 → 低置信度拒答二次校验 关注公众号「程序员AI工坊」回复「避坑」免费领《后端转AI落地避坑清单》8 个核心坑全文。 配套Demo代码backend-to-ai-guide/rag-optimize-demo/README.md at main · cxy-ai-gongfang/backend-to-ai-guide · GitHub