LangGraph Agent 开发指南(1~概述)

一、什么是 Agent(智能体)?

1.1 通俗解释

想象你有一个特别聪明的助手,它不仅能和你聊天,还能帮你干活:

  • 你说"帮我查一下北京明天的天气",它会调用天气 API 查询
  • 你说"帮我订一张去上海的机票",它会调用订票系统
  • 你说"帮我写一段代码",它会调用代码执行工具

这就是 Agent(智能体)------一个能"动手干活"的 AI。

1.2 正式定义

一个 Agent 由三个核心组件构成:

复制代码
┌─────────────────────────────────────────────────────────────┐
│                      Agent 的组成                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. 大语言模型 (LLM)                                        │
│     - 负责"思考"和决策                                      │
│     - 决定什么时候调用工具、调用哪个工具                     │
│                                                             │
│  2. 工具集 (Tools)                                          │
│     - Agent 可以使用的"技能"                                │
│     - 比如:搜索、计算、调用 API、执行代码等                 │
│                                                             │
│  3. 提示词 (Prompt)                                         │
│     - 给 Agent 的"指令"                                     │
│     - 定义 Agent 的角色、行为规范等                         │
│                                                             │
└─────────────────────────────────────────────────────────────┘

1.3 Agent 的执行循环

Agent 不是"一次对话就结束",而是在一个循环中持续运行:

复制代码
┌─────────────────────────────────────────────────────────────┐
│                    Agent 执行循环                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│     ┌──────────┐                                            │
│     │  用户输入 │                                            │
│     └────┬─────┘                                            │
│          │                                                  │
│          ▼                                                  │
│     ┌──────────┐     ┌──────────┐                          │
│     │ LLM 思考  │────▶│ 选择工具  │                          │
│     └──────────┘     └────┬─────┘                          │
│                         │                                  │
│                         ▼                                  │
│                    ┌──────────┐                            │
│                    │ 执行工具  │                            │
│                    └────┬─────┘                            │
│                         │                                  │
│                         ▼                                  │
│                    ┌──────────┐                            │
│                    │ 获得结果  │                            │
│                    └────┬─────┘                            │
│                         │                                  │
│                         ▼                                  │
│                    ┌──────────┐                            │
│                    │ 任务完成?│                            │
│                    └────┬─────┘                            │
│                    是 │  │ 否                              │
│                       │  └──────┐                          │
│                       ▼         │                          │
│                  ┌──────────┐   │                          │
│                  │ 返回结果  │   │                          │
│                  └──────────┘   │                          │
│                                 │                          │
│                                 └──────▶ 回到 LLM 思考      │
│                                                             │
└─────────────────────────────────────────────────────────────┘

简单说:Agent 会不断"思考-行动-观察",直到完成任务。


二、LangGraph 的核心功能

LangGraph 提供了构建生产级 Agent 系统所需的关键功能:

2.1 记忆管理(Memory)

Agent 需要"记住"之前的对话和状态:

类型 说明 例子
短期记忆 单次会话内的记忆 "我刚才说了什么?"
长期记忆 跨会话的持久记忆 "记住我的偏好"
复制代码
# LangGraph 原生支持记忆
from langgraph.checkpoint.memory import MemorySaver

memory = MemorySaver()
graph = builder.compile(checkpointer=memory)

2.2 人工干预(Human-in-the-Loop)

Agent 执行过程中可以暂停,等待人工确认:

复制代码
Agent: 我准备删除这个文件,确认吗?
人工: 确认
Agent: 已删除

关键特点:

  • 可以无限期暂停(不依赖实时连接)
  • 支持异步审批
  • 可在工作流任意节点干预

2.3 流式输出(Streaming)

实时输出 Agent 的执行过程:

复制代码
# 流式输出 Agent 状态
for event in graph.stream(input, stream_mode="values"):
    print(event)

可以流式输出:

  • Agent 状态变化
  • LLM 生成的 token
  • 工具执行结果

2.4 部署工具

LangGraph 提供完整的部署解决方案:

工具 说明
LangGraph Studio 可视化 IDE,用于调试和检查工作流
LangGraph Platform 支持多种生产环境部署
CLI & SDK 命令行工具和开发套件

三、高级预构建组件

LangGraph 提供了一系列预构建组件,让你不用从零开始实现 Agent:

3.1 为什么需要预构建组件?

复制代码
传统方式(从零开始):
  - 自己实现状态管理
  - 自己实现记忆存储
  - 自己实现人工干预
  - 自己实现错误处理
  ...费时费力

使用预构建组件:
  - 调用 create_react_agent() 就能创建 Agent
  - 内置状态管理、记忆、干预等功能
  ...快速上线

3.2 核心预构建组件

组件 功能
create_react_agent 创建 ReAct 风格的 Agent
ToolNode 工具执行节点
tools_condition 条件边:判断是否需要调用工具

四、包生态系统

LangGraph 的功能分布在多个包中:

4.1 核心包

包名 用途 安装命令
langgraph 核心框架 + 预构建组件 pip install langgraph
langgraph-supervisor 构建主管模式多 Agent pip install langgraph-supervisor
langgraph-swarm 构建蜂群模式多 Agent pip install langgraph-swarm

4.2 扩展包

包名 用途 安装命令
langchain-mcp-adapters MCP 服务器集成 pip install langchain-mcp-adapters
langmem Agent 记忆管理 pip install langmem
agentevals Agent 性能评估 pip install agentevals

五、创建 Agent 的基本方法

5.1 最简单的例子

复制代码
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI

# 1. 创建 LLM
model = ChatOpenAI(model="gpt-4")

