React的预构建creat_agent模块详解

京东购书链接

前面我们基于原生LangGraph完成了基础React的设置与使用,从工具定义、节点逻辑到图结构搭建都需要手动配置,可以看到,采用全手动实现虽然能精准控制流程,但步骤相对烦琐。

为我们后续的智能体开发提供了更高效的捷径。而LangGraph中的create_agent模块已封装ReAct模式的核心循环(思考-行动-观察),内置了工具调用、状态管理等关键逻辑,无须再手动定义节点衔接和条件判断,能快速实现具备工具调用能力的智能体,大幅简化开发流程的同时,保留了灵活扩展的特性。

5.3.1 creat_agent的基础使用

在创建和使用上,LangChain的create_agent是构建智能体的核心接口,它封装了大模型与工具调用的联动逻辑,能快速实现"接收指令-分析需求-生成响应"的基础能力。需要注意的是,该接口的完整调用需包含大模型实例、工具列表(可选,无工具时为纯对话智能体)、智能体类型等关键参数,仅传入模型会导致初始化失败。下面我们从基础对话智能体入手,逐步掌握其使用方法。

1. 基础对话智能体:最小化实现

若仅需构建"无工具"的纯对话智能体,需确保传入 model(大模型实例)和 agent_type(智能体类型,指定为纯对话模式)。以下是完整的基础实现代码:

from langchain.agents import create_agent

import bigmodel

agent = create_agent(

model=bigmodel.llm

)

reply = agent.invoke({"messages":"你好"})

print(reply["messages"][-1].content)

在以上代码中,我们使用create_agent调用了大模型并进行封装和整合,直接借助大模型的语义理解能力生成回复。

2. 添加工具支持的智能体

除了上面的纯对话智能体外,我们还可以通过对create_agent智能体绑定实用工具(如天气查询、计算器等),让其从"纯对话"升级为"能办事"的智能体。以下是添加"天气查询工具"的完整示例:

from langchain_core.tools import tool

2. 定义工具(Tools)

@tool("get_weather_info")

def get_weather_info(city: str) -> str:

"""

根据城市名称查询当前天气状况

Args:

city (str): 城市的中文全称

"""

weather_data = {

"上海": "城市:上海 | 天气:晴 | 温度:18℃ | 风向:东南风 | 湿度:65%",

"南京": "城市:南京 | 天气:多云 | 温度:15℃ | 风向:北风 | 湿度:70%",

"杭州": "城市:杭州 | 天气:小雨 | 温度:12℃ | 风向:西北风 | 湿度:80%",

}

return weather_data.get(city, f"未查询到{city}的天气信息")

@tool

def get_weather_tips(city: str) -> str:

"""

根据城市名称返回3条天气相关的生活建议

Args:

city (str): 城市的中文全称

"""

tips_data = {

"上海": "天气晴朗,适合户外活动;紫外线较强,注意防晒;早晚温差大",

"南京": "多云天气,适宜出行;风力不大,适合晾晒衣物;空气较干燥",

"杭州": "有小雨,出门记得带伞;路面湿滑,注意行车安全;气温较低,适当添衣",

}

return tips_data.get(city, f"暂无{city}的相关天气建议")

from langchain.agents import create_agent

import bigmodel

agent = create_agent(

model=bigmodel.llm,

system_prompt="你需要回答来自于用户的提问, 在需要的时候还可以使用工具帮助你完成这些任务。",

tools=[get_weather_info, get_weather_tips]

)

result = agent.invoke({"messages":"上海的天气是什么?"})

result = result["messages"][-1].content

print(result)

在以上代码中,我们在使用create_agent时,除了原有的注入模型外,还额外添加了系统定义提示词system_prompt以及tools工具的定义,从而在使用时可以对其进行直接调用,输出结果如下:

上海当前的天气是晴天,气温为18℃,风向为东南风,湿度为65%。

读者可以自行尝试运行。

5.3.2 使用create_agent构建React

在5.2.2节中,我们通过手动定义工具节点、思考节点、条件判断逻辑,完整搭建了一个遵循React模式的智能体------整个过程需要手动串联"接收需求→判断是否调用工具→执行工具→整合结果"的全流程,虽能清晰理解React的核心原理,但开发效率较低。

而LangChain的create_agent接口恰好解决了这一问题:它内置了React模式的核心逻辑,能自动完成"需求分析→工具决策→结果整合"的闭环,我们只需传入大模型、工具列表等核心组件,即可快速构建出具备工具调用能力的React智能体,大幅简化了开发流程。

下面是使用create_agent构建天气查询React智能体的完整实现,代码保留了工具定义与智能体核心配置,可直接用于调试:

from langchain_core.tools import tool

