P
Prompt Master

Prompt 大师

掌握和 AI 对话的艺术

Prompt Chaining

拆分任务、逐步生成,让输出更可控

简介

为了提高大语言模型的性能使其更可靠,一个重要的提示工程技术是将任务分解为许多子任务。 确定子任务后,将子任务的提示词提供给语言模型,得到的结果作为新的提示词的一部分。 这就是所谓的链式提示(prompt chaining),一个任务被分解为多个子任务,根据子任务创建一系列提示操作。

https://www.youtube.com/embed/CKZC5RigYEc?si=EG1kHf83ceawWdHX

链式提示可以完成很复杂的任务。LLM 可能无法仅用一个非常详细的提示完成这些任务。在链式提示中,提示链对生成的回应执行转换或其他处理,直到达到期望结果。

除了提高性能,链式提示还有助于提高 LLM 应用的透明度,增加控制性和可靠性。这意味着您可以更容易地定位模型中的问题,分析并改进需要提高的不同阶段的性能。

链式提示在构建 LLM 驱动的对话助手和提高应用程序的个性化用户体验方面非常有用。

链式提示使用示例

文档问答中的链式提示

提示链可以用于不同的场景,这些场景可能涉及多个操作或转换。例如,LLM 的一个常见用途是根据大型文本文档回答问题。想要更好阅读大文本文档,可以设计两个不同的提示,第一个提示负责提取相关引文以回答问题,第二个提示则以引文和原始文档为输入来回答给定的问题。换句话说,可以创建两个不同的提示来执行根据文档回答问题的任务。

下面的第一个提示根据问题从文档中提取相关引文。请注意,为了简化,我们为文档添加了一个占位符 {{document}}。要测试此提示,您可以从维基百科复制并粘贴一篇文章,例如这个关于提示工程的页面。由于此任务使用了较长的上下文,我们使用了 OpenAI 的 gpt-4-1106-preview 模型。您也可以将此提示与其他长上下文 LLM(如 Claude)一起使用。

提示 1:

You are a helpful assistant. Your task is to answer a question based on a document.
Step 1: Extract quotes that are relevant to the question from the document delimited by ####.
Output the quote list using <quotes></quotes>. If you cannot find any relevant quotes, respond with "No relevant quotes found!".

####
{{document}}
####

这是整个提示的截图,包括通过 user 角色传递的问题。

Prompt Chaining Part 1

提示 1 的输出:

<quotes>
- Chain-of-thought (CoT) prompting[27]
- Generated knowledge prompting[37]
- Least-to-most prompting[38]
- Self-consistency decoding[39]
- Complexity-based prompting[41]
- Self-refine[42]
- Tree-of-thought prompting[43]
- Maieutic prompting[45]
- Directional-stimulus prompting[46]
- Textual inversion and embeddings[59]
- Using gradient descent to search for prompts[61][62][63][64]
- Prompt injection[65][66][67]
</quotes>

在第一个提示中返回的引文现在可以用作下面第二个提示的输入。您可以对这些引文进行清理,比如移除引用标志。可以在提示链中新建另一个提示来移除或使用这些引用标志,但现在您可以忽略这些。然后,第二个提示接收由第一个提示提取的相关引文,并根据文档和这些提取的引文生成一个有帮助的回答。第二个提示可以是以下内容:

提示 2:

Using the relevant quotes extracted from the document (delimited by <quotes></quotes>) and the original document (delimited by ####), write an answer to the question. Make sure the answer is accurate, friendly, and helpful.

####
{{document}}
####

<quotes>
- Chain-of-thought (CoT) prompting[27]
- Generated knowledge prompting[37]
- Least-to-most prompting[38]
- Self-consistency decoding[39]
- Complexity-based prompting[41]
- Self-refine[42]
- Tree-of-thought prompting[43]
- Maieutic prompting[45]
- Directional-stimulus prompting[46]
- Textual inversion and embeddings[59]
- Using gradient descent to search for prompts[61][62][63][64]
- Prompt injection[65][66][67]
</quotes>

提示 2 的输出:

The prompt techniques mentioned in the document include:

1. Chain-of-thought (CoT) prompting[27]
2. Generated knowledge prompting[37]
3. Least-to-most prompting[38]
4. Self-consistency decoding[39]
5. Complexity-based prompting[41]
6. Self-refine[42]
7. Tree-of-thought prompting[43]
8. Maieutic prompting[45]
9. Directional-stimulus prompting[46]
10. Textual inversion and embeddings[59]
11. Using gradient descent to search for prompts[61][62][63][64]
12. Prompt injection[65][66][67]

Each technique applies a distinct strategy to improve or constrain interactions with large language models to produce desired outputs.

如您所见,简化并创建提示链是一种有用的提示方法,其中响应需要经过多个操作或转换。作为练习,您可以自由设计一个提示,它会在将响应作为最终回应发送给应用程序用户之前,移除响应中的引用标志(例如,[27])。

您还可以在这份文档中找到更多关于提示链的示例,这些示例利用了 Claude LLM。我们的示例灵感来源于他们,并采用了他们的示例。

📚 相关资源

❓ 常见问题

关于本章主题最常被搜索的问题,点击展开答案

Prompt Chaining 是什么?为什么不用一个长 prompt 搞定?

Prompt chaining 是把任务拆成多个子任务,每步一个 prompt,前一步输出作为后一步输入。一个超长 prompt 在复杂任务上 LLM 可能无法可靠完成;分段后透明度、可控性、可靠性都提升——错在哪一步可以单独定位、单独优化。

文档问答里典型的两步链长什么样?

第一步:让模型从 `####{{document}}####` 里抽出与问题相关的引文,输出包在 `<quotes></quotes>` 里,找不到就回 `No relevant quotes found!`;第二步:把第一步抽到的引文 + 原文档作为输入,让模型基于引文写最终答案。教程用 `gpt-4-1106-preview` 跑,长上下文场景也能换 Claude。

Prompt Chaining 最大的好处是什么?

性能之外的三个工程价值:透明度(能看到每一步中间结果)、可控性(每步可独立改 prompt)、可靠性(错在哪一步立刻定位)。对话助手和个性化 LLM 应用尤其受益——一个 chain 跑完用户能看到「检索→筛选→回答」全过程,比黑盒更可信。

怎么把第一步的输出干净地传给第二步?

用结构化标签包起来,例如第一步输出 `<quotes>...</quotes>`,第二步 prompt 里直接引用这段标签内容并配 `####原文档####` 双分隔符。教程示例第二步指令:`Using the relevant quotes (delimited by <quotes></quotes>) and the original document (delimited by ####), write an answer`——分隔符各司其职,模型不会混淆数据来源。

Prompt Chaining 跟 CoT 是同一回事吗?

不是。CoT 是单个 prompt 内让模型自己生成推理链,所有步骤在一次推理里完成;Prompt chaining 是多个独立 prompt 调用,每次的输出经过外部代码处理(清洗引文、移除引用标志 `[27]`)后再喂下一步。Chain 给你工程介入点,CoT 不给。