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流程------先分析需求(用户需要上海的天气和建议,需调用两个工具),再依次调用工具获取结果,最后整合结果生成自然语言回复,整个过程无须手动干预。
相关推荐
做一个码农都是奢望2 小时前
计算机控制系统课程实验:车道保持
人工智能·数码相机
后端小肥肠2 小时前
写公众号没灵感?这个 50K Star 开源工具把热点主动推到我面前
人工智能·开源·资讯
Mintopia2 小时前
文档写不好,技术能力再强也容易被低估
人工智能
ai产品老杨2 小时前
异构计算新范式:基于 X86/ARM 的 AI 视频融合架构与源码级性能优化
arm开发·人工智能·音视频
xingyuzhisuan2 小时前
遇到GPU驱动冲突问题,云厂商通常提供怎样的技术支持?
大数据·人工智能·gpu算力
它山之石,可以攻玉2 小时前
使用LangChain4j打造你的第一个AI应用
人工智能
GlobalInfo2 小时前
运动AI市场2026预测:亚太领跑、传感器国产化与5G+边缘计算新机遇
人工智能·5g·边缘计算
AI医影跨模态组学2 小时前
NPJ Digit Med(IF=15.1)河北医科大学第四医院赵群等团队:多模态数字活检用于胃癌隐匿性腹膜转移的术前预测
人工智能·机器学习·医学·医学影像
IT_陈寒2 小时前
React的useEffect把我坑惨了,这种闭包问题谁能想到
前端·人工智能·后端