公司动态

LangChain 之 【Agent 的简介】(ReAct模式简介、Agent vs Graph、create_agent、AgentState、content_blocks、部分类/函数迁移指南)

📅 2026/8/29 6:25:11
LangChain 之 【Agent 的简介】(ReAct模式简介、Agent vs Graph、create_agent、AgentState、content_blocks、部分类/函数迁移指南)
目录1. Agent1.1 ReAct 模式Agent 的“思考-行动-观察”循环1.2 Agent vs Graph1.3 何时用 Agent何时用 Graph1.4 Graph 作为 Agent 的工具2. LangChain v1.0 核心特性2.1 create_agentAgent 状态结构AgentState2.2 中间件Middleware2.3 基于 LangGraph 的开箱即用能力2.4 标准化消息内容块content_blocks3. LangChain v1.0 迁移指南4. 实战代码片段一个完整的智能天气 Agent1. AgentAgent智能体 是一个将大语言模型LLM与工具Tools相结合的系统它能够对任务进行推理自主决定使用哪些工具并迭代地朝着最终目标努力简单来说Agent LLM推理引擎 工具执行能力 控制循环自主决策一个 LLM Agent 在循环中运行工具以达成目标直到模型输出最终结果或达到迭代上限等在 LangChain 中Agent 是基于 LangGraph 构建的图式智能体——在 LangGraph 中一个 Graph 由节点和边组成其定义了 Agent 如何处理信息。Agent 在图中移动依次执行模型节点调用 LLM、工具节点执行工具或中间件等1.1 ReAct 模式Agent 的“思考-行动-观察”循环ReActReasoning Acting模式是 LangChain Agent 的基石。其循环如下用户输入 → Agent 解析意图 → 推理决策 → 调用工具 → 获取反馈 → 判断是否完成 ↙ ↘ 完成返回结果 未完成继续循环Reason推理LLM 分析当前状态决定下一步该做什么Act行动调用工具或生成最终答案Observe观察获取工具返回结果或环境反馈重复直到满足停止条件模型输出最终消息或达到迭代上限自我纠错能力当工具返回错误时Agent 会重新进入推理阶段调整参数后重试1.2 Agent vs Graph维度Agent智能体Graph流程图决策权LLM 自主规划与决策开发者预定义流程确定性行为不确定依赖模型推理路径确定可预测适用场景开放式问题、多步骤任务、需要动态调整固定业务流程如“录音→转写→总结→保存”典型例子通用问答助手、自动编码 Agent视频生成流水线、数据报表生成1.3 何时用 Agent何时用 Graph用户任务分析 │ ├─ 任务路径完全确定 ──是──→ 使用 Graph保证一致性和效率 │ ├─ 需要多轮对话、动态决策 ──是──→ 使用 Agent发挥 LLM 推理能力 │ └─ 有确定性子流程但整体不确定 │ └─→ Agent Graph 组合Agent 负责高層规划Graph 作为 Tool 执行固定步骤1.4 Graph 作为 Agent 的工具在实际企业应用中常将整个 Graph 封装为一个 Tool供 Agent 调用。例如用户说“生成上周销售周报”Agent 识别意图 → 调用“周报生成 Graph”拉取数据 → LLM 分析 → 图表渲染 → 输出整个过程对用户而言是一次对话但底层是 Graph 保障的稳定性2. LangChain v1.0 核心特性2.1 create_agentfrom langchain.agents import create_agent参数总览参数类型必填默认值说明modelstr或BaseChatModel是无语言模型支持字符串标识如openai:gpt-5.5或已初始化的模型实例toolsSequence[BaseTool | Callable | dict]否None工具列表支持tool装饰器函数、Pydantic 模型或字典system_promptstr或SystemMessage否None系统提示词定义 Agent 的角色和行为准则middlewareSequence[AgentMiddleware]否()中间件列表用于动态提示、摘要、护栏等高级定制response_formatResponseFormat或type或dict否None结构化输出配置指定最终输出的 Schemastate_schematype[AgentState]否None自定义 Agent 内部状态的结构context_schematype[ContextT]否None运行时上下文结构用于在调用时传入额外数据不持久化checkpointerCheckpointer否None检查点保存器实现对话持久化短期记忆/跨会话记忆storeBaseStore否None长期存储用于跨会话共享数据如用户偏好interrupt_beforelist[str]否None在指定节点之前暂停执行人机协同interrupt_afterlist[str]否None在指定节点之后暂停执行人机协同debugbool否False是否输出详细调试日志namestr否NoneAgent 名称在多 Agent 系统中作为子图节点标识cacheBaseCache否None缓存配置transformersSequence[TransformerFactory]否None流式传输转换器更简洁比 langgraph.prebuilt.create_react_agent 更直观基于标准循环“调用模型 → 模型选择并执行工具 → 无工具调用时结束”通过中间件定制动态提示、对话摘要、工具权限控制等全部通过中间件注入from dataclasses import dataclass from langchain.agents import create_agent from langchain.tools import tool from langgraph.checkpoint.memory import InMemorySaver from langgraph.store.memory import InMemoryStore tool def get_weather(city: str) - str: 获取指定城市天气 return f{city}阳光明媚 dataclass class WeatherResult: city: str description: str agent create_agent( modelopenai:gpt-5.5, tools[get_weather], system_prompt你是一位天气预报助手回答要简洁有趣。, response_formatWeatherResult, checkpointerInMemorySaver(), storeInMemoryStore(), nameweather_assistant ) # 第一次对话 config {configurable: {thread_id: user-123}} result agent.invoke( {messages: [{role: user, content: 上海天气如何}]}, configconfig ) print(result[structured_response]) # WeatherResult(city上海, description阳光明媚) # 第二次对话自动继承上下文 result agent.invoke( {messages: [{role: user, content: 那北京呢}]}, configconfig # 相同 thread_id )Agent 状态结构AgentState字段类型说明messageslist[AnyMessage]消息历史使用add_messagesreducer 自动合并jump_totools|model|end|None流程跳转控制临时structured_responseAny结构化输出结果不参与输入结构化输出会在 Agent 循环结束后额外调用一次 LLM来生成格式化结果2.2 中间件Middleware中间件让开发者能在模型调用前/后动态修改上下文通过可组合的抽象实现动态提示词根据对话状态动态调整提示对话摘要过长历史自动压缩选择性工具访问不同用户不同工具权限护栏Guardrails 敏感信息脱敏人机协同敏感操作需人工审批2.3 基于 LangGraph 的开箱即用能力由于 create_agent 构建于 LangGraph 之上你无需学习 LangGraph 即可享受持久化通过检查点checkpoint自动跨会话保存流式传输实时输出 token、工具调用、推理轨迹人机协同敏感操作前暂停等待审批时间旅行回退到任意历史状态探索不同路径2.4 标准化消息内容块content_blocks不同模型提供商的消息内容返回格式差异巨大。v1.0 引入统一抽象 content_blocks类型 (type)描述关键属性text标准的文本输出text(str): 文本内容annotations(list[Annotation]): 元数据标注列表如引用信息reasoning模型的推理过程或思维链reasoning(str): 推理内容tool_call模型发起的工具/函数调用请求name(str): 工具名称input(dict): 调用参数id(str): 调用唯一IDtool_result工具执行后返回的结果content(strorlist): 工具执行结果tool_use_id(str): 对应的tool_callIDimage图像内容支持多模态url(str): 图像URLmime_type(str): 图像MIME类型或data(str): Base64编码的图像数据audio音频内容属性与image块类似通过url或data引用video视频内容属性与image块类似通过url或data引用document文档内容如PDF、TXT等属性与image块类似通过url或data引用server_tool_use模型请求使用服务端内置工具如联网搜索name(str): 工具名称input(dict): 调用参数id(str): 调用唯一IDweb_search_tool_result服务端内置工具如联网搜索返回的结果content(list): 搜索结果列表tool_use_id(str): 对应的server_tool_useIDnon_standard暂未被映射到标准块的非标准或供应商特定数据value(dict): 包含所有非标准数据的字典for block in response.content_blocks: if block[type] reasoning: # 统一为 reasoning ... elif block[type] tool_call: ...目前支持 langchain-anthropic、langchain-openai、langchain-aws、langchain-google-genai、langchain-ollama3. LangChain v1.0 迁移指南以下接口从 langchain 或 langchain-core 直接导出不再散落各处模块关键类/函数用途langchain.agentscreate_agent创建标准 Agentlangchain.agentsAgentStateAgent 状态类型继承自 Graph 状态langchain.toolstool装饰器定义工具langchain.toolsToolRuntime运行时上下文用于访问 store/contextlangchain.chat_modelsinit_chat_model统一模型初始化langchain.embeddingsinit_embeddings统一嵌入模型初始化langchain.messages各种消息类型、content_blocks、trim_messages消息处理与标准化langgraph.checkpoint.memoryInMemorySaver内存检查点用于短期记忆langgraph.store.memoryInMemoryStore内存存储用于长期记忆迁移注意旧版链、检索器、索引接口等已移至 langchain-classic 包如需使用请 pip install langchain-classic 并修改导入路径更多内容参考迁移指南https://docs.langchain.com/oss/python/migrate/langchain-v14. 实战代码片段一个完整的智能天气 Agentfrom dataclasses import dataclass from langchain.agents import create_agent from langchain.chat_models import init_chat_model from langchain.tools import tool, ToolRuntime from langgraph.checkpoint.memory import InMemorySaver from langgraph.store.memory import InMemoryStore dataclass class Context: user_id: str tool def get_weather_for_location(city: str) - str: 获取指定城市天气 return f{city}总是阳光明媚 tool def get_user_location(runtime: ToolRuntime[Context]) - str: 从 store 获取用户位置 user_id runtime.context.user_id store runtime.store store.put((users,), user_id, {name: fname_{user_id}}) return 北京 if user_id 1 else 上海 model init_chat_model(gpt-5.6-luna, temperature0) checkpointer InMemorySaver() store InMemoryStore() agent create_agent( modelmodel, system_prompt你是一位天气预报专家擅长双关语。, tools[get_user_location, get_weather_for_location], context_schemaContext, checkpointercheckpointer, storestore ) config {configurable: {thread_id: 1}} response agent.invoke( {messages: [{role: user, content: 外面天气怎么样}]}, configconfig, contextContext(user_id1) ) print(response[messages][-1].content) # 最终回答thread_id 实现会话持久化第二次调用自动继承历史store 实现长期记忆跨线程存储用户信息context_schema 传递运行时参数