您的位置首页 >要闻 > 人工智能 >

LangChain Agent 提示词 Prompt 详解ReAct、Tool Calling 模板编写与调优

LangChain Agent 的 Prompt 是控制智能体行为的核心,它不只是简单的问答提示,还要告诉模型可用工具、什么时候调用工具、输出思考和动作的固定格式,主流分 ReAct 思考链提示词和新版 Tool Calling 工具调用提示词两类;如果 Prompt 写得不好,Agent 很容易乱调用工具、编造结果、不按格式输出,导致解析器报错、循环调用,很多 Agent 不稳定的问题根源都在提示词设计上。之所以 Agent Prompt 和普通对话 Prompt 不一样,普通 Prompt 只需要回答用户问题,Agent 需要循环执行【思考 Thought→调用工具 Action→拿到观测 Observation】,直到信息足够再输出最终答案,所以模板里必须预留占位变量,比如 {tools}、{tool_names}、{agent_scratchpad},scratchpad 就是存放每一轮思考、工具返回结果的历史记录,让模型记住之前做过什么,避免重复无效调用。整套 Prompt 开发流程,先选定 Agent 范式(ReAct 还是 Tool Calling),搭建模板结构,填入角色、工具说明、输出格式约束,再接入占位变量,本地小批量测试,观察是不调用工具、频繁错调用还是格式输出失败,针对性修改约束,最后用 LangSmith 追踪每一轮 prompt、中间步骤,持续迭代优化。Prompt 决定 Agent 的底层逻辑,搭配 OutputParser 做格式校验,但 Parser 救不了提示词本身的模糊规则;现在新版 LangChain 更推荐 Tool Calling 模式,提示词更简洁,依靠模型原生工具能力,而传统 ReAct 提示词通用性更强,兼容所有大模型。

两种主流 Agent Prompt 对比表

类型核心特点模板复杂度依赖能力适用场景
ReAct Prompt显式 Thought/Action/Observation 链式思考,完整写在提示词内高模型遵循文本格式输出不支持原生 Function Call 的开源模型
Tool Calling Prompt提示词只做角色和规则约束,工具入参交给模型原生函数调用能力低模型原生支持 Function CallGPT、DeepSeek、Qwen 等现代模型,生产首选

Agent 标准 Prompt 编写步骤

  1. 确定范式:优先 Tool Calling;模型不支持函数调用时,选用 ReAct 模板
  2. 角色与边界:写明 Agent 身份、目标、禁止行为,禁止编造数据、禁止在不需要工具时强行调用
  3. 注入工具信息:{tools} 自动填充每个工具名称、功能描述、入参;{tool_names} 提供合法工具白名单
  4. 预留占位变量:{input} 接收用户提问,{agent_scratchpad} 存放历史思考与工具返回结果
  5. 输出规则约束:ReAct 必须严格指定 Thought、Action、Action Input、Final Answer 格式;Tool Calling 只约束最终回答风格
  6. 调试与观测:接入 LangSmith 看每一轮完整 prompt,定位格式错乱、误调用的问题
  7. 增加容错规则:工具返回异常、超时、无结果时的处理策略,避免死循环

Prompt 设计的优势和常见坑

✅ 设计要点

  1. 把工具描述写精准,描述直接决定模型会不会选对工具,工具描述越具体,误调用越少
  2. scratchpad 占位符必不可少,去掉之后 Agent 没有记忆,会重复调用同一个工具
  3. 提示词里明确 “能不用工具就不用工具”,减少不必要的调用,节省 token
  4. 可以写动态 Prompt,根据对话状态、用户身份动态修改系统指令

❌ 高频踩坑

  1. ReAct 提示词格式写得模糊,模型输出额外文字,OutputParser 直接解析失败
  2. 工具描述写得太笼统,模型分不清两个相似工具的用途
  3. 忘记限制最大迭代轮数,Prompt 没有终止引导,Agent 无限循环调用工具
  4. 混用 ReAct 模板和 Tool Calling Agent,两者输出解析逻辑完全不兼容
  5. Prompt 过长,工具太多,超出模型上下文窗口,工具信息被模型遗忘

【相关 FAQ】

问题 1:LangChain Agent 提示词 Prompt 里面的 agent_scratchpad 是用来干什么的?

回答 1:LangChain Agent 提示词 Prompt 中的 agent_scratchpad 是占位变量,用来存放每一轮 Thought、工具调用 Action、Observation 返回结果,给模型提供本轮智能体的思考历史,是 ReAct 链式循环的关键。

问题 2:LangChain Agent 的 ReAct 提示词 Prompt 和 Tool Calling 提示词 Prompt 有什么区别?

回答 2:ReAct 提示词 Prompt 在文本里强制写明 Thought、Action 的输出格式,靠文本约束模型;Tool Calling 提示词 Prompt 只做基础角色指令,工具参数交给模型原生 Function Call 机制,模板更简单,稳定性更好。

问题 3:修改 LangChain Agent 提示词 Prompt,能不能解决 Agent 频繁乱调用工具的问题?

回答 3:可以,LangChain Agent 提示词 Prompt 里的工具描述、调用时机约束、边界规则直接影响工具选择;优化工具描述、增加 “无需工具直接回答” 的规则,是解决乱调用的优先手段。

问题 4:如果不自定义 LangChain Agent 提示词 Prompt,框架会怎么样?

回答 4:如果不传自定义 LangChain Agent 提示词 Prompt,create_react_agent、create_tool_calling_agent 会加载框架内置默认 Prompt,默认模板通用性强,但缺少业务约束,复杂业务场景很容易出现格式错误、幻觉、误调用。

【参考资料】

[2026-11-06](LangChain 官方 Agent Prompt 文档)LangChain 官网

[2026-10-22](LangChain 1.x create_tool_calling_agent 提示词开发指南)LangChain 中文文档

[2026-09-15](ReAct Agent 模板、占位变量、OutputParser 原理)LangSmith Hub

[2026-08-01](LangChain Agent 提示词调优:减少幻觉与无效工具调用)阿里云开发者社区

【免责声明】

本文为 LangChain Agent 提示词 Prompt 原理、模板编写科普;不同大模型对 ReAct 文本格式、Tool Calling 的遵循能力有差异;提示词优化无法完全消除模型幻觉;Agent 的稳定性同时受模型能力、工具描述、输出解析器、最大迭代次数共同影响;上线前建议使用 LangSmith 完整测试多轮交互案例。