一、先搞懂ZeroShot_ReAct 到底是什么首先要明确两个核心概念的结合——ZeroShot零样本与ReAct推理行动二者结合才构成了这个Agent的强大能力1. ReAct让AI像人一样“思考行动”ReAct是一种大模型推理框架核心逻辑源于人类解决问题的习惯先思考Thought再行动Action根据行动结果Observation再调整思考循环往复直到得出答案。这种框架打破了“大模型只做文本生成”的局限让AI具备了“主动调用外部工具”的能力而不是单纯依赖自身知识库回答问题。比如面对“现在几点了”这个问题AI不会凭空猜测而是会思考“我需要获取当前时间这需要调用专门的工具”然后执行调用操作拿到结果后再整理成最终答案——这就是ReAct的核心价值让推理与行动协同解决大模型“不会实时交互、不会计算”的痛点。2. ZeroShot无需训练即插即用ZeroShot零样本则解决了“使用门槛”的问题。传统Agent可能需要提前准备大量训练样本告诉AI“什么场景用什么工具”而ZeroShot_ReAct Agent完全不需要——它仅通过工具的描述信息就能自主判断“当前问题是否需要调用工具、调用哪个工具、如何传递参数”。简单来说你只需要告诉Agent“有一个工具能获取当前时间无需参数”它就能在遇到“查询时间”的问题时自动调用这个工具遇到“数学计算”的问题时自动匹配计算工具——这就是它最便捷的地方无需训练配置好工具和提示词就能直接使用。ZeroShot_ReAct 核心优势总结零样本适配无需训练样本仅通过工具描述即可实现工具调用决策降低开发成本推理透明全程遵循“思考-行动-观察”的流程可清晰追溯AI的决策逻辑便于调试灵活扩展新增工具时只需添加工具描述和实现逻辑无需修改Agent核心代码兼容性强可适配各类兼容OpenAI API的大模型无论是在线模型还是本地部署的模型如Qwen、DeepSeek等都能无缝对接。二、实战拆解ZeroShot_ReAct Agent 实现步骤结合本次实战案例我们搭建的Agent能实现两个核心功能获取当前系统时间、执行数学表达式计算。整个实现过程分为4个核心步骤逻辑清晰可直接复用思路扩展更多工具。步骤1配置大模型LLM—— Agent的“大脑”大模型是ZeroShot_ReAct Agent的核心负责“思考决策”判断是否需要调用工具、调用哪个工具、如何处理工具返回结果。本次实战选用了本地部署的Qwen3.5模型通过兼容OpenAI API的方式接入LangChain。核心配置思路只需指定模型的API密钥、部署地址、模型名称以及温度temperature和最大令牌数max_tokens——温度越低AI的决策越稳定避免随机猜测最大令牌数则限制单次输出的长度防止冗余。这里的关键的是只要模型兼容OpenAI API无论你用的是在线模型如GPT、DeepSeek还是本地部署的模型如Ollama部署的Qwen、Llama都能直接替换使用无需修改后续核心逻辑。步骤2定义工具—— Agent的“手脚”工具是Agent与外部交互的载体也是ZeroShot_ReAct实现“行动”的核心。每个工具都需要明确三个关键信息工具名称、工具功能函数实现、工具描述——这三个信息尤其是工具描述直接决定了AI能否正确判断何时调用该工具。本次实战定义了两个工具思路可直接复用时间工具负责获取当前系统时间无需输入参数工具描述需明确“无需参数”避免AI传递多余信息计算工具负责执行数学表达式计算支持加减乘除和括号工具描述需明确支持的表达式类型让AI知道该工具能解决什么问题、需要传递什么格式的输入。这里有一个细节工具的描述必须简洁、准确避免模糊表述。因为ZeroShot_ReAct Agent正是通过解析工具描述来判断“当前问题是否需要调用该工具”——描述越清晰AI的决策越准确减少调用错误。同时工具的函数实现需考虑安全性比如计算工具需限制可执行的函数避免恶意代码注入。步骤3自定义ReAct提示模板—— Agent的“行为准则”提示模板Prompt是ZeroShot_ReAct Agent的“规则手册”核心作用是告诉AI“如何思考、如何输出、如何调用工具”。因为大模型本身并不知道“ReAct流程”也不知道“如何规范调用工具”需要通过提示模板来约束其行为。本次实战的提示模板重点做了两个核心约束也是ZeroShot_ReAct能正常工作的关键格式约束明确规定“需要调用工具”和“无需调用工具”的输出格式比如调用工具时必须按照“思考-行动-输入”的三行格式输出不能添加任何多余文字确保Agent能正确解析AI的输出工具约束明确告知AI可用的工具名称和工具功能并且强调“工具名称必须完全匹配区分大小写”避免AI因名称错误导致调用失败。此外提示模板中还预留了“历史执行记录”的位置用于存储AI的思考、行动和观察记录让AI能根据上一步的结果调整下一步的决策——这正是ReAct框架“循环推理”的核心实现。步骤4创建Agent和执行器—— 让Agent“动起来”有了“大脑”大模型、“手脚”工具和“行为准则”提示模板就可以将三者组装成完整的ZeroShot_ReAct Agent再通过执行器AgentExecutor来运行任务。核心思路使用LangChain提供的create_react_agent方法将大模型、工具、提示模板整合生成Agent再通过AgentExecutor来控制Agent的执行流程比如设置最大迭代次数防止死循环、开启详细日志便于调试、自动处理解析错误提升稳定性。执行器的作用相当于“管家”负责调度Agent的思考和行动确保整个流程有序进行接收用户问题 → Agent思考决策 → 调用工具如有 → 处理工具返回结果 → 输出最终答案。三、关键细节与避坑指南在搭建ZeroShot_ReAct Agent的过程中有几个细节直接影响Agent的稳定性和准确性新手很容易踩坑这里重点提醒工具描述要精准避免模糊表述比如“计算工具”不能只写“能计算”要明确支持的运算类型、输入格式否则AI可能无法判断何时调用格式约束要严格AI的输出格式必须和提示模板中规定的一致否则执行器无法解析会导致调用失败——这也是为什么提示模板中要强调“不要添加任何额外文字”大模型选择要适配建议选择推理能力较强的模型比如Qwen3.5、DeepSeek等避免因模型推理能力不足导致无法正确判断是否需要调用工具安全性要考虑如果工具涉及外部调用或代码执行如计算工具需做好安全防护比如限制可执行的函数、过滤危险输入避免恶意攻击。四、总结与扩展方向本次实战搭建的ZeroShot_ReAct Agent虽然功能简单但已经覆盖了核心实现逻辑——它的本质就是“通过提示模板约束大模型让大模型根据工具描述自主完成‘思考-行动-观察’的循环实现零样本工具调用”。对比传统的工具调用方式ZeroShot_ReAct的优势在于“灵活、低成本”无需训练样本新增工具时只需添加工具描述和实现逻辑就能快速适配新的需求而ReAct框架则让AI的决策过程更加透明便于调试和优化这也是其在企业智能决策、自动化流程等场景中广泛应用的原因之一。后续扩展方向也很明确扩展工具新增天气查询、知识库检索、文件读取等工具实现更复杂的任务优化提示模板调整思考逻辑的描述提升AI的决策准确性对接更多模型尝试接入不同的大模型对比其在ZeroShot_ReAct场景下的表现增加记忆功能结合LangChain的记忆组件让Agent能记住历史对话实现多轮交互下的工具调用。ZeroShot_ReAct Agent是LangChain Agent体系中最基础也最实用的方案掌握它的实现思路能为后续搭建更复杂的智能Agent如多Agent协同、带记忆的Agent打下坚实基础。如果觉得本文对你有帮助欢迎点赞、收藏后续会持续分享LangChain实战技巧一起玩转大模型应用开发代码实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121importosfromdotenvimportload_dotenvfromlangchain.agentsimportAgentExecutor, create_react_agentfromlangchain_core.toolsimportToolfromlangchain_openaiimportChatOpenAIfromlangchain_core.promptsimportPromptTemplate# ← 用于自定义 prompt# 加载环境变量load_dotenv()# # 1. 配置 LLMOllama 兼容 OpenAI API# DEEPSEEK_API_KEY123# 替换为实际的 API KeyllmChatOpenAI(api_keyDEEPSEEK_API_KEY,base_urlhttp://192.168.0.100:8085/v1,modelqwen3.5-27b-awq,temperature0.3,max_tokens1024,)# # 2. 定义工具# defget_current_time(*args,**kwargs):fromdatetimeimportdatetimecurrent_timedatetime.now().strftime(%Y年%m月%d日 %H:%M:%S)returnf当前时间{current_time}defcalculate_math_expression(expression:str):try:# 构建安全的白名单内置函数safe_funcs{}forfunc_namein(abs,round,min,max,pow):ifhasattr(__builtins__, func_name):safe_funcs[func_name]getattr(__builtins__, func_name)# 执行安全计算resulteval(expression, {__builtins__: {}}, safe_funcs)returnf数学表达式计算结果{expression} {result}exceptException as e:returnf计算失败错误信息{str(e)}tools[Tool(nameGetCurrentTime,funcget_current_time,description获取当前系统时间无需任何输入参数),Tool(nameCalculateMathExpression,funccalculate_math_expression,description计算一个数学表达式例如 100 * (25 15) / 4 - 80仅支持 - * / 和括号)]# # 3. 自定义 ReAct 提示模板中文 严格格式约束# react_prompt_template你是一个智能助手必须严格遵守以下交互协议## 规则1. 如果需要使用工具请**严格按照以下三行格式输出**不要添加任何额外文字、标点、说明或自然语言Thought: 我需要使用工具来解决问题。Action: 工具名称Action Input: 工具输入内容2. 如果不需要工具直接输出Thought: 我可以直接回答。Final Answer: 你的最终答案## 可用工具{tools}## 合法工具名称必须完全匹配区分大小写{tool_names}## 用户问题{input}## 历史执行记录如有{agent_scratchpad}# 创建 PromptTemplate确保包含所有必要变量promptPromptTemplate(input_variables[tools,tool_names,input,agent_scratchpad],templatereact_prompt_template)# # 4. 创建 Agent 和执行器# agentcreate_react_agent(llmllm,toolstools,promptprompt)agent_executorAgentExecutor(agentagent,toolstools,verboseTrue,handle_parsing_errorsTrue,# 自动处理解析错误并重试max_iterations5,# 防止死循环)# # 5. 执行任务# if__name____main__:print( 任务1获取当前时间 )agent_executor.invoke({input:请告诉我现在的时间是多少})print(\n*50\n)print( 任务2数学计算 )agent_executor.invoke({input:请帮我计算 100 * (25 15) / 4 - 80 的结果是多少})结果输出 任务1获取当前时间 Entering new AgentExecutor chain...写。/thinkThought: 我需要使用工具来解决问题。Action: GetCurrentTimeAction Input:当前时间2026年04月07日 16:49:28案。/thinkThought: 我可以直接回答。Final Answer: 当前时间是2026年04月07日 16:49:28。 Finished chain. 任务2数学计算 Entering new AgentExecutor chain...0/thinkThought: 我需要使用工具来解决问题。Action: CalculateMathExpressionAction Input: 100 * (25 15) / 4 - 80数学表达式计算结果100 * (25 15) / 4 - 80 920.0题。/think