简化软件包
langchain 包命名空间在 v1 版本中已大幅精简,专注于为智能体提供核心构建块。精简后的包让核心功能更易于发现和使用。
命名空间
| 模块 | 可用内容 | 备注 |
|---|---|---|
langchain.agents | create_agent, AgentState | 核心智能体创建功能 |
langchain.messages | 消息类型, 内容块, trim_messages | 从 langchain-core 重新导出 |
langchain.tools | @tool, BaseTool, 注入辅助函数 | 从 langchain-core 重新导出 |
langchain.chat_models | init_chat_model, BaseChatModel | 统一模型初始化 |
langchain.embeddings | init_embeddings, Embeddings | 嵌入模型 |
langchain-classic
如果您之前使用了来自 langchain 包的以下任何内容,您需要安装 langchain-classic 并更新您的导入:
- 传统链(
LLMChain、ConversationChain等) - 检索器(例如
MultiQueryRetriever或之前langchain.retrievers模块中的任何内容) - 索引 API
- hub 模块(用于以编程方式管理提示词)
- 嵌入模块(例如
CacheBackedEmbeddings和社区嵌入) langchain-community重新导出- 其他已弃用功能
迁移到 create_agent
在 v1.0 之前,我们推荐使用 langgraph.prebuilt.create_react_agent 来构建智能体。
现在,我们推荐您使用 langchain.agents.create_agent 来构建智能体。
下表概述了从 create_react_agent 到 create_agent 的功能变化:
| 章节 | 简要说明 - 变更内容 |
|---|---|
| 导入路径 | 包从 langgraph.prebuilt 移动到 langchain.agents |
| 提示词 | 参数重命名为 [system_prompt](https://reference.langchain.com/python/langchain/agents/#langchain.agents.create_agent(system_prompt),动态提示词使用中间件 |
| 模型前钩子 | 由带有 before_model 方法的中间件替代 |
| 模型后钩子 | 由带有 after_model 方法的中间件替代 |
| 自定义状态 | 仅支持 TypedDict,可通过 state_schema 或中间件定义 |
| 模型 | 通过中间件动态选择,不支持预绑定模型 |
| 工具 | 工具错误处理移至带有 wrap_tool_call 的中间件 |
| 结构化输出 | 移除提示输出,使用 ToolStrategy/ProviderStrategy |
| 流式节点名称 | 节点名称从 "agent" 更改为 "model" |
| 运行时上下文 | 通过 context 参数进行依赖注入,而非 config["configurable"] |
| 命名空间 | 精简以专注于智能体构建块,旧代码移至 langchain-classic |
导入路径
智能体预构建的导入路径已从langgraph.prebuilt 更改为 langchain.agents。
函数名称已从 create_react_agent 更改为 create_agent:
提示词
静态提示重命名
prompt 参数已重命名为 system_prompt:
SystemMessage 转为字符串
如果使用 SystemMessage 对象在系统提示中,提取字符串内容:
动态提示词
动态提示是一种核心的上下文工程模式——它能根据当前的对话状态,调整你提供给模型的信息。为此,请使用@dynamic_prompt 装饰器:
预模型钩子
模型前钩子现已通过before_model 方法实现为中间件。这种新模式更具扩展性,您可以定义多个中间件在模型调用前运行,并在不同智能体间复用通用模式。
常见用例包括:
- 总结对话历史
- 精简消息
- 输入护栏,例如 PII 脱敏
模型后钩子
模型后钩子现已通过after_model 方法实现为中间件。
这种新模式更具扩展性——你可以定义多个中间件在模型调用后运行,从而在不同的智能体之间复用通用模式。
常见用例包括:
- 人在回路
- 输出护栏
自定义状态
自定义状态通过添加额外的字段来扩展默认的智能体状态。你可以通过两种方式定义自定义状态:- 通过
state_schema在create_agent上 - 最适用于在工具中使用的状态 - 通过中间件 - 最适用于由特定中间件钩子管理的状态,以及附加到该中间件的工具
通过中间件定义自定义状态优于通过
state_schema 在 create_agent 上定义,因为它允许您将状态扩展在概念上限定到相关的中间件和工具范围内。state_schema 为了向后兼容仍然支持 create_agent。通过 state_schema 定义状态
当您的自定义状态需要被工具访问时,使用 state_schema 参数:
通过中间件定义状态
中间件还可以通过设置state_schema 属性来定义自定义状态。
这有助于将状态扩展在概念上限定在相关的中间件和工具范围内。
状态类型限制
create_agent 仅支持 TypedDict 用于状态模式。Pydantic 模型和 dataclasses 不再支持。
langchain.agents.AgentState 而不是 BaseModel 或使用 dataclass 装饰。
如果需要执行验证,请在中间件钩子中处理。
模型
动态模型选择使您能够根据运行时上下文(例如,任务复杂性、成本约束或用户偏好)选择不同的模型。在langgraph-prebuilt v0.6 版本中发布的 create_react_agent 支持通过传递给 model 参数的可调用对象进行动态模型和工具选择。
在 v1 中,此功能已被移植到中间件接口。
动态模型选择
预绑定模型
为了更好地支持结构化输出,create_agent 不再接受预绑定了工具或配置的模型:
如果未使用结构化输出,动态模型函数可以返回预先绑定的模型。
工具
create_agent 的 [tools](https://reference.langchain.com/python/langchain/agents/#langchain.agents.create_agent(tools) 参数接受一个列表:
参数将不再接受 ToolNode 实例。
处理工具错误
您现在可以通过实现wrap_tool_call 方法的中间件来配置工具错误的处理。
结构化输出
节点变更
结构化输出过去通常在与主智能体分离的节点中生成。现在情况不再是这样。 我们在主循环中生成结构化输出,从而降低成本和延迟。工具和提供商策略
v1 版本中引入了两种新的结构化输出策略:ToolStrategy使用模拟的工具调用 来生成结构化输出ProviderStrategy使用提供商原生的结构化输出生成
提示输出已移除
提示输出 不再通过response_format 参数提供支持。与人工工具调用和提供商原生结构化输出等策略相比,提示输出并未被证明特别可靠。
流式节点名称重命名
当从智能体流式传输事件时,节点名称已从"agent" 更改为 "model",以更好地反映节点的用途。
运行时上下文
当你调用一个智能体时,通常需要传递两种类型的数据:- 随对话不断变化的动态状态(例如,消息历史)
- 在对话中保持不变的静态上下文(例如,用户元数据)
context 参数设置为 invoke 和 stream 来支持静态上下文。
为了向后兼容,旧的
config["configurable"] 模式仍然有效,但对于新应用程序或正在迁移到 v1 的应用程序,建议使用新的 context 参数。标准内容
在 v1 版本中,消息新增了与提供商无关的标准内容块。通过 @message.content_blocks[content_blocks] 访问它们,即可获得跨提供商的一致的、有类型的视图。现有的 message.content 字段对于字符串或提供商原生结构保持不变。
有什么变化
- 消息新增
content_blocks属性,用于规范化内容 - 标准化的块形状,相关文档见 消息
- 可选通过
LC_OUTPUT_VERSION=v1或output_version="v1"将标准块序列化为content
读取标准化内容
创建多模态消息
示例块形状
序列化标准内容
默认情况下,标准内容块不会被序列化到content 属性中。如果您需要访问 content 属性中的标准内容块(例如,在向客户端发送消息时),您可以选择将它们序列化到 content 中。
简化版包
langchain 包命名空间在 v1 版本中已大幅精简,以专注于智能体的核心构建模块。精简后的包让核心功能更易于发现和使用。
命名空间
| 模块 | 可用内容 | 备注 |
|---|---|---|
langchain.agents | create_agent, AgentState | 核心智能体创建功能 |
langchain.messages | 消息类型, content blocks, trim_messages | 从 langchain-core 重新导出 |
langchain.tools | @tool, BaseTool, 注入辅助工具 | 从 langchain-core 重新导出 |
langchain.chat_models | init_chat_model, BaseChatModel | 统一的模型初始化 |
langchain.embeddings | init_embeddings, Embeddings | 嵌入模型 |
langchain-classic
如果您之前从 langchain 包中使用了以下任何内容,您需要安装 langchain-classic 并更新您的导入:
- 遗留链 (
LLMChain,ConversationChain, 等) - 检索器 (例如
MultiQueryRetriever或来自上一个langchain.retrievers模块的任何内容) - 索引 API
- hub 模块 (用于以编程方式管理提示词)
- 嵌入模块 (例如
CacheBackedEmbeddings和社区嵌入) langchain-community的重新导出- 其他已弃用的功能
重大变更
不再支持 Python 3.9
所有 LangChain 包现在要求 Python 3.10 或更高版本。Python 3.9 将于 2025 年 10 月 生命周期结束。聊天模型更新后的返回类型
聊天模型调用的返回类型签名已从BaseMessage 修复为 AIMessage。实现 bind_tools 的自定义聊天模型应该更新其返回签名:
OpenAI Responses API 的默认消息格式
在与 Responses API 交互时,langchain-openai 现在默认将响应项存储在消息 content 中。要恢复之前的行为,请将 LC_OUTPUT_VERSION 环境变量设置为 v0,或在实例化 ChatOpenAI 时指定 output_version="v0"。
默认 max_tokens 在 langchain-anthropic 中
langchain-anthropic 中的 max_tokens 参数现在默认为基于所选模型的更高值,而不是之前的默认值 1024。如果您依赖于旧的默认值,请显式设置 max_tokens=1024。
遗留代码已移动到 langchain-classic
标准接口和智能体核心重点之外的现有功能已被迁移到 langchain-classic 包。请参阅 简化的命名空间 部分,了解核心 langchain 包中可用的功能以及已迁移到 langchain-classic 的内容。
已弃用 API 的移除
已被弃用并计划在 1.0 版本中移除的方法、函数和其他对象已被删除。请查看先前版本中的 弃用通知 以获取替代的 API。.text() 现在是属性
在消息对象上使用 .text() 方法时应去掉括号:
.text())将继续正常工作,但现在会发出警告。