当前位置: 首页 > news >正文

LangGraph快速入门项目部署

LangGraph快速入门总结

1. LangGraph框架概述

1.1 核心定位

LangGraph是LangChain生态中的新一代Agent开发框架,采用图结构工作流编排,突破了传统链式结构的局限性。

技术特点:

  • 基于图结构的Agent编排工具
  • 支持有状态循环图(可控状态机)
  • 三层API架构:底层图结构API → Agent API → 预构建Agent

1.2 与LangChain的关系

  • 本质关系:LangGraph是LangChain的高级编排工具
  • 技术实现:底层仍依赖LangChain的Chain机制
  • 核心优势:图结构编排 vs 线性链式结构

2. LangGraph技术架构

2.1 三层API架构

┌─────────────────┐
│  预构建Agent     │ 最高层封装
├─────────────────┤
│   Agent API     │ 中层封装
├─────────────────┤
│ 底层图结构API    │ 基础构建块
└─────────────────┘

架构优势:

  • 开发效率:3行代码创建完整Agent
  • 灵活性:支持从底层到高层的渐进式开发
  • 可扩展性:丰富的预构建组件

2.2 图结构核心概念

  • 节点(Nodes):执行具体任务的函数
  • 边(Edges):控制节点间数据流向
  • 状态(State):节点间消息传递的载体

2.3.1 调用llm示例:

首先同级目录下创建.env文件,内容如下:
在这里插入图片描述

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_modelmodel = init_chat_model(model="deepseek-chat", model_provider="deepseek")  question = "你好,请你介绍一下你自己。"result = model.invoke(question)
print(result.content)

2.3.2 创建智能体:

import requests,json
import os
from dotenv import load_dotenv 
load_dotenv(override=True)

在LangGraph中,我们可以直接使用外部工具带入到LangGraph中创建智能体,不过更为稳妥的形式,是通过一个结构化工具函数来说明外部函数的参数输入(包括参数类型),以确保在实际调用过程中大模型能够准确识别外部函数的参数类型及其实际含义:

from langchain_core.tools import tool
from pydantic import BaseModel, Fieldclass 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)
# 封装外部函数列表
tools = [get_weather]from langchain.chat_models import init_chat_model
model = init_chat_model(model="deepseek-chat", model_provider="deepseek")  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)

执行链路:

202412191720637

2.3.3 LangGraph React Agent外部工具响应形式:

image-20250626173225510

a.并发调用

response = agent.invoke({"messages": [{"role": "user", "content": "请问北上广深今天哪里更热?"}]})
response

这里针对llm返回延时或者报错的一种有效解决办法:

from tenacity import retry, stop_after_attempt, wait_fixed
#最多重试 3 次(stop_after_attempt(3))每次重试间隔 2 秒(wait_fixed(2)) ,config={"timeout": 30}最大响应等待时间
@retry(stop=stop_after_attempt(3), wait=wait_fixed(2))
def safe_invoke(agent, inputs,config={"timeout": 30}):return agent.invoke(inputs,config)response = safe_invoke(agent, {"messages": [{"role": "user", "content": "请问上海和兰州今天哪里更热?"}]})

b.多工具调用

from langchain_core.tools import tool
from pydantic import BaseModel, Fieldclass Write_Query(BaseModel):content: str = Field(description="需要写入文档的具体内容")@tool(args_schema = Write_Query)
def write_file(content: str) -> str:"""将指定内容写入本地文件。:param content: 必要参数,字符串类型,用于表示需要写入文档的具体内容。:return:是否成功写入"""return "已成功写入本地文件。"# 封装外部函数列表
tools = [get_weather, write_file]
agent = create_react_agent(model=model, tools=tools)
response = agent.invoke({"messages": [{"role": "user", "content": "你好,请帮我查询北京和杭州的天气,并将其写入本地文件中。"}]})
print(response["messages"][-1].content)

2.3.4 LangGraph React Agent接入内置工具流程

  LangGraph智能体,除了能够灵活接如自定义工具,还能够接入LangChain丰富的内置工具,快速完成智能体开发。 在 LangChain 框架中,工具(Tools)是实现语言模型与外部世界交互的关键机制。LangChain 提供了大量内置与可扩展的工具接口,使得智能体(Agent)能够执行函数调用、访问 API、查询搜索引擎、调用数据库等任务,从而超越纯语言生成的能力,真正实现“能行动的智能体”。LangChain 官方文档将这些工具按照其用途进行了模块化划分,涵盖了以下主要类别:

