作者:CSDN博客
本文介绍了LangGraph这一基于LangChain的新一代Agent开发框架,使用图结构工作流替代传统链式工作流,引入"状态"概念提高灵活性。提供三层API架构和配套开发工具,使开发者能高效构建、调试和部署智能体。通过实例展示了其与LangChain的兼容性和开发效率优势。
一、LangGraph入门介绍
1.1 背景介绍
说到现阶段目前最流行、最通用的Agent开发框架,毫无疑问,肯定是LangChain。LangChain作为2022年就已经开源的元老级开发框架,历经数年的发展,其功能和生态都已非常完善,并且拥有数量众多的开发者。在我们团队统计的今年第一季度大模型岗位JD中,有90%以上的Agent开发岗位要求掌握LangChain,可以说LangChain就是目前最通用、最流行的Agent开发框架没有之一。
不过,由于LangChain诞生时间较早,在2022年末,GPT-3.5刚诞生之时,开发者对大模型的想象主要是希望用其搭建一个又一个工作流,而这也成为LangChain的核心技术目标,LangChain中“Chain”就是指链、也就是搭建工作流的意思。
而且当时Function calling功能尚未诞生、大模型普遍性能较弱,并且2023年各类大模型百花齐放,但接口混乱、且上下文很短,开发者调用和开发都非常麻烦。因此,LangChain初始的核心架构有两层,第一层是围绕各类模型接入设置统一的接口,而为了让各类模型接入更加统一和稳定,LangChain不惜为不同的模型单独开发一个库,例如要接入Claude模型,我们就需要提前安装langchain-anthropic,而如果要接入DeepSeek模型,则需要安装langchain-deepseek。这么做虽然过程麻烦,但却能很好的保障开发过程的稳定性。
而相比之下,OpenAI的Agents SDK则统一要求基座模型以OpenAI风格API进行接入,这必然会导致一些兼容性问题,而谷歌ADK则借助第三方库LiteLlm来调用基座模型,而这就会导致两个库功能不匹配的问题。因此从底层模型接入角度来看,LangChain也是最完善和最稳定的。
而在确保模型能够稳定接入后,LangChain紧接着定义了一整套LCEL(LangChain Expression Language)的语法规则,基于这个语法,开发者能够非常便捷的将提示词模板、大模型以及一些外部工具进行组合拼装,搭建一些大模型工作流,其功能定位和现在的n8n非常类似。
但是,大模型基座模型能力在飞速进化,例如目前最新一代的大模型,不仅拥有非常强悍的外部工具识别和调用能力,还原生就支持多工具并联和串联调用,而开发者对于大模型应用开发的需求也在快速变化,单纯的构建这种线性的工作流,可拓展性并不强。当前开发者更偏好的是“用AI开发AI”的思路,也就是我们不用定死工作流,而可以让大模型自主判断每一步该怎么做,然后实时创建一些链路,并根据运行情况随时调整。这也就是目前Agent智能体开发的核心思路。
为此,LangChain又进行了第三层封装,在Chain基础上,LangChain设置了一整套能够实时根据用户需求灵活创建Chain来完成工作的API——Agent API。借助这些API,开发者仅需将模型、提示词模板和外部工具“放一起”创建Agent,该Agent就能自动根据用户需求创建一些链来完成工作。从而避免开发者反复编写各种链的复杂工作,大幅加快的了开发效率。
不 过,伴随着Agent开发飞速发展,很快LangChain就意识到,要真正满足新一代Agent开发需求,仅靠Agent API是完全不够的,因此在23年下半年,LangChain开源了一个实验性质项目——LangGraph。
1.2 - LangGraph核心技术概念
LangGraph和LangChain同宗同源,底层架构完全相同、接口完全相通。从开发者角度来说,LangGraph也是使用LangChain底层API来接入各类大模型、LangGraph也完全兼容LangChain内置的一系列工具。换而言之,LangGraph的核心功能都是依托LangChain来完成。但是和LangChain的链式工作流哲学完全不同的是,LangGraph的基础哲学是构建图结构的工作流,并引入“状态”这一核心概念来描绘任务执行情况,从而拓展了LangChain LCEL链式语法的功能灵活程度。
很明显,图状工作流肯定比链式工作流功能要更加灵活,功能可拓展性也更强。用于创建图结构的工作流,这也是LangGraph中Graph一词的由来。
不过需要注意的是,LangGraph是基于LangChain进行的构建,无论图结构多复杂,单独每个任务执行链路仍然是线性的,其背后仍然是靠着LangChain的Chain来实现的。因此我们可以这么来描述LangChain和LangGraph之间的关系,LangGraph是LangChain工作流的高级编排工具,其中“高级”之处就是LangGraph能按照图结构来编排工作流。
1.3 - LangGraph的技术架构
尽管图结构看起来比链式结构灵活很多,但在实际开发过程中,要创建一个图结构却绝非易事。大家可以试想一下,要在代码环境中描述清楚一个图,至少需要清晰的说明图中有哪些节点,不同节点之间是什么关系(边如何连接),同时还需要设置各节点功能,然后才能测试上线,这个流程其实是非常复杂的,哪怕是简单的一个图也需要用很多代码才能描述清楚。
这就会导致开发效率受到影响。LangGraph的本质是DAG(有向无环图),但它扩展支持了“有状态循环图”,本质上是一种 可控状态机(State Machine)。
不过这对于LangChain来说并不难解决。LangChain生态各框架的核心思路都是“既要有底层API来定义基础功能,同时也要有高层API来加快开发效率”,就好比LangChain中既有LCEL语法、同时也有Agent API一样,LangGraph也提供了基于图结构基础语法的高层API。
LangGraph的高层API主要分为两层,其一是Agent API,用于将大模型、提示词模板、外部工具等关键元素快速封装为图中的一些节点,而更高一层的封装,则是进一步创建一些预构建的Agent、也就是预构建好的图,开发者只需要带入设置好要带入的工具和模型,三行代码就能借助这些预构建好的图,创建一个完整的Agent。- ounter(lineounter(lineounter(lineounter(lineounter(line
- # 封装外部函数列表
- tools =[get_weather]
- model = init_chat_model(model="deepseek-chat", model_provider="deepseek")
- agent = create_react_agent(model=model, tools=tools)
复制代码 开发效率得到极大提升。 完整的LangGraph三层API架构图如下所示:
依托LangChain完善的生态、拥有丰富稳定的API架构、以及便捷上手等特性,使得LangGraph成为目前超越LangChain的新一代Agent开发框架。
1.4 LangGraph开发必备工具套件
在对LangGraph有了一定的基础了解之后,对于开发者来说,还需要进一步了解和掌握LangGraph必备的开发者套件。分别是LangGraph运行监控框架LangSmith、LangGraph图结构可视化与调试框架LangGraph Studio和LangGraph服务部署工具LangGraph Cli。可以说这些开发工具套件,是真正推动LangGraph的企业级应用开发效率大幅提升的关键。同时监控、调试和部署工具,也是全新一代企业级Agent开发框架的必备工具,也是开发者必须要掌握的基础工具。
LangGraph运行监控框架:LangSmithLangSmith官网地址:https://docs.smith.langchain.com/ LangSmith 是一款用于构建、调试、可视化和评估 LLM 工作流的全生命周期开发平台。它聚焦的不是模型训练,而是我们在构建 AI 应用(尤其是多工具 Agent、LangChain/Graph)时的「可视化调试」、「性能评估」与「运维监控」。LangGraph图结构可视化与调试框架:LangGraph StudioLangGraph Studio官网地址:https://www.langgraph.dev/studio LangGraph Studio 是一个用于可视化构建、测试、分享和部署智能体流程图的图形化 IDE + 运行平台。LangGraph服务部署工具:LangGraph CliLangGraph Cli官网地址:https://www.langgraph.dev/ (需要代理环境) LangGraph CLI 是用于本地启动、调试、测试和托管 LangGraph 智能体图的开发者命令行工具。LangGraph Agent前端可视化工具:Agent Chat UI Agent Chat UI 是 LangGraph/LangChain 官方提供的多智能体前端对话面板,用于与后端 Agent(Graph 或 Chain)进行实时互动,支持上传文件、多工具协同、结构化输出、多轮对话、调试标注等功能。 Agent Chat UI官网地址:https://langchain-ai.github.io/langgraph/agents/ui/LangGraph内置工具库与MCP调用组件 除了有上述非常多实用的开发工具外,LangGraph还全面兼容LangChain的内置工具集。LangChain自诞生之初就为开发者提供了非常多种类各异的、封装好的实用工具,历经几年发展时间,目前LangChain已经拥有了数以百计的内置实用工具,包括网络搜索工具、浏览器自动化工具、Python代码解释器、SQL代码解释器等。而作为LangChain同系框架,LangGraph也可以无缝调用LangChain各项开发工具,从而大幅提高开发效率。 LangChain工具集:https://python.langchain.com/docs/integrations/tools/
而对于LangGraph构建的智能体,除了能够本地部署外,官方也提供了云托管服务,借助LangGraph Platform,开发者可以将构建的智能体 Graph部署到云端,并允许公开访问,同时支持支持长时间运行、文件上传、外部 API 调用、Studio 集成等功能。
二、快速入门演示
安装:pip install langgraph- ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
- (lc) PS C:\Users\Administrator> pip show langgraph
- Name: langgraph
- Version: 0.4.8
- Summary: Building stateful, multi-actor applications with LLMs
- Home-page:
- Author:
- Author-email:
- License-Expression: MIT
- Location: C:\ProgramData\anaconda3\envs\lc\Lib\site-packages
- Requires: langchain-core, langgraph-checkpoint, langgraph-prebuilt, langgraph-sdk, pydantic, xxhash
- Required-by:
复制代码 基本配置- ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
- import os
- from dotenv import load_dotenv
- load_dotenv(override=True)
- DeepSeek_API_KEY = os.getenv("DEEPSEEK_API_KEY")
- from langchain.chat_models import init_chat_model
- model = init_chat_model(model="deepseek-chat", model_provider="deepseek")
复制代码 创建一个工具- ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
- from langchain_core.tools import tool
- from pydantic import BaseModel, Field
- import requests,json
- class WeatherQuery(BaseModel):
- loc: str = Field(description="The location name of the city")
- @tool(args_schema = WeatherQuery)
- def get_weather(loc):
- """
- 查询即时天气函数
- :param loc: 必要参数,字符串类型,用于表示查询天气的具体城市名称,\
- 注意,中国的城市需要用对应城市的英文名称代替,例如如果需要查询北京市天气,则loc参数需要输入'Beijing';
- :return:OpenWeather API查询即时天气的结果,具体URL请求地址为:https://api.openweathermap.org/data/2.5/weather\
- 返回结果对象类型为解析之后的JSON格式对象,并用字符串形式进行表示,其中包含了全部重要的天气信息
- """
- # Step 1.构建请求
- url = "https://api.openweathermap.org/data/2.5/weather"
- # Step 2.设置查询参数
- params = {
- "q": loc,
- "appid": os.getenv("OPENWEATHER_API_KEY"), # 输入API key
- "units": "metric", # 使用摄氏度而不是华氏度
- "lang":"zh_cn" # 输出语言为简体中文
- }
- # Step 3.发送GET请求
- response = requests.get(url, params=params)
- # Step 4.解析响应
- data = response.json()
- return json.dumps(data)
复制代码- ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
- print(f'''
- name: {get_weather.name}
- description: {get_weather.description}
- arguments: {get_weather.args}
- ''')
- name: get_weather
- description: 查询即时天气函数
- :param loc: 必要参数,字符串类型,用于表示查询天气的具体城市名称, 注意,中国的城市需要用对应城市的英文名称代替,例如如果需要查询北京市天气,则loc参数需要输入'Beijing';
- :return:OpenWeather API查询即时天气的结果,具体URL请求地址为:https://api.openweathermap.org/data/2.5/weather 返回结果对象类型为解析之后的JSON格式对象,并用字符串形式进行表示,其中包含了全部重要的天气信息
- arguments: {'loc': {'description': 'The location name of the city', 'title': 'Loc', 'type': 'string'}}
复制代码 调用测试
[code]ounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(lineounter(line
# 封装外部函数列表
tools = [get_weather]
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].content)
根据查询结果,北京今天的天气情况如下:
**天气状况**: |