news 2026/8/29 6:24:53

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
LangChain 之 【Agent 的简介】(ReAct模式简介、Agent vs Graph、create_agent、AgentState、content_blocks、部分类/函数迁移指南)

目录

1. Agent

1.1 ReAct 模式:Agent 的“思考-行动-观察”循环

1.2 Agent vs Graph

1.3 何时用 Agent,何时用 Graph?

1.4 Graph 作为 Agent 的工具

2. LangChain v1.0 核心特性

2.1 create_agent

Agent 状态结构:AgentState

2.2 中间件(Middleware)

2.3 基于 LangGraph 的开箱即用能力

2.4 标准化消息内容块(content_blocks)

3. LangChain v1.0 迁移指南

4. 实战代码片段:一个完整的智能天气 Agent


1. Agent

Agent(智能体) 是一个将大语言模型(LLM)与工具(Tools)相结合的系统,它能够对任务进行推理,自主决定使用哪些工具,并迭代地朝着最终目标努力
简单来说:
Agent = LLM(推理引擎) + 工具(执行能力) + 控制循环(自主决策)
一个 LLM Agent 在循环中运行工具以达成目标,直到模型输出最终结果或达到迭代上限等

在 LangChain 中,Agent 是基于 LangGraph 构建的图式智能体——在 LangGraph 中,一个 Graph 由节点和边组成,其定义了 Agent 如何处理信息。Agent 在图中移动,依次执行模型节点(调用 LLM)、工具节点(执行工具)或中间件等

1.1 ReAct 模式:Agent 的“思考-行动-观察”循环

