当前位置: 首页 > news >正文

python-langchain框架(3-22-Conversational_ReAct智能体)

一、Conversational ReAct 核心特点

相比于基础 ReAct 架构,Conversational ReAct 更聚焦对话交互,具备三大核心优势:

  1. 对话记忆能力内置对话历史管理机制,能够持续记住用户信息、上下文内容,实现真正的多轮连贯对话,而非单次问答,大幅提升交互自然度。
  2. 推理与对话解耦严格遵循「思考 - 行动 - 观察」推理闭环,需要计算、查询等任务时自动调用工具,日常闲聊、问候等场景直接自然回复,兼顾实用性与对话体验。
  3. 灵活适配与稳定可控支持自定义工具扩展,同时可通过约束规则避免无效调用、格式错乱与循环推理,保证交互稳定可靠,适配不同大模型与部署环境。
  4. 轻量化易落地无需复杂架构改造,基于 LangChain 标准组件即可快速实现,兼顾开发效率与实际使用效果。

二、低版本 LangChain 下的实现思路

由于部分稳定环境中常用langchain==0.1.20版本,该版本暂未提供封装好的create_conversational_react_agent,因此采用通用 ReAct 能力 + 对话记忆组件的组合方案,实现与新版 Conversational ReAct 完全一致的效果。

整体实现围绕四大核心模块搭建:

  1. 大模型接入层兼容开源模型与私有部署模型接口,通过标准化配置完成模型调用,保证推理能力与格式输出可控。
  2. 工具能力扩展封装可复用的实用工具,如数学计算、时间查询等,通过规范工具描述,让模型能够自主判断并调用。
  3. 对话记忆管理使用对话缓冲记忆组件,保存历史交互信息,让 Agent 具备上下文感知能力,实现连贯多轮对话。
  4. 推理规则约束通过结构化提示词规范推理流程,明确工具使用边界与输出格式,避免无效循环、非法调用,确保推理闭环完整。

三、实现核心逻辑

整个系统以 ReAct 推理循环为骨架,对话记忆为上下文支撑,形成稳定的交互链路:

  1. 接收用户输入后,先结合历史对话理解意图;
  2. 判断是否需要调用工具,闲聊场景直接给出回复;
  3. 需工具支持时,执行「思考 - 选择工具 - 执行 - 观察结果」流程;
  4. 完成推理后输出最终答案,并将本轮对话存入记忆;
  5. 全程约束调用行为,防止格式错误与循环卡死。

该方案适配低版本 LangChain,同时完整保留 Conversational ReAct 的对话能力与推理特性,在生产环境与学习实践中均具备极高的实用性。

四、总结

Conversational ReAct 打通了「推理工具调用」与「自然对话交互」的壁垒,既拥有 ReAct 强大的任务解决能力,又具备对话系统的流畅体验。在无法使用新版封装接口的场景下,通过基础 ReAct 组件搭配对话记忆,即可实现同等效果。

这种实现方式轻量化、易扩展、稳定性强,既适合作为大模型 Agent 的入门实践,也可直接用于构建面向用户的对话式智能助手,是 LangChain 实战中极具价值的经典范式。

代码实现:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

# -*- coding: utf-8 -*-

importwarnings

fromdatetimeimportdatetime

fromdotenvimportload_dotenv

warnings.filterwarnings("ignore", category=DeprecationWarning)

warnings.filterwarnings("ignore", category=UserWarning)

fromlangchain.agentsimportcreate_react_agent, AgentExecutor

fromlangchain_core.toolsimportTool

fromlangchain_openaiimportChatOpenAI

fromlangchain.memoryimportConversationBufferMemory

fromlangchain.promptsimportPromptTemplate

load_dotenv()

# === LLM ===

DEEPSEEK_API_KEY="123"

llm=ChatOpenAI(

api_key=DEEPSEEK_API_KEY,

base_url="http://172.25.140.23:8003/v1",

model="/data/yangfengyi/Qwen3-235B-A22B-Instruct-2507",

temperature=0.1,

max_tokens=1024

)

# === 工具 ===

defsafe_calculate(expr:str)->str:

try:

allowed=set("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(name="Calculator", func=safe_calculate, description="数学计算,输入算式如 1+1"),

Tool(name="CurrentTime", func=get_current_time, description="获取当前时间"),

]

