你贴了三段背景——公司介绍、团队配置、项目当前状态、为什么要做这件事——结尾问了一句”那你能起草一下发布邮件吗?“模型回了你 400 字关于公司的总结。不是邮件,不是草稿,是总结。任务的确写了,但它是第 50 句 prompt 里的第 47 句,模型跟丢了。背景占主导时,模型把请求解读为”讲讲这个背景”,因为换个人收到同样一面墙的文字也会这么反应。
本文讲为什么长上下文会埋掉任务,以及就算上下文必要也要怎么结构化让任务清晰可见。
常见原因
1. 背景第一段读起来像散文开头
如果开头 200 字是”我们公司成立于 2019 年,使命是……”,模型锚定”这是公司 X 的简介”,产出匹配这个锚。后面的真任务改变不了锚。
如何判断:你 prompt 前 3 句是描述性 prose,不是祈使。
2. 任务只说一次,散文式,靠后
一个句子——“能起草一下发布邮件吗?“——出现在第 47 句,赢不过前 46 句背景。它需要被晋升到顶部,并有结构强调。
如何判断:搜你 prompt 里的交付动词。只出现一次且在第 2 段之后,就是被埋了。
3. 没分块标题分隔任务和背景
没有”背景:”/“任务:”/“输出:“标签时,模型自己推断结构。推断挑主导主题——通常是背景。
如何判断:你 prompt 是一整块 prose。
4. 上下文确实必要但不聚焦
你贴了 5 段因为它们都”看起来相关”。其中一半不会改变输出。会改变的那一半藏在不会改变的那一半里。
如何判断:每段都问”删掉它输出会变吗?“不会就剪。
5. 约束在交付前出现
你写了约束、然后背景、然后任务。约束把模型锚到一个框架,靠后的交付指令翻不动。
如何判断:结构倒置——约束在任务之上。
动手前先确认
- 用一句话写出真正的交付物。
- 假装第一次读这 prompt。交付物出现在哪?
- 标出对答案没影响的背景——剪除候选。
- 决定:上下文里 50 字承重?
- 重复性工作建一个把”交付物在前”的模板。
需要收集的信息
- 发送的完整 prompt。
- 拿到的输出(多半是总结)。
- 你想要的输出。
- 剪枝后的上下文(只保留会改变答案的)。
- 模型和 system prompt。
最短修复路径
Step 1:用祈使句开头
第一句祈使最重要。背景之前先写它:
任务:起草一封 200 字的发布邮件,发给工程团队。
语气:直接,无营销腔。
输出:只要邮件正文,无主题行。
背景:<剪过的背景>
模型先读”起草一封 200 字发布邮件”,后面一切都是这个任务的输入。
Step 2:用分块标签
具体结构帮模型解析:
## 任务
起草发布邮件。
## 受众
内部工程团队,12 人。
## 背景(只用相关的)
- 下周二发布 Feature X。
- 替代旧的重试逻辑。
- 工程团队已知道下线计划。
## 输出格式
- 纯文本邮件正文。
- 150-200 字。
- 无主题行。
标签把 prose 变成参考资料。
Step 3:无情剪枝
每段背景都问:“删了答案会变吗?“不会就删。600 字 prompt 里 200 字有用,胜过 1000 字 prompt 里 200 字有用 + 800 字噪音。
Step 4:末尾重申任务
底部再说一次也锚住近期偏好:
[顶部:任务和背景]
[底部]
提醒:只起草发布邮件正文。无主题行。
无评论。150-200 字。
头尾都打到注意力两端。
Step 5:大块参考挪到文件或引用块
如果背景真有 2000 字,挂文件或用 <reference> 圈起来,让模型当参考资料而不是要总结的内容:
任务:起草一封发布邮件,参考下面的政策。
<reference>
... 2000 字政策 ...
</reference>
输出:只要邮件正文。
Step 6:找陌生人测
把 prompt 发给同事(无上下文)。如果他 10 秒内说不出要做什么,模型也说不出。
怎么确认已经修好
- 陌生人读前 3 句能正确指出交付物。
- 输出是交付物,不是背景总结。
- 删冗余背景段不改变输出。
- 同 prompt 跑 3 次,3 次都是正确”类型”的产物。
如果还是没修好
- 上下文可能大到模型注意不到任务。再剪。
- 换更大上下文 + 长上下文注意力更强的模型。
- 两步:第一 prompt 把上下文总结,第二 prompt 用总结 + 任务。
- 任务本身多部分时拆 prompt。
预防建议
- 默认模板:任务先、上下文次、输出格式末。
- 节制上下文:只放会改变答案的。
- 重复性工作存模板,不要每次现编结构。
- 每次发送前回读前 3 行;陌生人应该知道要做什么。
- 上下文超 200 字就用分块标题。
- 警惕”我得提一下”和”补一下背景”——常是可删段。