K5.1 上下文拼装:把资料摆到模型面前
摆盘也是门手艺
检索出来的几段资料,不能就那么原封不动地甩给模型。怎么摆——用什么顺序、什么格式、配上什么指令——直接决定模型看不看得懂、听不听话。
这一步叫 上下文拼装,是 RAG 三步里「增强」这个字的落地(回扣 K0.2)。它做的事说来简单,却步步是坑:
- 把检索到的块编号列好——
[1] …… [2] ……,方便模型引用、也方便你核对; - 配上明 确的指令——「只根据以下资料回答」「资料里没有的,就说没有」;
- 把用户的问题放在末尾——让模型读完资料,带着问题作答。
拼好的这一大段文本(指令 + 资料 + 问题),就是真正送进模型的提示词。
亲手走一遍全流程
下面这个实验,把中篇学过的每一步串起来跑一遍。重点盯第 ④ 步「拼装提示词」——看资料是怎么被摆成模型能用的样子的:
RAG 全流程:从提问到「有据的答案」
把中篇学过的每一步串起来跑一遍。点「下一步」,看一个问题怎么走完「检索 → 重排 → 拼装 → 生成 → 核对」,最后得到一个每句话都标了出处的答案。(内容为教学构造)
🧑💻 黑卡会员有什么好处?积分能抵多少钱?
🔴 真实模式:让你的模型按第 ④ 步那个提示词真生成一次
上面第 ⑤ 步的答案是预录的。填入你自己的模型服务,把第 ④ 步那个「资料 + 只根据资料答 + 标来源」的提示词真发给它,看它生成的带引用、有据的答案——这就是 RAG 生成环节的真实样子。
👆 先展开「真实模式设置」填好服务并测试连接,「用真模型生成」按钮就会亮起。
几个值得注意的地方:
- 第 ③ 步先清了噪声:检索命中的三条里,「支付方式」明显跑题,被重排淘汰了(回扣 K4)。拼装前先把噪声清掉,模型才不会被带偏。
- 第 ④ 步的两句指令:「请仅根据以上资料回答」和「在每句话后标注来源编号」——正是抑制幻觉、逼出引用的关键。少了它们,模型就容易放飞自我(下一节细讲)。
- 资料是编号的:
[1] 会员权益…… [2] 积分规则……,这样模型答的时候才能标「〔1〕〔2〕」,你也才能一眼对回原文。
拼装的三个坑
摆盘摆不好,好料也白搭。三个最常见的坑:
坑一:放太多块。 「多多益善」是错觉。检索到的块不是塞得越多越好——塞满上下文会稀释重点、拖慢速度、还烧钱(回扣上篇 8.2 长上下文的成本,和 K2 切太大的道理一样)。宁可少而精,让每一块都真的相关。
坑二:顺序有讲究。 模型对上下文的首尾更敏感,塞在正中间的信息反而容易被忽略——这个现象叫「lost in the middle」(迷失在中间,2023 年的研究)。所以经验做法是:把最相关的块放在最前面和最后面,别把关键证据埋在中段。
坑三:指令不明确。 如果你只把资料一摆、问题一抛,不加约束,模型就会默认「自由发挥」,掺进它训练时的旧记忆。一句明确的「只根据资料回答,没有就说没有」,往往比换个更大的模型还管用。
这一步没有唯一正确答案
拼装的格式、顺序、指令措辞,都要按你用的模型和任务去调——没有一套模板包打天下。更要命的是:「把资料摆好」不等于「模型会用好」。就算你把对的资料端端正正摆在它面前、指令也写清楚了,模型有时仍会走 神、仍会掺记忆。这是下一节 K5.2 要专门对付的问题——拼装是「把料摆好」,有据回答是「逼它照料答」。
小结
本节要点
- 上下文拼装是「增强」的落地:把检索块编号列好、配上明确指令、问题放末尾,拼成送进模型的提示词。
- 三个坑:放太多块(稀释重点、烧钱)、顺序不讲究(lost in the middle,最相关的要放首尾)、指令不明确(模型放飞自我掺记忆)。
- 那两句指令「只根据资料答」「标注来源」,往往比换个更大的模型还管用。
- 「把资料摆好」不等于「模型会用好」——这要靠下一节的有据回答来兜底。
📝 动手自测0/3
1. 「上下文拼装」这一步,主要在做什么?
2. 「lost in the middle」现象告诉我们,拼装时应该怎么摆放最相关的块?
3. 关于「检索到的块放多少」,下列哪个说法对?
延伸阅读
- Lost in the Middle(2023)——模型对上下文首尾更敏感、忽略中段的经典研究,本节坑二的出处。
- 上篇 8.2 长上下文——为什么「块塞太多」既贵又未必更好。
- 下一节 K5.2 有据回答:把资料摆好之后,怎么逼模型真的照着答、还交出处。