技巧

ReAct 提示词:借助工具推理与行动

ReAct 提示词把推理与工具调用交替进行,让模型能够查找信息并采取行动。循环如何运作、一个提示词示例,以及常见的失败模式。

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

ReAct 是“reasoning and acting”(推理与行动)的缩写,是一种提示词模式:模型在思考该做什么与借助工具去做之间交替进行。它由 Yao 等人于 2022 年提出,是当今大多数 AI 智能体内部的基本循环。

循环

ReAct 智能体会重复三个步骤,直到能够作答。

  1. 思考(Thought)。 模型推理自己知道什么、接下来需要什么。
  2. 行动(Action)。 它选择一个工具以及调用它的参数。
  3. 观察(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 智能体的提示词。