大模型总爱编答案?幻觉抑制攻略
作者:程序员马丁
Ragent AI —— 从 0 到 1 纯手工打造企业级 Agentic RAG,拒绝 Demo 玩具!AI 时代,助你拿个offer。
上一篇讲完检索策略,咱们已经能通过混合检索 + 重排序拿到高质量的 Top-K chunk 了。到这一步,很多人觉得 RAG 的核心问题已经解决了——检索到了对的内容,大模型自然能给出对的答案。
但实际跑起来,你会发现事情没这么简单。
假设你在维护一个电商客服知识库,用户问:iPhone 16 Pro Max 拆封后还能退吗?
经过混合检索 + 重排序,Top-1 返回的 chunk 是:
iPhone 16 Pro Max 因屏幕定制工艺,拆封后不支持七天无理由退货。如需退货,需经售后检测确认存在质量问题。
chunk 找得很准,完全命中了用户的问题。但你把这个 chunk 和用户问题一起丢给大模型,模型的回答有可能是:
可以退货的。根据消费者权益保护法,您购买的商品在七天内都可以无理由退货。建议您联系客服办理退货手续。
我通过千问 Qwen3-Flash 模型测试了下,结果如下:

chunk 明明说:不支持七天无理由退货,模型却回答:可以退货——它用 自己训练时学到的通用知识覆盖了检索到的具体规则。
这就是 RAG 系统的最后一公里问题:检索只是一半,生成才是最终交付。chunk 质量再高,如果 Prompt 设计不好,模型照样会给出错误答案。
这一篇咱们就来聊聊怎么设计 Prompt,让大模型老老实实基于检索结果回答问题。
从检索到生成:最后一公里的质量问题
1. 好 chunk + 烂 Prompt = 烂答案
上面 iPhone 退货的例子不是个例。再看几个典型的翻车场景:
场景一:凭空捏造细节
用户问:退货运费谁承担?
chunk 内容:质量问题退货,运费由商家承担;非质量问题退货,运费由买家承担。
模型回答:退货运费由商家承担,一般会在 3-5 个工作日内退还到您的账户,退款金额包含商品价格和运费。
chunk 里只说了运费由商家承担,没提退款时效和退款范围,但模型自己补了 3-5 个工作日和退款金额包含商品价格和运费这些细节。如果实际退款时效是 7-15 个工作日,这个回答就会误导用户。
场景二:张冠李戴
用户问:AirPods Pro 的保修期是多久?
检索返回了两个 chunk:
- chunk 1:AirPods Pro 保修期为 1 年,自购买之日起计算。
- chunk 2:AppleCare+ 服务计划可将保修期延长至 2 年,并提供意外损坏保修。
模型回答:AirPods Pro 的保修期为 2 年,自购买之日起计算。
模型把 chunk 2 的 2 年和 chunk 1 的自购买之日起计算混在一起了。实际上 2 年是 AppleCare+ 的延长保修,不是默认保修期。
场景三:答非所问
用户问:我的订单什么时候发货?
chunk 内容:标准订单在付款成功后 48 小时内发货,预售商品以详情页标注的发货时间为准。
模型回答:我们的物流合作伙伴包括顺丰、圆通、中通等,全国大部分地区可实现次日达。如需查询物流信息,请登录 APP 查看订单详情。
用户问的是:什么时候发货,chunk 里有明确答案(48 小时内),但模型跑去介绍物流合作伙伴了。
2. RAG 生成阶段的核心挑战
看完这几个例子,你会发现 RAG 生成阶段面临三个核心挑战:
| 挑战 | 表现 | 后果 |
|---|---|---|
| 幻觉(Hallucination) | 模型编造 chunk 里没有的信息,或者篡改 chunk 的内容 | 用户拿到错误答案,严重时引发客诉甚至法律风险 |
| 答非所问 | 模型没有聚焦用户的具体问题,回答了相关但不对口的内容 | 用户体验差,需要反复追问 |
| 缺乏可追溯性 | 用户不知道答案的依据是什么,无法验证对错 | 信任度低,企业级场景无法通过合规审计 |
这三个问题的根源都指向同一个地方——Prompt 设计。接下来咱们就从 Prompt 的结构开始,一步步解决这些问题。
RAG Prompt 的三段式结构
RAG 场景下的 Prompt 不是随便写一句请回答用户的问题就行的。一个设计良好的 RAG Prompt 通常由三段组成:
- 系统指令(System Prompt):告诉模型你是谁、你该怎么做、你不能做什么
- 检索上下文(Retrieved Context):把检索到的 Top-K chunk 喂给模型
- 用户问题(User Query):用户的原始提问
打个比方,系统指令像是给新员工的岗位手册(你的职责是什么、红线在哪里),检索上下文像是给他的参考资料(回答问题只能基于这些材料),用户问题就是客户的来电。
1. 系统指令(System Prompt):定义模型的角色和行为边界
系统指令是整个 Prompt 的总纲,决定了模型的行为模式。在 RAG 场景下,系统指令最核心的任务是:让模型只基于检索到的上下文回答问题,不要用自己的知识自由发挥。