开始之前
接下来你会连着跑四条提示词,看着一份简短的季度报告一步步变成排好序的 markdown 表格,每一步跑完都会打印出来。每条提示词拿到的输入,都是上一条提示词的回复。这种交接就是全部技巧,它的名字叫提示链。
你需要 Python 3、anthropic 包和一个 API 密钥,按Claude API 快速上手那一课配置好。每一步的提示词都是普通指令。如果你还不太会写清楚的提示词,先学提示词工程基础那一课。
跑一条来自 Anthropic cookbook 的四步提示链
代码是 Anthropic 自己写的,出自cookbook 里讲基础多 LLM 工作流的笔记本。chain 接收一段起始文字和一组提示词:第一条提示词连同这段文字发出去,之后每条提示词都带上刚拿到的回复。笔记本自己说,这些示例用来演示核心概念,不是生产代码。
from util import llm_call # util.py sits beside the notebook in the cookbook
def chain(input: str, prompts: list[str]) -> str:
"""Chain multiple LLM calls sequentially, passing results between steps."""
result = input
for i, prompt in enumerate(prompts, 1):
print(f"\nStep {i}:")
result = llm_call(f"{prompt}\nInput: {result}")
print(result)
return result
data_processing_steps = [
"""Extract only the numerical values and their associated metrics from the text.
Format each as 'value: metric' on a new line.
Example format:
92: customer satisfaction
45%: revenue growth""",
"""Convert all numerical values to percentages where possible.
If not a percentage or points, convert to decimal (e.g., 92 points -> 92%).
Keep one number per line.
Example format:
92%: customer satisfaction
45%: revenue growth""",
"""Sort all lines in descending order by numerical value.
Keep the format 'value: metric' on each line.
Example:
92%: customer satisfaction
87%: employee satisfaction""",
"""Format the sorted data as a markdown table with columns:
| Metric | Value |
|:--|--:|
| Customer Satisfaction | 92% |""",
]
# Three of the cookbook's eight report lines
report = """
Q3 Performance Summary:
Our customer satisfaction score rose to 92 points this quarter.
Revenue grew by 45% compared to last year.
Employee satisfaction is at 87 points.
"""
formatted_result = chain(report, data_processing_steps)- 从同一个 cookbook 文件夹里把 util.py 复制到你的项目中。它的
llm_call发送一条用户消息并返回回复文字,默认模型是claude-sonnet-5-5,也可以传入别的模型。 - 在终端里设置
ANTHROPIC_API_KEY,因为util.py从环境变量里读取密钥。 - 把代码保存在
util.py旁边,然后运行。 - 先看“Step 1”下面的输出。后面每一步都只依据这段文字工作,所以这里漏掉的数值,后面再也找不回来。
- 再拿它和“Step 4”对照,那是最后一条提示词要求的 markdown 表格。
每次调用看到了什么
值得细看的是循环里的那一行:llm_call(f"{prompt}\nInput: {result}")。每次调用只拿到一条指令和一段文字。第 3 步从来看不到原始报告,只看到第 2 步返回的列表。
视野窄有好有坏。没拿到的文字不会干扰这一步,可前面某一步丢掉的事实,这一步也补不回来。如果第 4 步需要原始输入里的内容,就有意识地把它传过去,放进单独的 XML 标签里,让模型分得清哪是指令、哪是材料。每一步的提示词其实也是一个小模板,固定的指令加一个空位,下一课会做出带多个具名空位的模板。
Anthropic 的交互式教程在讲提示链的附录里用的是另一种接法。它让对话一直延续:第一条回复作为助手回合放回去,后面跟着下一个请求,所以每次调用都能看到之前所有的回合。
| 方面 | 只传输出 | 传整段对话 |
|---|---|---|
| Anthropic 在哪里演示 | cookbook 里的 chain 函数 | 教程里讲提示链的附录 |
| 每一步看到什么 | 自己的指令和上一条回复 | 之前所有的请求和回复 |
| 每次调用的输入量 | 大约一步的量 | 每多一步就更长 |
| 适合 | 把数据一步步改成新的形状 | 让模型修改它自己上一条回答 |
在步骤之间加关卡
第 1 步要求输出 value: metric 形式的行。要是模型多加了一个标题或者项目符号,第 2 步照样会运行,问题要等到三次调用之后才冒出来。Anthropic 的指南 Building effective agents 给出了办法:在任何中间步骤上加程序化检查,图里画作“gate”(关卡),用来确认流程没有跑偏。
下面这段代码是本课自己写的,它把 cookbook 的 chain 包了一层:去掉打印,并在你指定的步骤之后运行检查。检查不通过就抛出错误,坏掉的那一步会让整条链停下,而不是把错误结果喂给下一条提示词。
关卡也可以是一条提示词。教程先让模型列出十个以“ab”结尾的单词。接着是一个复查请求:“Please find replacements for all 'words' that are not real words.”笔记本提到,Claude 偶尔还是会改动本来就正确的单词。解决办法是给复查者留一条退路,加上一句“If all the words are real words, return the original list.”。复查步骤少了这句话,就没法说一句“这份结果没问题”。
# Paste this below the first sample: it reuses report and data_processing_steps.
import re
from util import llm_call
LINE = re.compile(r"^\S+: .+") # the 'value: metric' shape steps 1 to 3 ask for
def check_lines(text: str) -> None:
"""A gate: stop the chain when a step breaks the line format."""
lines = [line.strip() for line in text.strip().splitlines() if line.strip()]
bad = [line for line in lines if not LINE.match(line)]
if not lines or bad:
raise ValueError(f"Gate failed. First bad lines: {bad[:3]}")
def chain_with_gates(input: str, prompts: list[str], gates: dict) -> str:
"""The cookbook's chain, with a check after the steps named in gates."""
result = input
for i, prompt in enumerate(prompts, 1):
result = llm_call(f"{prompt}\nInput: {result}")
check = gates.get(i)
if check:
check(result) # raises, so a bad step never reaches the next prompt
return result
table = chain_with_gates(
report, data_processing_steps, {1: check_lines, 2: check_lines, 3: check_lines}
)什么时候提示链胜过一条长提示词
Anthropic 的规则很简短:任务能干净地拆成固定的子任务时,就用提示链。你牺牲一些延迟来换准确度,因为每次调用的活儿都更轻松。它举了两个例子:先写营销文案再翻译成另一种语言,以及先写大纲、对照标准检查大纲、再按大纲写出整篇文档。Anthropic 2024 年的一篇文章还举了一个分三次调用回答税务问题的例子:先列出相关的税法条目,再在每份文档里找出相关段落,最后根据收集到的内容作答。
这些例子有个共同点:第一次调用之前,顺序就已经定了。如果该走哪些步骤取决于输入,固定的提示链就不合适。一个混着退款申请和技术故障的客服队列,需要一个路由来挑下一条提示词,或者一个自己决定步骤的智能体,AI 智能体那一课讲过这一点。一条已经好用的清楚提示词,根本不需要拆成链。
研究结果也指向同一个方向,只是用的模型如今已经过时。2022 年的least-to-most 提示论文让 GPT-3 的 code-davinci-002 先把问题拆成更简单的子问题,再按顺序逐个解决,每个答案都传给下一个。在 SCAN 这个考察能否处理比示例更难指令的测试上,论文报告的准确率至少 99%,而思维链提示只有 16%。
后来的两项研究延续了这个规律。2023 年的 Self-Refine 让 GPT-3.5、ChatGPT 和 GPT-4 先起草输出,再对它给出反馈,然后据此修改。在七项任务上,它报告的任务表现比一步生成平均高出约 20%(绝对值)。一项 2024 年的摘要研究把起草、批评、修改分别做成三条提示词和合成一条提示词来比较。三条提示词的链结果更好,作者认为,单条提示词里的修改过程可能只是模拟出来的。
来源:Least-to-Most Prompting (Zhou et al., 2022) on Hugging Face Papers (2026年11月6日 查阅)
Anthropic 谈“智能体组成的工作流”,以及 AI Chains 研究
2025 年 10 月,Anthropic 发布了一段对谈。对谈双方是 Claude Relations 的 Alex Albert,以及做多智能体研究、参与撰写 Building effective agents 的 Erik。6:40 开始的那一章,标题译过来是“工作流与智能体的演变(由智能体组成的工作流)”。这个标题正好说明了本课这种提示链可以往哪里发展:步骤顺序仍然写在你的代码里,某一步需要搜索或调用 API 时,就让这一步变成一个带工具的智能体。
提示链比这波智能体热潮出现得更早。2021 年的论文 AI Chains 里,Tongshuang Wu、Michael Terry 和 Carrie J. Cai 对一个搭建提示链的交互工具做了 20 人的用户研究。提示链提高了任务结果的质量,用户还自己摸索出一种调试办法:对链里的子组件做“单元测试”,找出意外输出的来源。今天你也可以照做:把第 2 步的输出存成文件,单独反复运行第 3 步,直到它表现正常。
一个步骤的输出成为下一个步骤的输入,每一步带来的提升也就累积了起来。

