提示词链指的是用多个提示词依次解决一个任务,前一个的输出成为后一个的输入。提示词分解则是在此之前的设计步骤:决定如何拆分任务。二者结合,是让模型完成复杂事情的最可靠方式。
为什么一个大提示词会失败
一个要求模型一次性完成提取、分析、决策和写作的提示词,存在几个问题:
- 指令相互竞争。提示词要求得越多,某条要求被忽略的可能性就越大。
- 你无法判断是哪一部分失败了。最终答案错误,可能来自任何一个步骤。
- 你无法分别测试各个部分。直到最后都没有可以断言的东西。
- 每次调用都要为每条指令付费,包括与这次输入无关的那些。
链让每个步骤只做一件事,有清晰的输入和可检查的输出。
如何分解任务
想一想一个细致的人会按什么顺序做事,以及他会在哪里把工作交给别人。好的拆分点出现在:
- 工作类型发生变化时(先阅读,再判断,再写作)。
- 中间结果值得检查时(在得出结论之前,先看提取出的事实)。
- 某个步骤只在有时才适用时(只有文本不是英语时才翻译)。
- 不同步骤需要不同的模型时(用小模型分类,用大模型写作)。
一个完整示例
任务:回复一封客户投诉邮件。
步骤 1:提取。 一个小而快的模型把邮件变成结构化的事实。
Extract from the email in the tags: order_id, product, the problem in
one sentence, and what the customer is asking for. Return JSON only.
Use null for anything not stated.
<email>
{{email}}
</email>
步骤 2:决策。 代码查询订单。提示词应用政策。
Given the complaint and the order record, choose one action from:
refund, replace, escalate, explain. Give the policy clause that applies.
Return JSON: {"action": string, "clause": string}.
<complaint>{{step1_json}}</complaint>
<order>{{order_record}}</order>
<policy>{{policy}}</policy>
步骤 3:撰写。 第三个提示词根据决策起草回复。
Write a reply to the customer, under 120 words, that states the action
and what happens next. Do not promise anything outside the action.
<action>{{step2_json}}</action>
<customer_name>{{name}}</customer_name>
每个步骤都可以单独测试。如果回复承诺了错误的内容,你只需查看步骤 2 的输出,就能立刻知道问题出在决策还是撰写。
在步骤之间传递数据
在步骤之间使用结构化输出。 用 JSON 或带标签的字段,而不是散文。这样下一个提示词和你的代码都能依赖其结构。参阅结构化输出提示词。
只传递下一步需要的内容。 转发完整的历史会让后续提示词变长,也让早期的错误扩散。
在每个边界进行验证。 在使用每个步骤的输出之前先检查。没有验证的链会放大错误:五个各自有 95% 概率正确的步骤,全部正确的概率只有约 77%。
对你插入的一切加以分隔。 一个模型的输出,对下一个模型来说是不可信的输入。一封写着“忽略你的指令”的投诉邮件通过了步骤 1,现在进入了步骤 2 的提示词。用标签包裹插入的内容。参阅提示词注入。
链的形态
| 形态 | 描述 | 示例 |
|---|---|---|
| 顺序 | A,然后 B,然后 C | 提取、决策、撰写 |
| 路由 | 先分类,再选择分支 | 账单问题交给一个提示词,错误报告交给另一个 |
| 并行 | 独立步骤同时进行,然后合并 | 总结 10 份文档,再合并 |
| 生成并检查 | 一个提示词产出,另一个审阅 | 起草,然后对照要求进行评审 |
| 循环 | 重复直到满足某个条件 | 修订直到通过验证,并设置重试上限 |
务必给循环设定上限。一条无休止重试的链,既是一次故障,也是一张账单。
提示词链与其他方案的比较
与思维链相比。 思维链把推理保留在一次响应之内。当步骤事先未知时使用它。当步骤已知时使用链:你会获得可测试性和控制力。
与智能体相比。 在链中,由你的代码决定顺序。在智能体中,由模型决定。链更便宜、更快,也更可预测。只有当路径取决于途中的发现时,才选择智能体。参阅 ReAct 提示词和面向 AI 智能体的提示词。
需要关注的成本
链会发起更多调用。要保持经济:
- 为每个步骤使用能胜任的最小模型。
- 并行运行相互独立的步骤以降低延迟。
- 跳过不适用于这次输入的步骤。
- 在服务商支持的情况下,缓存每个提示词的固定部分。参阅 token 优化。
让每一环保持健康
一条链有多个提示词需要维护,所以其中一个出了问题很容易被忽略。把每个提示词存为文件,并在每次改动时全部检查。提示词测试门禁会在仓库中任何提示词低于你的质量线或超出其 token 预算时,让拉取请求失败;提示词分析器会报告未加分隔的变量,这在一个步骤为下一个步骤供给内容的地方最为重要。