一、什么是 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 记忆管理MemoryAgent 需要记住之前的对话和状态类型说明例子短期记忆单次会话内的记忆我刚才说了什么长期记忆跨会话的持久记忆记住我的偏好# LangGraph 原生支持记忆 from langgraph.checkpoint.memory import MemorySaver memory MemorySaver() graph builder.compile(checkpointermemory)2.2 人工干预Human-in-the-LoopAgent 执行过程中可以暂停等待人工确认Agent: 我准备删除这个文件确认吗 人工: 确认 Agent: 已删除关键特点可以无限期暂停不依赖实时连接支持异步审批可在工作流任意节点干预2.3 流式输出Streaming实时输出 Agent 的执行过程# 流式输出 Agent 状态 for event in graph.stream(input, stream_modevalues): print(event)可以流式输出Agent 状态变化LLM 生成的 token工具执行结果2.4 部署工具LangGraph 提供完整的部署解决方案工具说明LangGraph Studio可视化 IDE用于调试和检查工作流LangGraph Platform支持多种生产环境部署CLI SDK命令行工具和开发套件三、高级预构建组件LangGraph 提供了一系列预构建组件让你不用从零开始实现 Agent3.1 为什么需要预构建组件传统方式从零开始: - 自己实现状态管理 - 自己实现记忆存储 - 自己实现人工干预 - 自己实现错误处理 ...费时费力 使用预构建组件: - 调用 create_react_agent() 就能创建 Agent - 内置状态管理、记忆、干预等功能 ...快速上线3.2 核心预构建组件组件功能create_react_agent创建 ReAct 风格的 AgentToolNode工具执行节点tools_condition条件边判断是否需要调用工具四、包生态系统LangGraph 的功能分布在多个包中4.1 核心包包名用途安装命令langgraph核心框架 预构建组件pip install langgraphlanggraph-supervisor构建主管模式多 Agentpip install langgraph-supervisorlanggraph-swarm构建蜂群模式多 Agentpip install langgraph-swarm4.2 扩展包包名用途安装命令langchain-mcp-adaptersMCP 服务器集成pip install langchain-mcp-adapterslangmemAgent 记忆管理pip install langmemagentevalsAgent 性能评估pip install agentevals五、创建 Agent 的基本方法5.1 最简单的例子from langgraph.prebuilt import create_react_agent from langchain_openai import ChatOpenAI # 1. 创建 LLM model ChatOpenAI(modelgpt-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 官方文档 - AgentsLangGraph 教程 - 创建 AgentLangGraph 概念 - 多 Agent 系统附录快速开始安装pip install langgraph langchain-openai最小示例from langgraph.prebuilt import create_react_agent from langchain_openai import ChatOpenAI model ChatOpenAI(modelgpt-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 让你可以快速创建 Agent使用预构建组件管理记忆和状态实现人工干预部署到生产环境核心思想让 AI 不仅能说话还能做事。