深入浅出LangGraph AI Agent智能体开发教程(二)—LangGraph预构建图API快速创建Agent

前言

上篇内容深入浅出LangGraph AI Agent智能体开发教程(一)---全面认识LangGraph分享了LangGraph的核心原理和技术架构。从本期开始我们就正式围绕LangGraph的代码实战进行讲解。本期内容笔者将按照API层级结构从高到低的顺序为大家分享LangGraph如何利用预构建图的高层API快速构建Agent智能体。

本系列分享是笔者结合自己学习工作中使用LangChain&LangGraph经验倾心编写的,力求帮助大家体系化快速掌握LangChain&LangGraph AI Agent智能体开发的技能!笔者的LangChain系列教程暂时更完,后面也会实时补充工作实践中的额外知识点,建议大家在学习LangGraph分享前先学习LangChain的基本使用技巧。大家感兴趣可以关注笔者掘金账号和系列专栏。更可关注笔者同名微信公众号: 大模型真好玩 , 每期分享涉及的代码均可在公众号私信: LangChain智能体开发获得。

一、LangGraph API架构回顾

每期分享开始前,希望大家都可以回顾一下LangGraph的核心模块和基本架构。LangGraph的构建图语法属于最底层的API,涉及到复杂的节点定义、边定义、图构建等复杂内容。LangGraph Agnet Node语法属于中层API,对工具和模型进行了抽象,方便快速接入工具。LangGraph预构建图语法属于最高层的API,将广泛流行的图模式抽象为一个函数调用,大家可以通过一行代码快速构建图。为了让大家由易到难逐步吃透LangGraph的核心技巧,我将按照从上到下:预构建图Agent API -> Agent Node API -> 构建图语法底层API的核心顺序进行分享。本期内容分享的是预构建图 Agent API的使用方法。

二、LangGraph环境搭建

使用LangGraph进行大模型应用开发,第一步要搭建LangGraph的运行环境。本系列分享同样使用anaconda管理虚拟环境:

  1. 命令行执行如下命令创建并激活名为langgraphenv的虚拟环境:
