技巧

提示词链与提示词分解

提示词链把复杂任务拆成一连串简单的提示词。如何分解任务、在步骤之间传递数据,以及如何处理链中的错误。

译自英文原文。代码、提示词和模型输出保留英文。

提示词链指的是用多个提示词依次解决一个任务,前一个的输出成为后一个的输入。提示词分解则是在此之前的设计步骤:决定如何拆分任务。二者结合,是让模型完成复杂事情的最可靠方式。

为什么一个大提示词会失败

一个要求模型一次性完成提取、分析、决策和写作的提示词,存在几个问题:

  • 指令相互竞争。提示词要求得越多,某条要求被忽略的可能性就越大。
  • 你无法判断是哪一部分失败了。最终答案错误,可能来自任何一个步骤。
  • 你无法分别测试各个部分。直到最后都没有可以断言的东西。
  • 每次调用都要为每条指令付费,包括与这次输入无关的那些。

链让每个步骤只做一件事,有清晰的输入和可检查的输出。

如何分解任务

想一想一个细致的人会按什么顺序做事,以及他会在哪里把工作交给别人。好的拆分点出现在:

  • 工作类型发生变化时(先阅读,再判断,再写作)。
  • 中间结果值得检查时(在得出结论之前,先看提取出的事实)。
  • 某个步骤只在有时才适用时(只有文本不是英语时才翻译)。
  • 不同步骤需要不同的模型时(用小模型分类,用大模型写作)。

一个完整示例

任务:回复一封客户投诉邮件。

步骤 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 预算时,让拉取请求失败;提示词分析器会报告未加分隔的变量,这在一个步骤为下一个步骤供给内容的地方最为重要。