ReAct(Reasoning + 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_agent

from langchain.agents import create_agent
  • 参数总览
参数类型必填默认值说明
modelstrBaseChatModel语言模型,支持字符串标识(如"openai:gpt-5.5")或已初始化的模型实例
toolsSequence[BaseTool | Callable | dict]None工具列表,支持@tool装饰器函数、Pydantic 模型或字典
system_promptstrSystemMessageNone系统提示词,定义 Agent 的角色和行为准则
middlewareSequence[AgentMiddleware]()中间件列表,用于动态提示、摘要、护栏等高级定制
response_formatResponseFormattypedictNone结构化输出配置,指定最终输出的 Schema
state_schematype[AgentState]None自定义 Agent 内部状态的结构
context_schematype[ContextT]None运行时上下文结构,用于在调用时传入额外数据(不持久化
checkpointerCheckpointerNone检查点保存器,实现对话持久化(短期记忆/跨会话记忆)
storeBaseStoreNone长期存储,用于跨会话共享数据(如用户偏好)
interrupt_beforelist[str]None在指定节点之前暂停执行(人机协同)
interrupt_afterlist[str]None在指定节点之后暂停执行(人机协同)
debugboolFalse是否输出详细调试日志
namestrNoneAgent 名称,在多 Agent 系统中作为子图节点标识
cacheBaseCacheNone缓存配置
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( model="openai:gpt-5.5", tools=[get_weather], system_prompt="你是一位天气预报助手,回答要简洁有趣。", response_format=WeatherResult, checkpointer=InMemorySaver(), store=InMemoryStore(), name="weather_assistant" ) # 第一次对话 config = {"configurable": {"thread_id": "user-123"}} result = agent.invoke( {"messages": [{"role": "user", "content": "上海天气如何?"}]}, config=config ) print(result['structured_response']) # WeatherResult(city="上海", description="阳光明媚") # 第二次对话(自动继承上下文) result = agent.invoke( {"messages": [{"role": "user", "content": "那北京呢?"}]}, config=config # 相同 thread_id )
  • Agent 状态结构:AgentState

字段类型说明
messageslist[AnyMessage]消息历史,使用add_messagesreducer 自动合并
jump_to"tools"|"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): 调用唯一ID
tool_result工具执行后返回的结果content(strorlist): 工具执行结果
tool_use_id(str): 对应的tool_callID
image图像内容,支持多模态url(str): 图像URL
mime_type(str): 图像MIME类型
data(str): Base64编码的图像数据
audio音频内容属性与image块类似,通过urldata引用
video视频内容属性与image块类似,通过urldata引用
document文档内容(如PDF、TXT等)属性与image块类似,通过urldata引用
server_tool_use模型请求使用服务端内置工具(如联网搜索)name(str): 工具名称
input(dict): 调用参数
id(str): 调用唯一ID
web_search_tool_result服务端内置工具(如联网搜索)返回的结果content(list): 搜索结果列表
tool_use_id(str): 对应的server_tool_useID
non_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-ollama

3. LangChain v1.0 迁移指南

以下接口从 langchain 或 langchain-core 直接导出,不再散落各处

模块关键类/函数用途
langchain.agentscreate_agent创建标准 Agent
langchain.agentsAgentStateAgent 状态类型,继承自 Graph 状态
langchain.tools@tool装饰器定义工具
langchain.toolsToolRuntime运行时上下文,用于访问 store/context
langchain.chat_modelsinit_chat_model统一模型初始化
langchain.embeddingsinit_embeddings统一嵌入模型初始化
langchain.messages各种消息类型、content_blockstrim_messages消息处理与标准化
langgraph.checkpoint.memoryInMemorySaver内存检查点(用于短期记忆)
langgraph.store.memoryInMemoryStore内存存储(用于长期记忆)

迁移注意:旧版链、检索器、索引接口等已移至 langchain-classic 包,如需使用请 pip install langchain-classic 并修改导入路径

更多内容参考迁移指南:https://docs.langchain.com/oss/python/migrate/langchain-v1

4. 实战代码片段:一个完整的智能天气 Agent

from 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": f"name_{user_id}"}) return "北京" if user_id == "1" else "上海" model = init_chat_model("gpt-5.6-luna", temperature=0) checkpointer = InMemorySaver() store = InMemoryStore() agent = create_agent( model=model, system_prompt="你是一位天气预报专家,擅长双关语。", tools=[get_user_location, get_weather_for_location], context_schema=Context, checkpointer=checkpointer, store=store ) config = {"configurable": {"thread_id": "1"}} response = agent.invoke( {"messages": [{"role": "user", "content": "外面天气怎么样?"}]}, config=config, context=Context(user_id="1") ) print(response['messages'][-1].content) # 最终回答
  • thread_id 实现会话持久化(第二次调用自动继承历史)
  • store 实现长期记忆(跨线程存储用户信息)
  • context_schema 传递运行时参数
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/29 6:23:34

京东2016研发笔试编程题(二)深度解析:字符串、动规与贪心

京东2016研发工程师编程题(二)这套题,放在今天看仍然很有嚼头。我当年准备校招时,把这套题翻来覆去刷了三遍,后来帮学弟学妹做笔试题复盘,又把里面的典型题型重新梳理了一遍。这篇文章我会按当年笔试的常见…

作者头像 李华
网站建设 2026/8/29 6:22:30

线上夏令营全流程拆解:从工具选型到社群运营的实战指南

1. 项目概述:一次特殊的“线上”夏令营2020年的夏天,对很多人来说,是一个被重新定义的季节。当“夏令营”这个充满户外、集体与汗水气息的传统词汇,与“线上”、“云端”这些数字时代的标签碰撞在一起时,一种前所未有的…

作者头像 李华
网站建设 2026/8/29 6:21:03

文献综述还在“抄标题”和“排雷”?毕夏AI给你换个活法

毕夏AI官网 www.bixiaai.com 毕夏AI写作官网 www.bixiaai.com 毕夏官网 www.bixiaai.com 毕夏智能写作官网 www.bixiaai.com 各位好,我是老周,专门教论文写作的那个。 今天我们来聊一个特别有“欺骗性”的话题:文献综述。 为什么说有…

作者头像 李华
网站建设 2026/8/29 6:18:51

JavaScript对象创建模式:从构造器到工厂与单例的进阶实践

1. 从“new Object()”到设计模式:为什么我们需要对象创建模式?在JavaScript的世界里,对象是我们打交道最多的实体。从初学时的let obj {}或new Object(),到后来用构造函数function Person(name) { this.name name; }&#xff0…

作者头像 李华
网站建设 2026/8/29 6:17:28

AI替代人力后怎么办:从机器人税到人机协作系统设计

比尔盖茨又谈 AI 了。这次不是在聊模型参数、算力规模或又一家独角兽,而是在长文里正面讨论:当 AI 大规模替代人力之后,社会该怎么分配收益,人还剩下哪些不可替代的岗位。他提到的两个概念——机器人税和人类专属岗位,…

作者头像 李华