常见错误
- 一条清楚的提示词就能搞定的任务也拆成链,白白多付四次调用、多等四次。
- 每次调用只看到递给它的文字,却让第 1 步丢掉了后面步骤要用的事实。
- 某一步返回的格式已经错了,后面的步骤还照跑,错误要到三次调用之后才露出来。
- 加了复查步骤,却没给它说“结果已经没问题”的余地。
- 从最终输出开始排查,而不是从第一个输出看起来不对的步骤开始。
- 每个输入要走的步骤都不一样,却把顺序写死在代码里。
自己试一试
- 从报告里删掉员工满意度那一行,再跑一遍提示链。哪一步最先体现出变化?
- 运行
chain_with_gates,故意在第 1 步的提示词里加一句“Start with a short heading.”把它弄坏。是哪道关卡让运行停下的?它的错误信息列出了什么? - 加第五步,用一句话说明最大的那个数值,并把原始报告放进名为
report的 XML 标签里,和表格一起交给它。 - 把 Anthropic 指南里写大纲的例子做成三条提示词加一道关卡。你的关卡具体检查什么?
自测一下
在 cookbook 的 chain 函数里,第 3 步接收到什么?
查看答案
B. 它自己的提示词和第 2 步的输出 每次调用都由一条提示词加上前一次调用的结果组成。
提示链里的关卡(gate)是什么?
查看答案
A. 步骤之间可以让运行停下的检查 Anthropic 的指南把关卡描述为加在中间步骤上的程序化检查,用来确保流程没有跑偏。
哪个任务最适合用固定的提示链?
查看答案
C. 先写大纲、检查大纲,再写出文档 它的子任务事先就知道,而且每次都按同样的顺序运行,这正是 Anthropic 说适合提示链的情况。
复查步骤总是改动本来就正确的单词。Anthropic 的教程在复查提示词里加了什么?
查看答案
D. 一句话:没有问题时就原样返回列表 给复查者留一条退路,它就会让正确的结果保持原样,而不是硬找地方去改。
常见问题
什么是提示链?
提示链就是把一个任务拆成几条按固定顺序运行的提示词,每一条都接收上一条的输出。Anthropic 在它的智能体指南里把它列为第一种工作流,步骤之间可以加检查。
提示链和思维链有什么区别?
思维链是在一条回复里要求模型写出推理步骤,提示链则让每一步都成为一次单独的模型调用。分开调用,你就能单独检查某一步,或者只重跑这一步,一条回复做不到这一点。
提示链算是 AI 智能体吗?
不算。按 Anthropic 的说法,提示链属于工作流,模型和工具沿着预先写好的代码路径运行;智能体则自己决定流程和工具的使用。不过提示链可以把其中一步交给智能体去做。
一条提示链应该有几步?
任务需要几步就几步,越少越好。每多一步就多一次调用、多一次等待,Anthropic 也建议先找最简单的方案,确有需要再增加复杂度。在两步之间加一道检查能拦住真实错误的地方,才值得拆开。
提示链的步骤可以并行运行吗?
互相依赖的步骤不行,因为每一步都要等前一步的输出。彼此独立的部分可以。同一个 cookbook 笔记本里有一个 parallel 函数,把同一条提示词同时用在多个输入上,Anthropic 的指南把它算作另一种工作流,叫并行化。
资料来源
- Anthropic Engineering: Building effective agents https://www.anthropic.com/engineering/building-effective-agents
- Anthropic cookbook: Basic multi-LLM workflows (notebook) https://github.com/anthropics/claude-cookbooks/blob/main/patterns/agents/basic_workflows.ipynb
- Anthropic cookbook: util.py for the agent patterns https://github.com/anthropics/claude-cookbooks/blob/main/patterns/agents/util.py
- Anthropic's prompt engineering tutorial: Appendix 10.1, Chaining Prompts https://github.com/anthropics/prompt-eng-interactive-tutorial/blob/master/Anthropic%201P/10.1_Appendix_Chaining%20Prompts.ipynb
- Anthropic: Prompt engineering for business performance (29 February 2024) https://www.anthropic.com/news/prompt-engineering-for-business-performance
- Least-to-Most Prompting (Zhou et al., 2022) on Hugging Face Papers https://huggingface.co/papers/2205.10625
- Self-Refine (Madaan et al., 2023) on Hugging Face Papers https://huggingface.co/papers/2303.17651
- Prompt Chaining or Stepwise Prompt? (Sun et al., 2024) on Hugging Face Papers https://huggingface.co/papers/2406.00507
- AI Chains (Wu, Terry and Cai, 2021) on Hugging Face Papers https://huggingface.co/papers/2110.01691
- YouTube: Building more effective AI agents (Anthropic, 17 October 2025) https://www.youtube.com/watch?v=uhJJgc-0iTQ
