LangGraph快速入门:5分钟实现支持多轮对话的AI助手
## 前言
在 AI Agent 开发领域,LangGraph 作为 LangChain 的扩展框架,为构建复杂的多步骤 AI 应用提供了强大的状态管理能力。本文将带你从零开始,使用 LangGraph 的预构建组件快速搭建一个支持多轮对话的天气查询 Agent,让你 5 分钟上手 LangGraph 核心概念。
---
## 一、核心概念
### 1.1 什么是 LangGraph
LangGraph 是 LangChain 团队推出的用于构建 Agent 应用的框架,它通过图(Graph)的结构来组织 AI 工作流。相比传统的链式调用,LangGraph 提供了:
- **状态管理**:在对话中保持上下文
- **循环支持**:支持多轮交互和循环执行
- **工具调用**:轻松集成外部工具和 API
### 1.2 为什么需要记忆功能
在真实的 AI 对话场景中,用户很少一次性说完所有需求。比如:
```
用户:"旧金山天气怎么样?"
AI:"旧金山天气晴朗..."
用户:"那纽约呢?" ← 这里隐含了"天气"的上下文
```
没有记忆功能的 AI 会无法理解第二个问题。LangGraph 通过 `checkpointer` 机制完美解决了这个问题。
---
## 二、环境准备
### 2.1 安装依赖
```bash
pip install langgraph langchain langchain-openai pydantic python-dotenv
```
### 2.2 配置 API 密钥
创建 `.env` 文件:
```env
SILICONFLOW_API_KEY=your_api_key_here
```
本文使用硅基流动平台的 Qwen 模型,你也可以替换为 OpenAI 或其他兼容 OpenAI API 的模型。
---
## 三、代码实现
### 3.1 完整代码
```python
"""
LangGraph 快速入门示例 - 第一个 Agent 程序
本示例演示如何使用 LangGraph 的预构建组件创建一个简单的天气查询 Agent。
"""
from langgraph.prebuilt import create_react_agent
from langchain.chat_models import init_chat_model
from langgraph.checkpoint.memory import InMemorySaver
from pydantic import BaseModel
from dotenv import load_dotenv
from langchain_openai import ChatOpenAI
import os
# 加载环境变量
load_dotenv()
# 1. 定义工具函数
def get_weather(city: str) -> str:
"""获取指定城市的天气信息。
Args:
city: 城市名称
Returns:
天气描述字符串
"""
return f"It's always sunny in {city}!"
# 2. 定义结构化输出格式
class WeatherResponse(BaseModel):
"""天气响应的结构化格式。"""
conditions: str
# 3. 初始化模型(使用硅基流动平台的 Qwen 模型)
model = ChatOpenAI(
model="Qwen/Qwen3-Next-80B-A3B-Instruct",
openai_api_key=os.getenv("SILICONFLOW_API_KEY"),
openai_api_base="https://api.siliconflow.cn/v1",
temperature=0
)
# 4. 创建检查点器(用于记忆功能)
checkpointer = InMemorySaver()
# 5. 创建 Agent
agent = create_react_agent(
model=model,
tools=[get_weather],
checkpointer=checkpointer,
prompt="你是一个有帮助的助手,专门回答天气相关的问题。",
response_format=WeatherResponse
)
# 6. 运行 Agent
def main():
"""主函数 - 演示 Agent 的使用。"""
print("🤖 LangGraph Agent 已启动!")
print("=" * 50)
# 配置线程 ID(用于多轮对话)
config = {"configurable": {"thread_id": "1"}}
# 第一轮对话
print("\n用户:what is the weather in san francisco?")
sf_response = agent.invoke(
{"messages": [{"role": "user", "content": "what is the weather in san francisco"}]},
config
)
print(f"助手:{sf_response['messages'][-1].content}")
print(f"结构化响应:{sf_response.get('structured_response')}")
# 第二轮对话(测试记忆功能)
print("\n用户:what about new york?")
ny_response = agent.invoke(
{"messages": [{"role": "user", "content": "what about new york?"}]},
config
)
print(f"助手:{ny_response['messages'][-1].content}")
print(f"结构化响应:{ny_response.get('structured_response')}")
print("\n" + "=" * 50)
print("✅ 示例运行完成!")
if __name__ == "__main__":
main()
```
### 3.2 代码解析
#### 3.2.1 工具函数定义
```python
def get_weather(city: str) -> str:
"""获取指定城市的天气信息。"""
return f"It's always sunny in {city}!"
```
这是一个模拟的天气查询工具。在实际应用中,你可以替换为真实的天气 API 调用。
#### 3.2.2 结构化输出
```python
class WeatherResponse(BaseModel):
"""天气响应的结构化格式。"""
conditions: str
```
使用 Pydantic 定义输出格式,让 Agent 返回结构化的数据而不是纯文本。
#### 3.2.3 模型初始化
```python
model = ChatOpenAI(
model="Qwen/Qwen3-Next-80B-A3B-Instruct",
openai_api_key=os.getenv("SILICONFLOW_API_KEY"),
openai_api_base="https://api.siliconflow.cn/v1",
temperature=0
)
```
这里使用硅基流动的 Qwen 模型,temperature=0 确保输出稳定。
#### 3.2.4 记忆功能核心
```python
# 创建检查点器(存储引擎)
checkpointer = InMemorySaver()
# 配置线程 ID(会话标识)
config = {"configurable": {"thread_id": "1"}}
```
- `checkpointer`:决定对话历史存储在哪里(内存、数据库等)
- `thread_id`:标识不同的对话会话,相同 ID 会共享历史记录
#### 3.2.5 创建 Agent
```python
agent = create_react_agent(
model=model,
tools=[get_weather],
checkpointer=checkpointer,
prompt="你是一个有帮助的助手,专门回答天气相关的问题。",
response_format=WeatherResponse
)
```
`create_react_agent` 是 LangGraph 提供的预构建 Agent,实现了 ReAct(Reasoning + Acting)模式:
- **Reasoning**:理解用户意图
- **Acting**:调用工具获取信息
- **Observing**:根据结果生成回复
---
## 四、运行效果
### 4.1 执行步骤
```bash
python 01快速入门.py
```
### 4.2 输出结果

**关键观察**:第二个问题 "what about new york?" 没有明确说"天气",但 Agent 根据上下文理解了用户的意图!
---
## 五、踩坑记录
| 问题 | 原因 | 解决方案 |
|------|------|----------|
| `checkpointer` 和 `config` 的区别混淆 | 两者都用于记忆,但作用不同 | `checkpointer` 是存储引擎,`config` 是会话标识 |
---
## 六、总结
通过本文,你学会了:
1. ✅ 使用 `create_react_agent` 快速搭建 Agent
2. ✅ 定义工具函数并集成到 Agent 中
3. ✅ 使用 `checkpointer` 实现多轮对话记忆
4. ✅ 配置结构化输出格式
这只是 LangGraph 的冰山一角,后续可以探索:
- 自定义图结构(StateGraph)
- 持久化存储(PostgreSQL、Redis)
- 人机协作(Human-in-the-loop)
- 多 Agent 协作系统
---
## 参考资料
- [LangGraph 官方文档](https://langchain-ai.github.io/langgraph/)
- [硅基流动 API 文档](https://docs.siliconflow.cn/)
- [ReAct 论文](https://arxiv.org/abs/2210.03629)
---
> 📌 本文首发于 CSDN,作者:码上AI_123
> 🔗 转载请注明出处
>
> 💡 如果觉得有帮助,欢迎点赞、收藏、关注!
> 🎯 你的支持是我持续创作的动力!
更多推荐



所有评论(0)