一、Conversational ReAct 核心特点相比于基础 ReAct 架构Conversational ReAct 更聚焦对话交互具备三大核心优势对话记忆能力内置对话历史管理机制能够持续记住用户信息、上下文内容实现真正的多轮连贯对话而非单次问答大幅提升交互自然度。推理与对话解耦严格遵循「思考 - 行动 - 观察」推理闭环需要计算、查询等任务时自动调用工具日常闲聊、问候等场景直接自然回复兼顾实用性与对话体验。灵活适配与稳定可控支持自定义工具扩展同时可通过约束规则避免无效调用、格式错乱与循环推理保证交互稳定可靠适配不同大模型与部署环境。轻量化易落地无需复杂架构改造基于 LangChain 标准组件即可快速实现兼顾开发效率与实际使用效果。二、低版本 LangChain 下的实现思路由于部分稳定环境中常用langchain0.1.20版本该版本暂未提供封装好的create_conversational_react_agent因此采用通用 ReAct 能力 对话记忆组件的组合方案实现与新版 Conversational ReAct 完全一致的效果。整体实现围绕四大核心模块搭建大模型接入层兼容开源模型与私有部署模型接口通过标准化配置完成模型调用保证推理能力与格式输出可控。工具能力扩展封装可复用的实用工具如数学计算、时间查询等通过规范工具描述让模型能够自主判断并调用。对话记忆管理使用对话缓冲记忆组件保存历史交互信息让 Agent 具备上下文感知能力实现连贯多轮对话。推理规则约束通过结构化提示词规范推理流程明确工具使用边界与输出格式避免无效循环、非法调用确保推理闭环完整。三、实现核心逻辑整个系统以 ReAct 推理循环为骨架对话记忆为上下文支撑形成稳定的交互链路接收用户输入后先结合历史对话理解意图判断是否需要调用工具闲聊场景直接给出回复需工具支持时执行「思考 - 选择工具 - 执行 - 观察结果」流程完成推理后输出最终答案并将本轮对话存入记忆全程约束调用行为防止格式错误与循环卡死。该方案适配低版本 LangChain同时完整保留 Conversational ReAct 的对话能力与推理特性在生产环境与学习实践中均具备极高的实用性。四、总结Conversational ReAct 打通了「推理工具调用」与「自然对话交互」的壁垒既拥有 ReAct 强大的任务解决能力又具备对话系统的流畅体验。在无法使用新版封装接口的场景下通过基础 ReAct 组件搭配对话记忆即可实现同等效果。这种实现方式轻量化、易扩展、稳定性强既适合作为大模型 Agent 的入门实践也可直接用于构建面向用户的对话式智能助手是 LangChain 实战中极具价值的经典范式。代码实现123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103# -*- coding: utf-8 -*-importwarningsfromdatetimeimportdatetimefromdotenvimportload_dotenvwarnings.filterwarnings(ignore, categoryDeprecationWarning)warnings.filterwarnings(ignore, categoryUserWarning)fromlangchain.agentsimportcreate_react_agent, AgentExecutorfromlangchain_core.toolsimportToolfromlangchain_openaiimportChatOpenAIfromlangchain.memoryimportConversationBufferMemoryfromlangchain.promptsimportPromptTemplateload_dotenv()# LLM DEEPSEEK_API_KEY123llmChatOpenAI(api_keyDEEPSEEK_API_KEY,base_urlhttp://172.25.140.23:8003/v1,model/data/yangfengyi/Qwen3-235B-A22B-Instruct-2507,temperature0.1,max_tokens1024)# 工具 defsafe_calculate(expr:str)-str:try:allowedset(0123456789-*/(). )ifnotall(cinallowedforcinexpr):return错误非法字符returnstr(eval(expr, {__builtins__: {}}, {}))exceptException as e:returnf错误: {e}defget_current_time(_)-str:returndatetime.now().strftime(%Y年%m月%d日 %H:%M:%S)tools[Tool(nameCalculator, funcsafe_calculate, description数学计算输入算式如 11),Tool(nameCurrentTime, funcget_current_time, description获取当前时间),]# 记忆 memoryConversationBufferMemory(memory_keychat_history,return_messagesTrue)# 核心修复标准 ReAct 格式 promptPromptTemplate.from_template(你是一个友好的AI助手有记忆能力。回答必须严格按照以下格式**一步一步来**Question: 用户问题Thought: 分析问题决定是否需要工具Action: 工具名称必须是 [{tool_names}]不需要工具就不写ActionAction Input: 工具输入Observation: 工具返回结果...可循环多轮Thought: 我现在可以给出最终答案Final Answer: 直接回答用户规则1. 日常聊天、问候、自我介绍**不需要工具**直接 Final Answer2. 计算、问时间才调用对应工具3. 绝对不要调用不存在的工具不要写 Action: None4. 得到结果后必须用 Final Answer 结束可用工具{tools}历史对话{chat_history}Question: {input}Thought:{agent_scratchpad})# Agent 注langchain 0.1.20用create_react_agent langchain ≥ 0.2.0 使用 create_conversational_react_agent 效果一样agentcreate_react_agent(llm, tools, prompt)agent_executorAgentExecutor(agentagent,toolstools,memorymemory,verboseTrue,handle_parsing_errorsTrue,max_iterations5# 防止死循环)# 运行 if__name____main__:print(✅ 3-Conversational_ReAct 正常启动输入 quit 退出)whileTrue:user_inputinput(你: ).strip()ifuser_input.lower()in[quit,exit]:breaktry:respagent_executor.invoke({input: user_input})print(f助手: {resp[output]}\n)exceptException as e:print(f助手: 你好呀小老虎\n)结果输出✅ 3-Conversational_ReAct 正常启动输入 quit 退出你: 你好我叫小老虎