功能类别工具名称简要说明
🔎 搜索工具TavilySearchResults快速搜索实时网络信息
SerpAPIWrapper基于 SerpAPI 的搜索结果工具
GoogleSearchAPIWrapper调用 Google 可编程搜索引擎
🧠 计算工具PythonREPLTool执行 Python 表达式并返回结果
LLMMathTool结合 LLM 和数学推理能力
WolframAlphaQueryRun基于 Wolfram Alpha 的计算引擎
🗂 数据工具SQLDatabaseToolkit构建 SQL 数据库查询工具集
PandasDataframeTool用于在 Agent 中操作表格数据
🌐 网络/APIRequestsGetTool / RequestsPostTool执行 HTTP 请求
BrowserTool / PlaywrightBrowserToolkit自动化网页浏览与抓取
💾 文件处理ReadFileTool读取本地文件内容
WriteFileTool写入文本到指定文件中
📚 检索工具FAISSRetriever基于向量的文档检索工具
ChromaRetriever使用 ChromaDB 的检索器
ContextualCompressionRetriever上下文压缩检索器,适合长文档
🧠 LLM 工具ChatOpenAI / OpenAIFunctionsTool使用 OpenAI 模型作为工具调用
ChatAnthropicAnthropic Claude 模型封装工具
🔧 自定义工具@tool 装饰器任意函数可封装为 Agent 可调用工具
Tool 类继承自定义更复杂逻辑的工具实现

TAVILY使用:

# 这里需要在tavily官网申请api_key,以及提前把api_key加载了
from langchain_tavily import TavilySearch
from dotenv import load_dotenv 
load_dotenv(override=True)search_tool = TavilySearch(max_results=5, topic="general")
tools = [search_tool]
search_agent = create_react_agent(model=model, tools=tools)
response = search_agent.invoke({"messages": [{"role": "user", "content": "请帮我搜索最近OpenAI CEO在访谈中的核心观点。"}]})
print(response["messages"][-1].content)

2.3.5. LangGraph React Agent限制工具调用次数

  对于任何全自动的代理,合理控制调用次数都是至关重要的一环,对于LangGraph React Agent来说,我们只需要在Agent运行的时候设置{“recursion_limit”: X},即可限制智能体自主执行任务时的步数。

try:response = agent.invoke({"messages": [{"role": "user", "content": "请问北京今天天气如何?"}]},{"recursion_limit": 4},)
except GraphRecursionError:print("Agent stopped due to max iterations.")response['messages'][-1].content

2.3.6 LangGraph React智能体记忆管理与多轮对话方法

from langgraph.checkpoint.memory import InMemorySavercheckpointer = InMemorySaver()
tools = [get_weather]
model = init_chat_model(model="deepseek-chat", model_provider="deepseek")  
agent = create_react_agent(model=model, tools=tools,checkpointer=checkpointer)
config = {"configurable": {"thread_id": "1"  }
} 
response = agent.invoke({"messages": [{"role": "user", "content": "你好,我叫陈明,好久不见!"}]},config
)
response['messages']
response = agent.invoke({"messages": [{"role": "user", "content": "你好,请问你还记得我叫什么名字么?"}]},config
)
response['messages']

而如果更新线程ID,则会重新开启对话:

config2 = {"configurable": {"thread_id": "2"  }
}
response2 = agent.invoke({"messages": [{"role": "user", "content": "你好,你还记得我叫什么名字么?"}]},config2
)
response2['messages']

3. LangGraph开发工具套件

3.1 运行监控:LangSmith

官网:https://docs.smith.langchain.com/

核心功能:

功能类别描述应用场景
🧪 调试追踪可视化LLM调用链Agent调试
📊 性能评估自动评估回答质量A/B测试
🧵 会话记录完整运行历史追踪问题诊断
🔧 Prompt管理版本控制与历史记录Prompt迭代
📈 流量监控实时性能指标生产监控

3.2 可视化开发:LangGraph Studio

官网:https://www.langgraph.dev/studio

功能模块:

功能模块说明应用场景
🧩 Graph编辑器拖拽式图构建零代码开发
🔍 节点配置器灵活配置LLM/工具定制化Agent
▶️ 即时测试浏览器内实时运行快速验证
💾 云端保存项目分享与协作团队协作
📦 多模态支持文件上传与处理RAG应用