# 2. 定义工具
def get_weather(city: str) -> str:
    """查询城市天气"""
    return f"{city}今天晴天,温度25度"

# 3. 创建 Agent
agent = create_react_agent(
    model,
    tools=[get_weather],
)

# 4. 运行 Agent
result = agent.invoke({
    "messages": [{"role": "user", "content": "北京今天天气怎么样?"}]
})

print(result)

5.2 Agent 的内部结构

create_react_agent 创建的 Agent 包含以下组件:

复制代码
┌─────────────────────────────────────────────────────────────┐
│                    Agent 内部结构                            │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  tools: 工具列表                                            │
│    - Agent 可以调用的函数或 API                             │
│                                                             │
│  pre_model_hook: 模型调用前的钩子                           │
│    - 可以修改消息、添加系统提示等                           │
│                                                             │
│  post_model_hook: 模型调用后的钩子                          │
│    - 可以添加防护措施、人工干预等                           │
│                                                             │
│  response_format: 输出格式约束                              │
│    - 可以指定输出为特定的数据结构                           │
│                                                             │
└─────────────────────────────────────────────────────────────┘

5.3 可视化 Agent 图

复制代码
# 查看 Agent 的图结构
agent.get_graph().draw_ascii()

# 保存为 PNG
png_data = agent.get_graph().draw_mermaid_png()
with open("agent_graph.png", "wb") as f:
    f.write(png_data)

六、Agent vs 传统程序

6.1 对比表

特性 传统程序 Agent
决策方式 预定义规则 LLM 动态决策
灵活性 固定流程 可根据情况调整
工具使用 硬编码调用 LLM 决定何时调用
错误处理 需要预先考虑所有情况 LLM 可以动态应对
适用场景 流程明确、规则固定 需要灵活应对的场景

6.2 什么时候用 Agent?

适合用 Agent:

  • 任务流程不确定,需要灵活应对
  • 需要根据用户输入动态选择工具
  • 需要处理开放性问题

不适合用 Agent:

  • 流程固定、规则明确
  • 不需要 LLM 决策
  • 性能要求极高(Agent 有额外开销)

七、最佳实践

7.1 工具设计原则

复制代码
# 好的工具设计:职责单一、描述清晰
def search_web(query: str) -> str:
    """搜索网络信息

    Args:
        query: 搜索关键词

    Returns:
        搜索结果摘要
    """
    ...

# 不好的工具设计:职责混乱
def do_everything(action: str, params: dict) -> dict:
    """万能工具"""
    ...

7.2 提示词设计

复制代码
# 给 Agent 明确的角色和行为规范
system_prompt = """
你是一个智能助手,负责帮助用户解决问题。

你的能力:
1. 可以搜索网络获取信息
2. 可以进行数学计算
3. 可以查询天气

你的行为规范:
1. 先思考再行动
2. 如果不确定,主动询问用户
3. 完成任务后总结结果
"""

7.3 错误处理

复制代码
# 工具内部做好错误处理
def risky_operation(param: str) -> str:
    try:
        result = do_something(param)
        return result
    except Exception as e:
        return f"操作失败: {str(e)}"

# Agent 会根据错误信息决定下一步行动

八、常见问题

Q1: Agent 和 ChatBot 有什么区别?

ChatBot Agent
只能对话 能调用工具执行任务
被动响应 主动规划和执行
单轮或简单多轮 复杂的多步骤任务

Q2: Agent 会一直循环下去吗?

不会。Agent 有停止条件:

  • LLM 认为任务完成
  • 达到最大迭代次数
  • 遇到错误

Q3: 如何控制 Agent 的成本?

  • 限制工具数量
  • 设置最大迭代次数
  • 使用更便宜的模型
  • 缓存常见查询结果

九、延伸阅读


附录:快速开始

安装

复制代码
pip install langgraph langchain-openai

最小示例

复制代码
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI

model = ChatOpenAI(model="gpt-4")

def calculator(a: int, b: int) -> int:
    """计算两个数的和"""
    return a + b

agent = create_react_agent(model, tools=[calculator])

result = agent.invoke({
    "messages": [{"role": "user", "content": "计算 3 + 5"}]
})

print(result["messages"][-1].content)

总结

Agent = LLM + 工具 + 提示词

LangGraph 让你可以:

  1. 快速创建 Agent(使用预构建组件)
  2. 管理记忆和状态
  3. 实现人工干预
  4. 部署到生产环境

核心思想:让 AI 不仅能"说话",还能"做事"。

相关推荐
Rkgua1 小时前
如何让agent禁止访问的某些文件夹呢
人工智能
BlockWay1 小时前
WEEX与西甲联赛达成2026赛季区域合作
大数据·人工智能
团象科技1 小时前
跨境出海业务频繁卡壳时,免实名云账号容易踩哪些坑
大数据·人工智能
会飞的风筝1 小时前
轻量级OpenClaw——GenericAgent项目解读
人工智能
不知名的老吴1 小时前
深度剖析NLP模型的实现步骤(一)
人工智能·深度学习·自然语言处理
A8ai1 小时前
Gemini大升级、AI眼镜首发、Android XR亮相,13天后见分晓
android·人工智能·xr
XD7429716361 小时前
科技早报|2026年5月10日:AI 编码开始拼成本、控制面和工程交付
人工智能·科技·开发者工具·科技早报
汽车仪器仪表相关领域1 小时前
Kvaser USBcan Pro 2xHS v2:双通道高速 CAN/FD 专业级 USB 接口,汽车与工业总线深度开发与诊断的核心工具
网络·人工智能·功能测试·fpga开发·汽车·可用性测试
RxGc1 小时前
斯坦福AI Agent报告解读:哪些方向真的落地了
人工智能·agent