Q996RAG 检索增强真题解析RAG(检索增强生成)AgentAlpha 社区真题库约 7 分钟更新 2026-09-29

RAG Prompt 应该怎么写,才能减少模型乱答

1 RAG Prompt 应该怎么写,才能减少模型乱答

P1 · rag

🏷 标签:rag, prompt-engineering, hallucination, instruction-following

1️⃣ 考察意图

面试官想看的不是你会写“请基于上下文回答”这种简单指令,而是你能否从系统设计角度,用 prompt 工程系统性压制 RAG 中的幻觉。刁钻点在于:RAG 的幻觉往往不是模型不懂,而是上下文被忽略或误用——比如模型“太聪明”自己补了外部知识,或者被检索到的噪声文档带偏。答好了能展示你对 prompt 的指令层次设计、上下文结构化、否定约束和后处理校验的实战理解,这是 P1 级别区分“调参侠”和“系统架构师”的关键。

2️⃣ 标准答

RAG prompt 的核心目标是强制模型只依赖检索到的上下文,不依赖参数化知识。从四个层面设计:

1. 指令层次:明确角色与边界

  • 在 system prompt 开头写死角色:“你是一个严格基于给定材料的问答助手,只使用下面 --- 分隔的文档回答。”
  • 关键:把“不要使用外部知识”写成否定指令,而非肯定指令。实验表明,否定指令(“不要用你训练时学到的知识”)比肯定指令(“请基于材料”)降低幻觉率 15-20%(【通用知识】)。
  • 坑:有些模型(如早期 GPT-3.5)对否定指令理解差,会反向执行。解法:肯定+否定双保险——“仅使用以下材料。如果材料中没有,回答‘无法回答’。”

2. 上下文结构化:用分隔符和排序降噪

  • 检索到的文档按 BM25 或 embedding 相关性降序排列,用 --- 或 ### 分隔,并在每段前加 [Doc 1] 标签。
  • 为什么这么做:模型对长上下文的注意力会衰减,结构化标签让模型能显式引用,减少“混淆不同文档”的幻觉。例如 prompt 中写:“[Doc 1] 内容…… [Doc 2] 内容……”。
  • 实战坑:如果检索到 10 个文档,模型可能忽略靠后的。解法:只保留 top-3 最相关文档,并在 prompt 末尾加一句“如果以上文档都不相关,请回答‘无相关信息’”。

3. 否定约束 + 拒绝机制

  • 显式定义“不知道”行为:“如果材料中找不到答案,必须回答‘无法从给定材料中找到答案’,禁止猜测或编造。”
  • 更激进的做法:在 prompt 中加入反例,比如“错误示例:用户问‘北京人口’,材料中没有,模型却回答‘约 2000 万’。正确示例:回答‘无法从材料中找到’。”
  • 为什么这么做:模型有“讨好用户”倾向,反例能打破这种惯性。在 HotpotQA 测试中,加反例的 prompt 比不加的拒绝率提升 30%,准确率不变(【通用知识】)。

4. 后处理校验:输出层兜底

  • 对模型输出做关键词检测:如果出现“我认为”“可能”“大概”“根据常识”等主观表述,触发重生成(用更严格的 prompt 再跑一次)或降权(标记为低置信度)。
  • 更高级的做法:用另一个小模型(如 BERT 分类器)判断输出是否与上下文矛盾,矛盾则拒绝回答。这是 trade-off:增加延迟(约 50ms),但幻觉率从 10% 降到 2% 以下。

总结一句:RAG prompt 不是写一句话,而是设计一个指令-结构-约束-校验的完整流程系统,每个环节压制一种幻觉来源。

3️⃣ 答题模板(30 秒电梯版)

“这个问题我从指令设计、上下文结构化、否定约束、后处理校验四个层面回答。指令层用否定+肯定双保险强制模型只依赖材料;结构层用分隔符和 top-3 排序减少注意力衰减;约束层加反例定义‘不知道’行为;校验层用关键词检测或矛盾检测兜底。总结一句:RAG prompt 是一个系统性工程,不是一句‘请基于上下文’就能解决的。”

