检索增强生成(RAG)的提示词设计
2026-10-19RAG 的提示词重点不在"问得好",在"约束得住"
检索增强生成(RAG)的做法是先把相关资料检索出来,连同问题一起交给模型。很多人把精力全花在问题上,结果模型照样答偏。原因是:一旦资料进了上下文,模型会忍不住把资料里所有相关内容都倒出来,或者反过来忽略资料、用自己的训练知识作答。
RAG 提示词的核心任务,是让模型只依据给定资料回答,并且在资料不足时明确说不足。
一、基本结构
【指令】
你是(角色)。请只依据下面提供的资料回答问题。
资料中找不到答案时,直接回答"资料中未提供",不要使用你自己的知识补充。
【资料】
<资料 1>
(内容)
</资料 1>
<资料 2>
(内容)
</资料 2>
【问题】
(用户问题)
【输出要求】
1. 先给结论,再给依据
2. 每条依据后面标注来源编号,格式为[资料 N]
3. 如果多份资料互相矛盾,指出矛盾并分别列出,不要自行选择其中一方
4. 不要引入资料之外的背景知识
5. 回答长度控制在(N)字以内
其中最关键的是第 1 行的「只依据资料」和「未提供时怎么办」这两句。缺了它们,模型会用训练知识填补空白,而填补的内容你无法验证来源。
二、资料要编号并加标签
把每段资料用独立的标签包起来并编号,有三个作用:
- 模型能明确区分「资料结束」和「指令重新开始」,减少把资料内容当指令执行的风险。
- 输出可以要求标注来源,方便你核对答案是否真的来自检索结果。
- 多段资料互相矛盾时,能定位到具体是哪两段冲突。
如果检索结果自带元数据(标题、时间、来源),一并放进标签里。模型可以用这些信息判断时效性——例如当两份资料冲突时,优先采用时间较新的那份,并在输出中说明这个选择。
三、资料的位置会显著影响结果
上下文很长时,模型对开头和结尾的内容更敏感,中间部分容易被忽略。实用规则:
- 把最相关的资料放在最前面,而不是按检索分数从低到高排列。
- 资料不要太多。八段资料里只有两段相关时,模型容易被无关段落带偏。宁可少而准。
- 把问题放在资料之后,紧挨着输出要求,这是模型注意力最集中的位置。
- 超长资料先压缩再放入。把 10 页原文直接塞进去,关键信息反而被稀释。
四、四类典型失败及对应约束
| 失败表现 | 原因 | 加什么约束 |
|---|---|---|
| 答案里出现资料中根本没有的信息 | 模型用训练知识补全 | 「不要使用资料之外的知识;无法从资料得出的内容不要写」 |
| 把资料大段复述一遍 | 没有说明要回答什么层面 | 「只回答被问到的部分,不要复述资料原文」 |
| 被无关资料带偏 | 资料堆太多、无排序 | 「只使用与问题直接相关的资料,明确说明哪些资料与问题无关」 |
| 该说不知道时硬答 | 缺少信息不足时的出口 | 「资料不足以回答时,输出『资料中未提供』并列出还需要什么信息」 |
五、验证答案是否真的基于资料
输出看起来通顺不代表它读了资料。三个检查办法:
- 把某段关键资料删掉再问一次。如果答案没变,说明模型根本没用那段资料。
- 问一个资料里明确没有的问题。正确答案是「未提供」。如果它答了,说明约束没生效。
- 检查来源标注。要求模型标注[资料 N]之后,抽查标注是否真的对应。标注错了说明它没在逐段读。
常见误区
- 只优化检索,不优化提示词。检索再准,提示词没约束住,输出照样跑偏。
- 以为资料越多越好。无关资料是干扰项,会显著降低准确率。
- 把「未提供」当成失败。正确地承认资料不足,比编一个像样的答案有价值得多。
- 不要求标注来源。没有来源标注,你无法验证,也无法在出错时定位到是哪段资料的问题。
延伸阅读
如果任务需要多步推导而不只是检索,见思维链的适用边界。约束怎么写才可执行,见角色/任务/约束三分法。