ReAct 是“reasoning and acting”(推理与行动)的缩写,是一种提示词模式:模型在思考该做什么与借助工具去做之间交替进行。它由 Yao 等人于 2022 年提出,是当今大多数 AI 智能体内部的基本循环。
循环
ReAct 智能体会重复三个步骤,直到能够作答。
- 思考(Thought)。 模型推理自己知道什么、接下来需要什么。
- 行动(Action)。 它选择一个工具以及调用它的参数。
- 观察(Observation)。 应用运行该工具,并把结果返回给模型。
然后循环重复,此时观察结果已经成为上下文的一部分。
Question: Is order 8841 eligible for a refund?
Thought: I need the order date and the refund window.
Action: get_order(order_id="8841")
Observation: {"date": "2026-09-02", "status": "delivered", "custom": false}
Thought: Delivered and not custom. I need the policy window.
Action: get_policy(topic="refunds")
Observation: "Refunds within 30 days of delivery, excluding custom items."
Thought: 36 days have passed, so it is outside the window.
Answer: No. The 30-day refund window ended on 2 October 2026.
只推理不行动,无法触及模型之外的事实。只行动不推理,则是盲目调用工具。把二者交替进行,每次观察都能影响下一个决定。
结合现代工具调用的 ReAct
最初的技术使用应用来解析的文本格式。当前的模型 API 内置了工具调用:你用名称、描述和参数的 JSON Schema 来描述每个工具,模型则返回一个调用其中某个工具的结构化请求。循环是一样的,底层的管道由 API 处理。
这使提示词工程转移到了三个地方。
1. 系统提示词
描述目标、限制,以及何时停止。
You are an order support agent. Use the tools to answer questions
about a customer's orders.
- Look up facts with tools. Do not guess order details.
- Call a tool only when its result is needed for the answer.
- If a tool returns an error, try once more with corrected arguments,
then tell the customer what could not be checked.
- Never issue a refund above $200. Escalate instead.
- Stop and answer as soon as you have enough information.
2. 工具描述
模型只凭描述来挑选工具。把每条描述当作提示词来写。
- 较弱:
get_order: gets an order - 较好:
get_order: Returns date, status, items, and total for one order. Use when the customer mentions an order number. Does not include payment details.
说明工具返回什么、何时使用,以及它不做什么。清楚地命名参数,并描述其格式。
3. 工具结果
观察结果会回到上下文中,所以它们的形态很重要。返回紧凑且带标签的数据,而不是一整页原始 HTML。附上模型可以据以行动的明确错误信息:“No order with that ID”有用,堆栈跟踪则没用。
失败模式
死循环。 智能体重复同一个调用。设置最大步数,并告诉模型到达上限时该怎么办。
工具滥用。 它为自己已经知道的事情调用工具。说明何时不要调用。
参数错误。 它编造 ID 或格式。收紧参数 schema,并返回说明期望格式的错误。
上下文膨胀。 每次观察在每一步都会被重新读取,因此成本随步数的平方增长。裁剪或总结旧的观察。参阅 token 优化。
通过观察结果注入。 工具返回的网页或文档可能包含指令,模型可能会照做。这是间接的提示词注入,也是智能体的主要安全风险。把工具结果标记为数据,限制工具能做的事,并对不可逆的操作要求批准。
过早作答。 它在核实之前就回答。要求事实性陈述必须来自工具结果。
何时使用 ReAct
| 情形 | 使用 |
|---|---|
| 步骤事先已知 | 提示词链:更便宜、更可预测 |
| 路径取决于找到的内容 | ReAct |
| 任务需要实时或私有数据 | 带检索工具的 ReAct |
| 任务要在其他系统中执行操作 | ReAct,对有风险的操作要求批准 |
| 单次查找后直接作答 | 一次检索步骤,而不是循环 |
智能体是最灵活的选项,也是最难做到可靠的选项。只有在确实需要这种灵活性时才使用。
用 MCP 给智能体提供工具
Model Context Protocol 是向智能体提供工具的标准方式,因此一个工具服务器可以配合众多 AI 应用使用。PromptFlowEngine MCP 服务器把提示词分析、重构和脱敏作为只读工具开放出来。智能体可以在自己的循环中使用它们,例如在传递上下文之前先做脱敏,或在开始之前把含糊的任务变成规格说明。
关于智能体指令的更广泛设计,请继续阅读面向 AI 智能体的提示词。