为什么位置影响遵守率
长提示里,开头的设定与结尾的复述更容易被遵守,夹在中间的要求最容易被忽略——这是长上下文的位置效应(Lost in the Middle,Liu et al., TACL 2024)。可操作的排布是:硬约束放开头、长资料放中间、结尾用一行复述硬约束。前提是提示确实长(含大段资料或多轮历史);几百字的短提示做首尾复述只会增加输入长度。
基本信息
| 适用 | 长提示:含大段资料、多轮历史或长示例 |
|---|---|
| 依据 | 长上下文中段信息更容易被忽略(位置效应) |
| 做法 | 硬约束开头声明 + 结尾一行复述 |
| 复述范围 | 只复述硬约束,不重抄整段提示 |
| 不适用 | 短提示无需复述,重复只增加成本 |
典型使用场景
- 大段资料抽取:把「仅输出 JSON」放开头与结尾,资料用标签包住夹在中间
- 多轮长对话:结尾提醒「只依据本轮提供的资料作答」,防止引用历史里的旧数据
- 长报告生成:开头声明章节与字数上限,结尾复述禁止添加原文外事实
- 提示模板化:渲染后仍要保证硬约束在首尾,模板里必须留固定槽位
- 评审与回归:把最关键的 2-3 条约束提炼成结尾自检清单,便于人工抽查
长提示排布模板
长提示排布模板
# 开头:硬约束,越短的规则越要放在最前面
【硬约束|开头】输出必须是可通过 JSON.parse 的数组;数字不加千分位。
# 中间:资料放中间,用标签包住,避免与指令混排
【资料|中间】
<data>……较长材料……</data>
# 结尾:复述只针对硬约束,一行写完
【复述|结尾】再次确认:仅输出 JSON 数组;数字不带千分位;不要附加解释。
# 变量槽位:模板渲染后要检查首尾段落是否仍然存在
# 自检:渲染完成后抽读首尾各三行,确认约束逐字一致位置与效果对照
| 位置 | 放什么 | 注意事项 |
|---|---|---|
| 开头 1-3 行 | 硬约束、输出格式、角色设定 | 越靠前越显著,别把这里用在罗列背景上 |
| 中段 | 参考资料、对话历史、示例数据 | 内容最长的一段,用标签与编号隔离 |
| 结尾 1-2 行 | 硬约束复述、自检清单 | 只复述硬约束,且与开头表述逐字一致 |
| 不推荐的位置 | 关键约束只出现在中段 | 遵守率最低,也是提示事故最常见的来源 |
首尾表述必须逐字一致:一处写两位小数、一处写一位时,模型会在两者间随机取舍,评测结果也会跟着抖动。
复述不等于重抄。把中段资料再写一遍只会拉长上下文、抬高成本,还会稀释真正的约束。