bash 复制代码
conda create -n langgraphenv python=3.12 #创建langchain开发环境
conda activate langgraphenv
  1. 命令行执行pip install langchain langgraph安装LangGraph依赖, 可以通过pip show langgraph查看我们安装的langgraph版本。
  1. LangGraph系列教程使用DeepSeek-V3.1作为大模型组件,LangGraph底层依赖LangChain,所以我们需要使用LangChain中的DeepSeek组件快速接入模型,同时用户和大模型的通信基本都采用openai格式,所以执行如下命令安装依赖(LangGraph接入大模型的详细步骤与LangChain一致,可参考我的文章深入浅出LangChain AI Agent智能体开发教程(二)---LangChain接入大模型

    pip install langchain-deepseek openai

以上就是我们搭建LangGraph基本环境的教程。

二、借助预构建智能体API快速创建LangGraph智能体

2.1 LangGraph预构建智能体API简介

正如开篇所说,我们先尝试使用LangGraph最高层的预构建图API快速构建智能体,然后在后续的分享中会逐渐深入到LangGraph背后的底层原理及更底层的API进行讲解。

虽然叫预构建API,但我们调用代码的背后其实是创建了一个预设好的图结构,使用这些模板方法与笔者文章深入浅出LangChain AI Agent智能体开发教程(六)---两行代码LangChain Agent API快速搭建智能体中类似,传入大模型调用工具即可。

下面简单列举几个LangGraph预构建图模板的API:

create_react_agent: 最常用最通用的图模板,允许当前大语言模型自动对传入的所有工具进行编排,思考当前任务需要使用哪些工具,并实时接收工具返回的结果灵活思考下一步计划,直到完成任务。

create_tool_calling_agent: 该图模板适用于对单独的工具进行性能调试。

create_openai_functions_agent和create_openai_tools_agent: 该图模板用于构建以OpenAI风格请求工具函数的智能体(并不是只兼容OpenAI的GPT模型)

2.2 天气助手案例实战LangGraph预构建图模板API

LangGraph接入工具函数类别和LangChain一样有三类:LangChain内置的工具函数、自定义工具函数和使用MCP工具。我们这里通过自定义工具进行演示:

  1. 创建自定义获取天气信息的工具函数,和深入浅出LangChain AI Agent智能体开发教程(五)---LangChain接入工具基本流程文章中一样请求心知天气API获得天气信息,具体细节已经讲过很多次这里不加赘述。为了更加严谨,我们使用pydantic库定义一个对象类型描述传入参数,这里表示要传入的是一个字符串loc参数,表示的含义是城市名称。定义的WeatherQuery对象在@tool(args_schema=WeatherQuery)中约束get_weather的函数参数。tool装饰器可以将自定义函数修饰为LangChain/LangGraph的函数工具, 注意函数的注释必须要撰写清楚才能使大模型理解函数功能
python 复制代码
import requests
from langchain_core.tools import tool
from pydantic import BaseModel, Field

class WeatherQuery(BaseModel):
    loc: str = Field(description="城市名称")

@tool(args_schema=WeatherQuery)
def get_weather(loc):
    """
        查询即时天气函数
        :param loc: 必要参数,字符串类型,用于表示查询天气的具体城市名称,\
        :return:心知天气 API查询即时天气的结果,具体URL请求地址为:"https://api.seniverse.com/v3/weather/now.json"
        返回结果对象类型为解析之后的JSON格式对象,并用字符串形式进行表示,其中包含了全部重要的天气信息
    """
    url = "https://api.seniverse.com/v3/weather/now.json"
    params = {
        "key": "你注册的心知天气私钥",
        "location": loc,
        "language": "zh-Hans",
        "unit": "c",
    }
    response = requests.get(url, params=params)
    temperature = response.json()
    return temperature['results'][0]['now']

我们可以打印装饰器修饰的工具函数来查看工具函数的名称、描述、参数和返回信息:

python 复制代码
print(f'''
name: {get_weather.name}
description: {get_weather.description}
arguments: {get_weather.args}
''')
  1. 初始化大模型和函数列表,该部分代码与LangChain的相关代码完全一致,这里不加赘述
python 复制代码
from langchain.chat_models import init_chat_model

model = init_chat_model(
    model='deepseek-chat',
    model_provider='deepseek',
    api_key='你注册的DeepSeek api_key'
)

tools = [get_weather]
  1. 创建ReACT预制图结构并构建智能体,通过invoke方法传入messages列表得到智能体输出结果
python 复制代码
from langgraph.prebuilt import create_react_agent

agent = create_react_agent(model=model, tools=tools)

response = agent.invoke(
    {
        "messages": [
            {
                "role": "user",
                "content": "你好请你介绍一下你自己"
            }
        ]
    }
)

print(response)

可以看到智能体的输出结果同样是messages列表。

  1. 测试外部工具的调用, 提问智能体"北京现在的天气如何?"
python 复制代码
response = agent.invoke(
    {
        "messages": [
            {
                "role": "user",
                "content": "北京现在的天气如何?"
            }
        ]
    }
)

print(response)

我们观察智能体输出的消息列表,这不就是我们讲过的Function Calling的基本流程吗?大模型根据用户的提问从工具函数列表中选取适当的函数并自动生成函数参数,调用函数生成的结果再反馈给大模型生成最终的回复结果。

我们也可以通过response['messages'][-1].content索引大模型最终的回复结果不涵盖整个消息列表

三、LangGraph ReACT图结构浅析

LangGraph框架是通过Nodes(点)和Edges(边)的组合去创建复杂的循环工作流程,通过消息传递的方式串联所有节点形成一个通路。为了维持消息能够及时的更新并能够在节点中反复传递,LangGraph构建了 State状态 概念。每启动一个LangGraph构建流都会生成一个状态,图中的节点在处理时会传递和修改该状态。整个状态不仅仅是一组静态数据,更是根据每个节点的输出动态更新的,然后影响循环内的后续操作。像State等LangGraph的底层概念我们之后讲解LangGraph底层API的时候会详细说明。

上图展示了ReACT图结构,ReACT是Reason(推理)和Act(行动)的缩写,它的工作流程是一个循环图:思考->行动->观察结果->再思考...->得出答案。正如上图所示,ReACT图具体流程如下:

  1. 开始: 接收用户的输入
  2. 调用模型: 将当前状态传递给大模型要求模型思考
  3. 模型决策: 大模型会以特定格式返回一个响应,这个响应可能是:
    • 最终答案: 如果模型认为信息足够,就直接回答用户
    • 工具调用:如果模型认为需要更多信息,它会决定调用哪个工具
  4. 执行工具: 如果模型决定调用工具,图就会执行该工具,并获取工具返回的结果
  5. 更新状态: 将工具的执行结果添加到状态中
  6. 循环: 带着新的信息回到第2步,让模型再次思考
  7. 结束: 当模型返回最终答案时,循环结束,图运行完成将结果返回给用户。

这里不得不惊叹LangGraph开发者的抽象能力,如此复杂的图可以封装为一行代码,后台过程完全由LangGraph自动管理,大大加快了智能体的开发速度~

四、总结

本期分享介绍了LangGraph如何利用预构建图的高层API快速构建Agent智能体。只需要传入大模型和工具函数,两行代码就可以轻松搭建一个智能体。LangGraph不仅可以接入自定义的工具函数,更适配LangChain海量的内置工具,同时还可对工具调用加以限制,具体内容我们下期分享再见~

本系列分享预计会有20节左右的规模,保证大家看完一定能够掌握LangChain&LangGraph的开发能力,大家感兴趣可关注笔者掘金账号和专栏,更可关注笔者的同名微信公众号:大模型真好玩 , 本系列分享的全部代码均可在微信公众号私信笔者: LangChain智能体开发 免费获得。

相关推荐
简简单单做算法4 小时前
基于GA遗传优化的双向LSTM融合多头注意力(BiLSTM-MATT)时间序列预测算法matlab仿真
人工智能·matlab·时间序列预测·bilstm·ga遗传优化·bilstm-matt·多头注意力
做科研的周师兄4 小时前
【机器学习入门】3.3 FP树算法——高效挖掘频繁项集的“树状神器”
java·大数据·数据库·人工智能·深度学习·算法·机器学习
勤劳的进取家4 小时前
论文阅读:GOAT: GO to Any Thing
论文阅读·人工智能·算法·语言模型·自然语言处理
luofeiju4 小时前
直线拟合方法全景解析:最小二乘、正交回归与 RANSAC
人工智能·线性代数·算法·机器学习·数据挖掘·回归
城南皮卡丘4 小时前
基于YOLO8的垃圾识别检测系统(数据集+源码+文章)
人工智能
像风一样自由20204 小时前
Python与Rust语法对比详解:从入门到精通
开发语言·python·rust
IT_陈寒4 小时前
🚀 Vite 5个鲜为人知的性能优化技巧:让你的构建速度提升300%
前端·人工智能·后端
Dxy12393102165 小时前
python如何下载svg图片
开发语言·python
hAnGWS6 小时前
Python可视化与交互-matplotlib库
python·交互·matplotlib