你好,ReAct特工!——LangGraph的create_react_agent终极生存手册

你好,ReAct特工!------LangGraph的create_react_agent终极生存手册

想用10行代码造一个会自己"思考"何时调用工具、何时直接回答的AI特工?恭喜你,找到了LangGraph里的那把"瑞士军刀"。

在AI智能体的世界里,ReAct(Reasoning + Acting)模式 就像给你的语言模型装上了一颗"决策大脑"。它不再只是机械应答,而是学会了先琢磨再行动 :这个问题我能答吗?还是要查个工具?而LangGraph的create_react_agent,就是让你三行代码召唤这种"思考型特工"的秘密武器。


一、初识庐山真面目:什么是create_react_agent?

想象你有个超级助理。你问"旧金山天气如何?",它不会直接瞎猜,而是:

  1. 推理(Reason):用户要天气 → 我得查实时数据
  2. 行动(Act):调用天气查询工具
  3. 再推理:拿到结果后组织语言回复

这就是create_react_agent干的活!它把语言模型(LLM)和工具(Tools)打包成一个能自主决策的智能体(Agent),核心三件套:

  • 大脑:LLM(如Claude、GPT)
  • 双手:工具集(搜索、计算、API等)
  • 决策流程图:内置ReAct状态机(自动生成!)

对比原生LangChain,LangGraph的Agent最大优势是支持循环决策。简单任务?一条链走到底没问题。复杂任务(如需要反复验证数据)?图结构让它能"绕回去"重试,如同人类思考。


二、极速上手:5分钟打造你的第一个Agent

环境准备

python 复制代码
# 安装必备库(确保Python≥3.9)
pip install langgraph langchain-anthropic

代码实战:天气查询小助手

python 复制代码
from langchain_anthropic import ChatAnthropic
from langgraph.prebuilt import create_react_agent  # 注意新版可能直接导入langgraph

# 1. 定义工具 - 模拟天气查询API
def search_weather(query: str) -> str:
    """查询指定城市天气的利器,输入应为城市名"""
    if "旧金山" in query or "san francisco" in query:
        return "旧金山:15°C,多云,微风"
    elif "北京" in query:
        return "北京:28°C,晴,紫外线强"
    return "天气数据暂缺,建议查询纽约、东京等城市"

# 2. 配置模型和工具
tools = [search_weather]
model = ChatAnthropic(model="claude-3-haiku-20240307")  # 速度快又便宜

# 3. 创建Agent!魔法发生在此刻
agent = create_react_agent(model, tools)

# 4. 提问!
response = agent.invoke(
    {"messages": [{"role": "user", "content": "旧金山和金门大桥的天气如何?"}]}
)
print(response["messages"][-1]["content"])

输出示例

scss 复制代码
正在思考:用户询问旧金山天气,我需要调用天气工具。
工具调用:search_weather("旧金山")
旧金山:15°C,多云,微风。金门大桥区域可能有薄雾。

三、解剖麻雀:ReAct Agent如何运转?

你以为create_react_agent是黑盒?其实内部悄悄建了个微型决策工厂

txt 复制代码
graph LR
    A[Agent节点] -->|生成工具调用| B[Tool节点]
    B --> C{是否继续?}
    C -->|需要新决策| A
    C -->|结束| D[输出结果]
  1. 状态(State) :核心是messages列表,记录用户输入、AI回复、工具结果
  2. Agent节点:LLM分析当前状态,决定回复内容或调用工具
  3. Tool节点:执行工具并返回结果(如调用API、查数据库)
  4. 循环条件:若有工具调用结果,返回Agent重新决策;否则结束

关键内存结构示例

python 复制代码
{
  "messages": [
    {"role": "user", "content": "旧金山天气?"},
    {"role": "assistant", "tool_calls": [{"name": "search_weather", "args": {"query": "旧金山"}}]},
    {"role": "tool", "content": "旧金山:15°C,多云", "tool_call_id": "call_123"}
  ]
}

四、避坑指南:血泪换来的经验

坑1:配置神秘消失

现象 :设置好的model_name调用后失效,报400错误
原因 :工具绑定(cast)操作覆盖了配置
解决方案 :用init_chat_model初始化模型

python 复制代码
from langchain.chat_models import init_chat_model

llm = init_chat_model("anthropic:claude-3-sonnet", configurable_fields=("model",))
agent = create_react_agent(llm, tools)

坑2:系统提示语失效

现象 :设了"请用德语回答",但输出仍是英文
原因response_format场景下提示未正确传递
解决方案:使用元组传参

python 复制代码
# 错误写法
agent = create_react_agent(llm, tools, prompt="用德语回答")

# 正确写法
agent = create_react_agent(llm, tools, response_format=("用德语回答", JsonOutput))

坑3:导包地狱

报错ImportError: cannot import name 'create_react_agent'
原因 :LangGraph版本调整了导包路径
解决方案:直接主包导入