3.3 部署工具:LangGraph CLI

官网:https://www.langgraph.dev/

命令功能:

功能类别命令示例说明
✅ 启动服务langgraph dev启动开发服务器
🧪 本地测试langgraph runCLI输入测试
🧭 项目初始化langgraph init创建标准项目结构
📦 云端部署langgraph deploy部署到LangGraph平台

3.4 前端界面:Agent Chat UI

官网:https://langchain-ai.github.io/langgraph/agents/ui/

界面功能:

  • 💬 多轮对话界面
  • 🛠 工具调用轨迹显示
  • 📄 文件上传支持
  • 🧭 Assistant切换
  • 🔍 调试视图
  • 🌐 云部署集成

3.5 工具生态支持

  • LangChain工具集:数百种内置工具
  • MCP协议支持:通过langchain-mcp-adapters
  • A2A协议:谷歌跨Agents通信协议

LangGraph 项目部署

1. 借助LangGraph Cli创建完整智能体项目

  LangSmithLangGraph Studio 都是 LangChain AI 生态中非常核心的工具,前者是用于跟踪和分析大模型的使用情况,而langGraph Studio则是对于LangGraph来说,则是比LangSmith更加方便和高效的可视化调试工具平台。

  • Step 1. 创建一个LangGraph项目文件夹
    在这里插入图片描述

  • Step 2. 创建requirements.txt文件

  在langgraph_chatbot文件夹中,新建一个requirements.txt文件,里面需要填写在运行该项目时需要安装的依赖项.

  • Step 3. 注册LangSmith(可选)
      对于企业级的Agent项目,为了更好的监控智能体实时运行情况,我们可以考虑借助LangSmith进行追踪(会将智能体运行情况实时上传到LangGraph官网并进行展示)。
      在构建程序跟踪前,首先需要创建一个 API 密钥,该密钥将允许我们的项目开始向 Langsmith 发送跟踪数据。创建完密钥后,在后续配置环境变量环节设置开启追踪、并输入密钥即可接入LangSmith。

  • Step 4. 创建.env配置文件

  在langgraph_chatbot文件夹中,新建一个.env文件,将敏感信息(如API密钥)放在环境变量中而不是硬编码。

  • Step 5. 创建graph.py核心文件

  在langgraph_chatbot文件夹中,新建一个graph.py文件,在该文件中编写构建图的具体运行逻辑,如状态、节点、变、图的编译等。注意:这里不要使用init_chat_model方法,而是使用ChatDeepSeek方法,因为会存在异步阻塞问题。此外,在使用LangGraph CLI创建智能体项目时,会自动设置记忆相关内容,并进行持久化记忆存储,无需手动设置。因此此时智能体代码如下所示:

