Revision Prompting:用 diff 让 LLM 只改需要改的部分
一种让 LLM 对更新后的输入只产出补丁而非重新生成全文的提示技术,可节省约 80% 时间与 65% 成本。
在工业级 LLM 应用中,同一条指令往往会被反复作用在大量输入上。当输入发生更新时,常见的做法是把整条指令重新跑一遍,但这会带来两个问题:模型输出天然具有非确定性,重新运行会让未变化的部分也产生漂移;同时,重新生成完整输出需要支付完整的时间和 token 成本。Revision Prompting(修订式提示)正是为解决这两个问题而设计的提示工程方法。
核心思路
传统的工业提示可概括为:把一段 Input 交给 LLM,配合一条 Instruction,让它产出 Output。当 Input 更新为 UpdatedInput 后,朴素做法是再次执行 Instruction 得到 UpdatedOutput。Revision Prompting 改为把差异(diff)交给模型,让它只生成针对差异的补丁(OutputPatch),再把这个补丁应用到原 Output 上得到 UpdatedOutput。
构造的修订提示模板大致如下:
- Instruction:Input,产生了 Output。
- 输入更新如下:diff(Input, UpdatedInput)。
- 请产出一个补丁来更新输出。
模型返回 OutputPatch 后,再用文本或结构化工具(如 POSIX diff 或 JSON Patch)把它合并回原文。
一个翻译场景的示例
原始任务是「把以下电动自行车产品页翻译成德语」,输入中包含「续航 80 km、电池三小时充满、回收铝车架、两年保修」等内容。模型给出的德语译文作为 Output 被保留下来。
随后产品页把续航从 80 km 改为 100 km。Revision Prompting 不再让模型重译整页,而是把原始输入与产出连同 diff(- 续航 80 km / + 续航 100 km)一起交给模型,让它只生成对应的德语补丁:- Das E-Bike Vela 3 hat eine Reichweite von 80 km. / + Das E-Bike Vela 3 hat eine Reichweite von 100 km.。把这个补丁应用到原 Output,就得到了更新后的完整德语翻译,未被改动部分保持原样。
为什么有效
- 一致性:由于补丁的范围被 diff 限定,未触及的内容与原 Output 完全一致,更新后的输出不会在无关字段上发生漂移。
- 时间与成本:大量原本属于输出的 token 被转移到了输入端,而输入 token 通常更便宜;模型只需要生成很短的 OutputPatch,整体处理时间也随之下降。若修订发生在原调用后几分钟内,输入侧的 prompt 缓存还能进一步压低部分输入 token 成本。
- 格式选择:diff 与补丁的编码格式可以根据 Instruction 灵活选择。文本类输出可用 POSIX diff;结构化 JSON 输出更适合用 JSON Patch(RFC 6902)。
实际节省幅度
节省幅度取决于两点:输入变化的占比,以及输出对输入变化的敏感程度——变化越小、输出越只受局部影响,节省越明显。作者给出的工业 prompt 实测数据为:
- 处理时间下降约 80%。
- 综合成本下降约 65%。
对于需要高一致性、频繁小幅度更新的工业流水线(例如文档翻译、结构化抽取、报表重生成等),Revision Prompting 提供了一条用提示工程本身就能落地的优化路径,而无需更换底层模型或引入额外的微调。
