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

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构建主管模式多 Agentpip install langgraph-supervisor
langgraph-swarm构建蜂群模式多 Agentpip install langgraph-swarm

4.2 扩展包

包名用途安装命令
langchain-mcp-adaptersMCP 服务器集成pip install langchain-mcp-adapters
langmemAgent 记忆管理pip install langmem
agentevalsAgent 性能评估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 有什么区别?

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

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

不会。Agent 有停止条件:

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

Q3: 如何控制 Agent 的成本?

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

九、延伸阅读

  • LangGraph 官方文档 - Agents
  • LangGraph 教程 - 创建 Agent
  • LangGraph 概念 - 多 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 不仅能"说话",还能"做事"。

http://www.jsqmd.com/news/795783/

相关文章:

  • AD17 3D Body实战:从零绘制异形连接器的简易3D封装
  • 英雄联盟回放播放器终极指南:ROFL-Player完全使用手册
  • 查重全红别慌!2026年5款降AI黑科技亲测,论文降AI轻松降至10%以下 - 降AI实验室
  • 告别软件模拟!用GD32F303的硬件I2C0高效读写EEPROM(附小熊派工程源码)
  • 基于规则引擎与LLM的B站关注列表智能分类实践
  • Day26:角色管理 API 完整教程(CRUD + 分配菜单 + 事务)
  • 如何快速掌握LeagueAkari:面向新手的英雄联盟本地自动化工具完整使用指南
  • STM32新手避坑指南:正点原子、野火、慧净、小马飞控的Systick延时代码到底差在哪?
  • 解锁B站缓存视频:m4s转MP4工具完全指南
  • 报错 SQLite Error 5 database is locked 生产环境怎么排查
  • 小小调度器:轻量任务调度的应用
  • 从 performWorkOnRoot 到 workInProgress tree:React 真正开始 render 的地方
  • C语言指针:从零掌握指针(4)
  • 千问 LeetCode 2227. 加密解密字符串 Python3实现
  • Unitree GO2 ROS2 SDK完整指南:5步实现四足机器人智能控制与自主导航
  • 2026年中石化加油卡回收靠谱平台最新深度测评 - 京顺回收
  • [具身智能-622]:高速图像传感器接口(视觉 / 摄像头)与数据格式
  • 别再只加contentDescription了!Android无障碍适配TalkBack的7个实战避坑点(含完整代码)
  • 根据用户主动关注用户和用户朋友圈以及其他关系层面平台注入的用户 系统推荐程序返回用户推荐列表
  • 第四章 数字孪生制作完整流程
  • 无人机通信安全渗透测试:从信号拦截到GPS欺骗的完整攻防框架
  • 茅台自动预约系统:告别手动抢购,实现智能预约的完整解决方案
  • 从零到精通:手把手教你用BusHound分析SCSI Sense错误码(附完整排查流程)
  • 终极指南:如何通过Typora插件实现高效文件管理与快速切换
  • 洛谷比赛分级
  • 如何用FanControl在5分钟内解决Windows风扇噪音问题?
  • mkcert进阶玩法:一键生成局域网HTTPS证书,让内网测试告别“不安全”警告(含Windows/Linux/Mac多平台指南)
  • WebGLM:基于检索增强生成(RAG)的实时联网智能问答系统实战解析
  • 金仓数据库 V9R4C19 安全加固实战:禁用 root 部署 + hashbytes 单向哈希
  • 大模型中转哪个技术机构靠谱