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)
执行链路:

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

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 中操作表格数据 | |
🌐 网络/API | RequestsGetTool / RequestsPostTool | 执行 HTTP 请求 |
BrowserTool / PlaywrightBrowserToolkit | 自动化网页浏览与抓取 | |
💾 文件处理 | ReadFileTool | 读取本地文件内容 |
WriteFileTool | 写入文本到指定文件中 | |
📚 检索工具 | FAISSRetriever | 基于向量的文档检索工具 |
ChromaRetriever | 使用 ChromaDB 的检索器 | |
ContextualCompressionRetriever | 上下文压缩检索器,适合长文档 | |
🧠 LLM 工具 | ChatOpenAI / OpenAIFunctionsTool | 使用 OpenAI 模型作为工具调用 |
ChatAnthropic | Anthropic 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 run | CLI输入测试 |
🧭 项目初始化 | 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创建完整智能体项目
LangSmith
与 LangGraph 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
文件中配置项目信息,遵循规范如下所示:
- 必须包含
dependencies
和graphs
字段 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生态的深厚积累,为开发者提供了从开发到部署的完整解决方案。
参考:赋范空间大模型技术社区