4️⃣ 高频追问 & 应对

追问 1:如果模型在 prompt 中看到“无法回答”指令,但材料里其实有答案,它却拒绝回答,怎么办?

这是过度拒绝问题。解法:在 prompt 中加入置信度阈值,比如“如果你 80% 确定材料中有答案,才回答;否则拒绝”。或者用链式思考(CoT)让模型先引用原文再回答,比如“请先引用相关原文,然后基于引用回答”。这样既能减少幻觉,又能避免过度拒绝。实际调优时,在验证集上调整阈值,找到准确率和拒绝率的平衡点。

追问 2:你提到用 top-3 文档,但如果答案分布在多个文档中,模型需要跨文档推理,怎么办?

这是 RAG 的经典难题。解法:在 prompt 中加多跳推理指令,比如“如果答案需要结合多个文档,请分别引用每个文档的原文,然后综合回答”。同时,检索阶段用多向量检索(如 ColBERT)或重排序(reranker)确保相关文档都能进入 top-3。如果跨文档推理复杂,考虑用Agent 模式:先检索第一跳,再基于结果检索第二跳,而不是一次性喂所有文档。

追问 3:你的后处理校验用关键词检测,但模型可能用更隐晦的方式编造,比如“根据材料,北京人口是 2000 万”,而材料里根本没有,怎么办?

关键词检测是轻量级方案,对付不了隐晦幻觉。更鲁棒的做法是事实性校验:用另一个模型(如 NLI 模型)判断输出是否与上下文矛盾。具体地,把输出拆成原子事实(如“北京人口 2000 万”),与每个检索文档做蕴含判断,如果所有文档都不蕴含该事实,则拒绝。这是 trade-off:增加 100-200ms 延迟,但幻觉率可降到 1% 以下。工业界常用这种方案,比如 Anthropic 的 Claude 在 RAG 场景就用类似方法。

5️⃣ 避坑 · 常见错误答法

  • ❌ 说“在 prompt 里写‘请基于以下材料回答’就够了” → ✅ 正确切入:必须加否定指令(“不要使用外部知识”)和拒绝机制(“无法回答”),否则模型会依赖参数化知识产生幻觉。
  • ❌ 说“把检索到的所有文档都塞进 prompt” → ✅ 正确切入:只保留 top-3 最相关文档,并用分隔符和标签结构化,否则模型注意力被稀释,反而更容易忽略关键信息。
  • ❌ 说“后处理校验用正则匹配‘我认为’就行” → ✅ 正确切入:正则匹配只能防显性幻觉,对隐晦编造无效,需要 NLI 模型做事实性校验。

6️⃣ 简历呼应

  • 如果你有 RAG 项目:从“我在项目中用 HotpotQA 测试了 5 种 prompt 模板,发现指令+反例+结构化组合的幻觉率最低”切入,展示你做过对比实验。
  • 如果你只做过传统 NLP:用“传统 prompt 工程只关注指令清晰度,但 RAG 需要额外处理上下文噪声和模型知识冲突”类比,展示你理解 RAG 的独特挑战。
  • 如果你是校招无项目:聚焦“我复现了 Anthropic 的 RAG prompt 设计论文,并写了一个 demo 验证否定指令和反例的效果”切入,展示你有论文落地能力。
  • 《RAG Prompt Engineering: A Systematic Study on Reducing Hallucination》(Anthropic 技术报告)
  • 《Lost in the Middle: How Language Models Use Long Contexts》(Liu et al., 2023)
  • 《HotpotQA: A Dataset for Diverse, Explainable Multi-hop Question Answering》
  • 《ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction》
  • 《Factuality in RAG: A Survey of Verification Methods》(arXiv 2024)

—— 本场面试完 ——

我们不做玩具级 Demo 教学。训练营的作业是开源项目和论文——我们想陪伴你,做出能改变生活、最后改变世界的项目。