python 复制代码
# 旧版(<0.1.0)
from langgraph.prebuilt import create_react_agent  

# 新版(≥0.1.0)
from langgraph import create_react_agent  # 官方推荐!

五、高手进阶:打造企业级Agent

场景1:带记忆的对话代理

python 复制代码
from langchain.memory import ConversationBufferMemory

# 添加记忆组件
memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True)
llm = ChatOpenAI(model="gpt-4-turbo")

# 创建Agent时注入记忆
agent = create_react_agent(
    llm,
    tools,
    state_modifier=memory.load_memory_variables  # 关键!
)

# 调用时自动携带历史
response = agent.invoke(
    {"input": "这比上次查询温度高吗?", "chat_history": [...]}
)

场景2:人工审核拦截

让Agent在敏感操作前暂停等待审批:

python 复制代码
agent = create_react_agent(
    llm,
    [user_data_update_tool],
    interrupt_before=["update_user_data"]  # 更新前暂停
)

# 调用时检测到中断信号
if response.get("interrupt") == "update_user_data":
    if admin_approve(request):
        agent.resume(response["state"])

六、面试直通车:高频考点解析

  1. Q:ReAct模式中,Reasoning和Acting如何协作?

    A:Reasoning生成思考步骤(如"需要查天气"),Acting转化为工具调用(如调用search_weather)。两者循环直至问题解决。

  2. Q:create_react_agentinitialize_agent(LangChain)区别?

    A:前者基于状态图支持循环调用(图灵完备),后者是线性链式结构。复杂任务如多轮校验选LangGraph。

  3. Q:工具调用失败时Agent如何处理?

    A:默认超时重试2次,可通过自定义ToolNode实现fallback逻辑:

    python 复制代码
    from langgraph.prebuilt import ToolNode
    
    class SafeToolNode(ToolNode):
        def run(self, state):
            try:
                return super().run(state)
            except Exception:
                return "工具调用失败,请稍后再试"
  4. Q:如何优化Agent的响应速度?

    A:三板斧:

    • 启用流式响应(stream_mode="messages"
    • 对工具加缓存(如@lru_cache装饰搜索工具)
    • 用小模型做简单决策(如Haiku配Sonnet)

七、终极大乱斗:Agent框架选型指南

当有人对你说"LangGraph够用了",请优雅地甩出这张表:

能力 LangGraph AutoGen Dify
循环决策 ✅ 原生支持
可视化编排
低代码部署
多Agent协作
学习曲线 陡峭🗻 中等⛰️ 平缓🏖️

选型建议

  • 快速上线选Dify
  • 科研/复杂逻辑选LangGraph
  • 企业流程集成选AutoGen

八、未来已来:你还能这样玩转Agent

  • 知识库问答机器人:结合RAG工具,让Agent查公司文档
  • 代码评审助手:集成代码解析工具+安全规则库
  • AI游戏NPC:用状态图管理角色决策树
python 复制代码
npc_agent = create_react_agent(
    llm,
    tools=[check_inventory, use_skill, move_to],
    state_modifier="你是一个中世纪的骑士,说话带'阁下'后缀"
)

九、结语:创造者的利器

create_react_agent的精髓,在于它把认知决策 (LLM)和物理执行(Tools)的边界打通了。从此AI不再是"嘴强王者"------它能思考、能动手、能迭代,像人类一样解决问题。

正如某位LangGraph核心开发者所说:

"我们不是在造问答机器,而是在培育数字生命体。ReAct就是它第一次学会'用工具'走路。"

各位创造者们,工具在此,魔法在你们手中。现在就去造点令人惊叹的东西吧!

相关推荐
CodeDevMaster12 分钟前
Gemini CLI使用教程:在命令行中释放AI的力量
llm·ai编程·gemini
大志说编程24 分钟前
LangChain框架入门13:从0到1学习Weaviate向量数据库
人工智能·langchain
猿榜28 分钟前
Python基础-Python简介
python
这里有鱼汤1 小时前
亲测可行!Streamlit项目完美打包成EXE分享教程(含xtquant坑点)
后端·python
crushqqi1 小时前
【跨服务器的数据自动化下载--安装公钥,免密下载】
服务器·python·自动化
qq_463944861 小时前
如何将新建的Anaconda虚拟环境导入Juputer内核中?
linux·windows·python
知了一笑2 小时前
GPT5写5000行代码,行不行?
openai·ai编程·gpt5
Shun_Tianyou2 小时前
Python Day28 HTML 与 CSS 核心知识点 及例题分析
开发语言·前端·css·python·算法·html
Goboy2 小时前
跳跃小球,Trae 一句话生成的“上头”小游戏
llm·ai编程·trae
Goboy2 小时前
星际战斗, Trae 一句话生成的宇宙射击爽游
llm·ai编程·trae