```python
import os
from dotenv import load_dotenv 
from langchain_deepseek import ChatDeepSeek
from typing import Annotated
from typing_extensions import TypedDict
from langgraph.graph import StateGraph, START, END
from langgraph.graph.message import add_messages
from langchain.chat_models import init_chat_model
from langgraph.prebuilt import create_react_agent
from langchain_tavily import TavilySearch
from langchain_core.tools import tool
from pydantic import BaseModel, Field
import requests,json# 加载环境变量
load_dotenv(override=True)# 内置搜索工具
search_tool = TavilySearch(max_results=5, topic="general")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)tools = [search_tool, get_weather]# 创建模型
model = ChatDeepSeek(model="deepseek-chat")prompt = """
你是一名乐于助人的智能助手,擅长根据用户的问题选择合适的工具来查询信息并回答。当用户的问题涉及**天气信息**时,你应优先调用`get_weather`工具,查询用户指定城市的实时天气,并在回答中总结查询结果。当用户的问题涉及**新闻、事件、实时动态**时,你应优先调用`search_tool`工具,检索相关的最新信息,并在回答中简要概述。如果问题既包含天气又包含新闻,请先使用`get_weather`查询天气,再使用`search_tool`查询新闻,最后将结果合并后回复用户。所有回答应使用**简体中文**,条理清晰、简洁友好。
"""# 创建图
graph = create_react_agent(model=model, tools=tools, prompt=prompt)天气时候,请使用get_weather工具查询天气。当用户询问新闻时,请使用search_tool工具查询新闻。")
  • Step 6. 创建langgraph.json文件

  在langgraph_chatbot文件夹中,新建一个langgraph.json文件,在该json文件中配置项目信息,遵循规范如下所示:

  • 必须包含 dependenciesgraphs 字段
  • graphs 字段格式:“图名”: “文件路径:变量名”
  • 配置文件必须放在与Python文件同级或更高级的目录

  注意: 项目文件的名称必须为langgraph.json。如下所示:

```josn
{"dependencies": ["./"],"graphs": {"langgraph_chatbot": "./graph.py:graph"},"env": ".env"
}

  其中:

  • dependencies: [“./”] - 告诉LangGraph在当前目录查找依赖项(会自动读取requirements.txt
  • chatbot: “./graph.py:graph” - 定义图名为chatbot,来自graph.py文件中的graph变量
  • env: “.env” - 指定环境变量文件位置

  最终完整项目结构如下所示:

    ./langraph_chatbot/├── graph.py              # 对应官方的 agent.py├── requirements.txt      # ✅ 依赖管理├── langgraph.json       # ✅ 配置文件└── .env                 # ✅ 环境变量
  • Step 7. 安装langgraph-cli以及其他依赖
    pip install -U "langgraph-cli[inmem]"

  最后,进入到langgraph_chatbot文件夹,执行LangGraph dev即可启动项目

   langgraph dev

在这里插入图片描述
页面会自动跳转到LangSmith,然后就是调试了:
在这里插入图片描述

2. LangGraph Agent后端接入Agent Chat UI完整流程

  • Step 1.克隆项目:
git clone https://github.com/langchain-ai/agent-chat-ui.gitcd agent-chat-ui
  • Step 2. 安装npm

  node.js官网:https://nodejs.org,下载安装node.js

npm install -g pnpm
pnpm -v
  • Step 3. 安装前端项目依赖
pnpm install
  • Step 4. 开启Chat Agent UI
pnpm dev

在这里插入图片描述
打开本地链接:
在这里插入图片描述
如实填写,然后进入:
在这里插入图片描述

总结

LangGraph通过图结构编排、三层API架构和完整的开发工具链,成为当前最先进的Agent开发框架。其不仅解决了传统链式结构的局限性,更通过LangChain生态的深厚积累,为开发者提供了从开发到部署的完整解决方案。


参考:赋范空间大模型技术社区

http://www.dtcms.com/a/301418.html

相关文章:

  • C++ 中实现 `Task::WhenAll` 和 `Task::WhenAny` 的两种方案
  • 从0搭建YOLO目标检测系统:实战项目+完整流程+界面开发(附源码)
  • jenkins只能运行2个任务,提示:“等待下一个可用的执行器”
  • Redis C++客户端——命令使用
  • 实战演练1:实战演练之命名实体识别
  • Docker 的数据持久化-数据卷
  • (AC)架子鼓
  • 基于Java的KTV点歌系统的设计与实现
  • 【CF】Day112——杂题 (逆向思维 | 二分 + 贪心 | 单调队列优化DP | 二进制 + 前缀和 | 二分图判断 | 暴力枚举)
  • JavaEE--3.多线程
  • python-装饰器
  • 【ST表、倍增】P7167 [eJOI 2020] Fountain (Day1)
  • QT6 源,七章对话框与多窗体(15)多文档 MDI 窗体 QMdiArea 篇一:属性,公共成员函数,信号与槽函数
  • 多智能体架构
  • 《计算机组成原理与汇编语言程序设计》实验报告四 Debug及指令测试
  • setnonblocking函数用途和使用案例
  • 在本地环境中运行 ‘dom-distiller‘ GitHub 库的完整指南
  • OSPF路由协议 多区域
  • 【ESP32】无法找到: “${env:IDF_PATH}/components/“的路径报错问题以及CMAKE构建不成功问题
  • Cursor报错解决【持续更新中】
  • 金融科技中的远程开户、海外个人客户在线开户、企业客户远程开户
  • 深入解析Java运行机制与JVM内存模型
  • 【Web APIs】JavaScript 节点操作 ⑩ ( 节点操作综合案例 - 动态生成表格案例 )
  • windows 11 JDK11安装
  • LeetCode 239:滑动窗口最大值
  • 五自由度磁悬浮轴承转子不平衡振动抑制破局:不平衡前馈补偿+自抗扰控制实战解析
  • MySQL 全详解:从入门到精通的实战指南
  • 第二阶段-第二章—8天Python从入门到精通【itheima】-138节(MySQL的综合案例)
  • 设备分配与回收
  • 数据处理实战(含代码)