Agent 提示:规划与子任务
Agent 提示让模型不只答一句,而是把目标拆成步骤、调用工具、读取结果并继续,直到完成任务。与「一问一答」不同,Agent 的核心是一个循环:模型在每一步决定「下一步做什么、调哪个工具、拿到结果后怎么推进」。最经典的范式是「推理与行动」交织的 ReAct(Yao 等, 2022),它把 Chain-of-Thought 式的思考与外部工具调用结合起来,让模型在「想」和「做」之间交替前进。近年的研究在 ReAct 之上演化出多种规划与反思策略,让 Agent 能处理更长、更复杂的任务。
是什么
ReAct 让模型在每一步先输出思考(Thought)说明当前推理,再决定行动(Action)——通常是调用某个工具并传入参数,然后**观察(Observation)**工具返回,再思考下一步,形成循环(Yao 等, 2022, arXiv:2210.03629)。后续研究的几种典型变体:
- Plan-and-Execute:先由模型产出整体计划(一串子目标),再逐步执行;好处是减少中途走偏,代价是先规划可能不准。
- ReWOO:把多个工具调用一次性规划并并行执行,减少串行步数,降低延迟与成本。
- Reflexion(Shinn 等, 2023):失败后让模型做口头自我反思,把教训写入记忆,下一轮避免重蹈覆辙。
- Tree of Thoughts(Yao 等, 2023):对多条推理路径做搜索与回溯,适合需要探索的解题类任务。
选型时按需取舍,并非越复杂越好:多数业务场景 ReAct 已够用,只有在长任务或高错误成本场景才值得引入反思与搜索。
为什么用 Agent
单轮回答无法处理需要查实时数据、做多步推理、操作外部系统的任务。比如「查上周销售额最高的 SKU 并写一封提醒补货的邮件」,模型本身没有数据库和发信能力,靠一次生成答不出来。Agent 通过工具把模型接入真实世界:检索、计算、写文件、调 API,逐步逼近答案。但要注意,Agent 的成本与不可控性也随步数上升——每一步都是一次模型调用加一次工具往返,且步骤越多越容易在中段走偏。所以不是所有任务都该上 Agent:能一步搞定的,就别引入循环;只有当任务确实需要多步外部交互时,Agent 的复杂度才划算。
怎么写提示
明确循环格式与停止条件,并给出工具清单。一个 ReAct 风格骨架:
目标:{{goal}}
可用工具:
- search(query): 检索资料
- calculator(expr): 计算
- db_query(sql): 查询数据库
每步严格按以下格式输出:
思考:<你当前的推理>
行动:<工具名>(<参数>)
观察:<工具返回结果,由系统填入>
当已得出最终答案时,输出「完成:<答案>」并停止。
在真实工程里,更常见的是用模型厂商的**工具调用(function calling / tool use)**能力:把工具描述成 JSON Schema,由模型输出结构化调用,运行时执行后把结果回填。这样比靠模型自由文本解析更稳健。
{
"name": "db_query",
"description": "执行只读 SQL 查询并返回前 N 行",
"parameters": {
"type": "object",
"properties": {
"sql": {"type": "string", "description": "标准 SELECT 语句"},
"limit": {"type": "integer", "default": 10}
},
"required": ["sql"]
}
}
工具设计本身决定 Agent 成败:描述要写清「何时用、参数是什么、返回什么」;参数要类型化、可校验;失败时返回清晰错误信息而非空字符串,让模型有机会换参数重试。
状态、记忆与评估
- 状态管理:长任务要把中间结论写入可检索的「记忆」(如向量库或一张 scratch 笔记),避免上下文被早期步骤挤占(context 截断)。
- 评估 Agent:不能只看最终答案对不对,还要看任务成功率、平均步数、工具调用成功率、单任务成本(token / 美元)——一个更准但步数翻倍的 Agent 未必更优。
- 可观测:把每步的思考、行动、观察记日志(如 LangSmith trace),便于事后调试、复盘与审计。
注意点
- 必须设最大步数(max_steps):防止模型陷入「思考—行动」死循环,无限烧 token 且任务永远完不成。
- 工具返回要截断与清洗:长文本(如整页网页、大张表)直接塞进上下文会撑爆窗口并引入噪声,应做摘要、截断或结构化抽取后再回填。
- 关键动作加人工确认:尤其是写操作(发邮件、改数据库、调支付接口),默认应暂停等待确认,避免不可逆后果。
- 错误要可恢复:工具调用可能失败或返回异常,提示里要告诉模型「若观察为空或报错,换一种参数或换工具重试」,而不是卡死在无效循环。
小结
Agent 提示用「思考到行动到观察」的循环把目标分解为子任务并驱动工具。选型上,能单步做就别上循环;真正需要多步外部交互时,配齐步数上限、结果清洗、人工确认、执行日志与记忆机制,并同时关注成功率与成本,才能安全可控地运行。
参考与延伸阅读
- 论文 ReAct: Synergizing Reasoning and Acting in Language Models(Yao 等, 2022)。已核验。https://arxiv.org/abs/2210.03629
- 论文 Reflexion: Language Agents with Verbal Reinforcement Learning(Shinn 等, 2023)。已核验。https://arxiv.org/abs/2303.11366
- OpenAI 工具调用(Function Calling)指南。已核验。https://platform.openai.com/docs/guides/function-calling
- LangChain Agents 文档。已核验。https://python.langchain.com/docs/modules/agents/