2. 定义工具(Tools)

@tool("get_weather_info")

def get_weather_info(city: str) -> str:

"""

根据城市名称查询当前天气状况

Args:

city (str): 城市的中文全称

"""

weather_data = {

"上海": "城市:上海 | 天气:晴 | 温度:18℃ | 风向:东南风 | 湿度:65%",

"南京": "城市:南京 | 天气:多云 | 温度:15℃ | 风向:北风 | 湿度:70%",

"杭州": "城市:杭州 | 天气:小雨 | 温度:12℃ | 风向:西北风 | 湿度:80%",

}

return weather_data.get(city, f"未查询到{city}的天气信息")

@tool

def get_weather_tips(city: str) -> str:

"""

根据城市名称返回3条天气相关的生活建议

Args:

city (str): 城市的中文全称

"""

tips_data = {

"上海": "天气晴朗,适合户外活动;紫外线较强,注意防晒;早晚温差大",

"南京": "多云天气,适宜出行;风力不大,适合晾晒衣物;空气较干燥",

"杭州": "有小雨,出门记得带伞;路面湿滑,注意行车安全;气温较低,适当添衣",

}

return tips_data.get(city, f"暂无{city}的相关天气建议")

from langchain.agents import create_agent

import bigmodel

agent = create_agent(

model=bigmodel.llm,

system_prompt="你是一个智能体,可以使用工具完成任务,现在处理发来的信息内容。在需要的时候可以使用工具,在获得答案时需要对信息进行进一步处理。",

tools=[get_weather_info, get_weather_tips]

)

result = agent.invoke({"messages":"上海天气怎么样,有什么生活建议吗?"})

result = result["messages"][-1].content

print(result)

对比5.2.2节的手动实现示例,本示例中create_agent的价值主要体现在以下三点:

  1. 无须手动定义思考节点:智能体自动封装大模型的"思考逻辑",无须像手动实现时那样编写run_llm函数判断工具调用时机。
  2. 自动管理工具调用流程:支持多工具联动调用,无须手动编写工具执行后的跳转逻辑(如5.2.2节的should_continue条件函数)。
  3. 结果整合更智能:大模型会根据system_prompt的要求,将多个工具的返回结果整合为连贯的自然语言,无须手动处理结果拼接。

输出结果如下:

上海当前天气晴朗,气温为18℃,东南风,湿度65%。以下是几条生活建议:

  1. 适合户外活动:天气晴好,可以安排散步、运动或郊游。

  2. 注意防晒:紫外线较强,外出时建议涂抹防晒霜、戴帽子或太阳镜。

  3. 应对温差:早晚温差较大,建议适当增减衣物,避免着凉。

希望这些建议对您有帮助!

create_agent构建的智能体在使用中还需要注意以下两点。

  • 消息格式规范:代码中直接传入字符串"上海天气怎么样......"不符合LangChain规范,会导致报错。正确用法是将其封装为HumanMessage对象,即{"messages": [HumanMessage(content="上海天气怎么样,有什么生活建议吗?")]},这样才能被智能体正确识别为用户需求。
  • 内置的React循环:调用后智能体会自动完成React流程------先分析需求(用户需要上海的天气和建议,需调用两个工具),再依次调用工具获取结果,最后整合结果生成自然语言回复,整个过程无须手动干预。
相关推荐
与芯同行4 分钟前
单声道音频Codec在语音交互产品中的工程设计要点与常见问题分析
人工智能·语音识别·ai语音对话芯片·tp9311·天源中芯tpower
citi7 分钟前
OpenViking 源代码编译指南
人工智能·context
MediaTea17 分钟前
Scikit-learn:数据集
人工智能·python·机器学习·scikit-learn
sali-tec24 分钟前
C# 基于OpenCv的视觉工作流-章52-交点查找
图像处理·人工智能·opencv·算法·计算机视觉
冬奇Lab27 分钟前
一天一个开源项目(第81篇):YC 总裁亲自写代码,把自己的大脑开源了
人工智能·开源·资讯
冬奇Lab30 分钟前
SubAgent 原理深度解析:AI 系统如何通过委托实现专业化分工
人工智能·agent·claude
薛定谔的猫36932 分钟前
深入浅出 MCP:重塑 LLM Agent 的能力边界与生态标准
llm·ai agent·智能化·mcp·model context protocol
ZhengEnCi43 分钟前
01c-循环神经网络RNN详解
人工智能·深度学习
仙女修炼史1 小时前
CNN的捷径学习Shortcut Learning in Deep Neural Networks
人工智能·学习·cnn
企业架构师老王1 小时前
数据安全优先:企业级智能体私有化部署完整方案与最佳实践
人工智能·ai