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 不仅能"说话",还能"做事"。

相关推荐
东方佑5 分钟前
波动力学语言模型(Wave Dynamics Language Model, WDLM)
人工智能·语言模型·自然语言处理
John_ToDebug13 分钟前
CLAUDE.md 与 Skills 的区别:一张表彻底分清
人工智能·经验分享·ai
程序员cxuan15 分钟前
我花了两天时间,终于把 Codex 额度掉太快的问题整明白了!!
人工智能·后端·程序员
IT_陈寒16 分钟前
Vue这个动态响应坑把我整不会了
前端·人工智能·后端
feasibility.23 分钟前
ROS2+Gazebo+VLM服务:纯仿真环境下的具身智能闭环系统| 大脑-小脑分离控制
人工智能·机器人·ros·仿真·具身智能·vla·vlm
lqqjuly25 分钟前
自动驾驶仿真平台:理论、架构与实践
人工智能·机器学习·自动驾驶
“码”力全开30 分钟前
解耦异构算力与多协议接入:基于Docker与源码交付的开源企业级GB28181/RTSP边缘计算AI视频管理平台架构深度解析
人工智能·docker·开源
J2虾虾34 分钟前
Spring AI Alibaba文档
java·人工智能·spring
Mr数据杨35 分钟前
【CanMV K210】传感器实验 U 型光电传感器遮挡检测与 LED 提示
人工智能·硬件开发·canmv k210
向量引擎36 分钟前
当搜索开始替人整理答案:我重新理解了向量检索和 API 中间层
人工智能·gpt·aigc·ai编程·ai写作·key·agi