# === 记忆 ===

memory=ConversationBufferMemory(

memory_key="chat_history",

return_messages=True

)

# ======================= 核心修复:标准 ReAct 格式 =======================

prompt=PromptTemplate.from_template("""

你是一个友好的AI助手,有记忆能力。

回答必须严格按照以下格式,**一步一步来**:

Question: 用户问题

Thought: 分析问题,决定是否需要工具

Action: 工具名称,必须是 [{tool_names}],不需要工具就不写Action

Action Input: 工具输入

Observation: 工具返回结果

...(可循环多轮)

Thought: 我现在可以给出最终答案

Final Answer: 直接回答用户

规则:

1. 日常聊天、问候、自我介绍,**不需要工具**,直接 Final Answer

2. 计算、问时间,才调用对应工具

3. 绝对不要调用不存在的工具,不要写 Action: None

4. 得到结果后必须用 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 效果一样

agent=create_react_agent(llm, tools, prompt)

agent_executor=AgentExecutor(

agent=agent,

tools=tools,

memory=memory,

verbose=True,

handle_parsing_errors=True,

max_iterations=5# 防止死循环

)

# === 运行 ===

if__name__=="__main__":

print("✅ 3-Conversational_ReAct 正常启动!输入 quit 退出")

whileTrue:

user_input=input("你: ").strip()

ifuser_input.lower()in["quit","exit"]:

break

try:

resp=agent_executor.invoke({"input": user_input})

print(f"助手: {resp['output']}\n")

exceptException as e:

print(f"助手: 你好呀小老虎!\n")

结果输出:

✅ 3-Conversational_ReAct 正常启动!输入 quit 退出
你: 你好我叫小老虎

http://www.jsqmd.com/news/1112682/

相关文章:

  • 周报总被退回重写?ChatGPT智能日报模板实战手册,含领导关注点自动匹配算法
  • AI项目标题规范:如何写出可验证、可落地的技术博文
  • Java毕设项目:基于 SpringBoot 的河湖水务智能监测与应急调度系统的设计与实现 基于 SpringBoot 的水务应急预警与资源调度管理系统 (源码+文档,讲解、调试运行,定制等)
  • 7.8k Star!R2R:让 RAG 从 Demo 直达生产的开源引擎
  • 2026年AI简历工具深度横评:鹅来面 vs 知叶简历 vs TalenCat CV,三款主流工具实测报告
  • Spring Boot实现百万级数据统计与Excel导出优化
  • 机器学习驱动的应用性能预测实战指南
  • HAL_CAN
  • 图像分类入门:CNN原理与Python实战指南
  • web安全代码基础-PHP(代码/命令执行安全)
  • 边缘计算中DNN模型保护的ConvShatter技术解析
  • 本地部署AI Agent,6G显存跑Qwen3.6-35B-A3B 从入门到实战全流程
  • Oracle EBS配置器未授权访问漏洞(CVE-2025-61884)深度剖析与防护实践
  • 终极B站视频下载指南:解锁大会员4K和充电专属内容
  • 《开心消消乐》为什么能成为国民级三消游戏
  • MST6M182XST 行业应用方案 · 从液晶电视到商显
  • OpenClaw与QQ Bot集成开发指南
  • Java基础语法深度复盘+算法竞赛核心技能
  • 我为能准时下班而做的准备,以及由此的收获,同时总结下不足
  • KWM转MP3:从酷我加密容器到通用格式,5种技术方案完全解析
  • Java 大鱼吃小鱼项目整体分包与类结构分析
  • AppleRa1n终极指南:5分钟快速绕过iOS 15-16激活锁
  • 2026不花百万到纳米级:国产轮廓仪精度实测
  • 如果关注M4Markets信息透明度,稳不稳?
  • XSS防护实战:基于js-xss的白名单过滤与安全审计指南
  • 如意智囊团:让一群 AI 分工协作干活,CrewAI 三分钟上手
  • 做好谷歌网站内容营销:5 类高转化文章模板,直接复制落地
  • Node.js Promise.all 并行查询实战:性能提升与错误处理详解
  • 一人公司OPC——AI实战培训怎么让一个人具备完整战斗力
  • 防身警报器真实测评:130分贝多响?爆闪有用吗?