Skip to main content
Alpha 版本提示: 本文档涵盖的是 v1-alpha 版本。内容尚不完整,且可能随时变更。如需查阅最新稳定版本,请参阅 v0 版本的 LangChain Python 文档LangChain JavaScript 文档
以下包已发布 1.0 Alpha 版本:
  • langchain
  • langchain-core
  • langchain-anthropic
  • langchain-openai
在 Alpha 阶段将逐步扩展对更多包的支持。

新增功能

LangChain 1.0 引入了以下新功能:
  • 消息对象新增 .content_blocks 属性。该属性提供完全类型化的消息内容视图,并在各提供商之间标准化现代 LLM 功能,包括推理、引用、服务端工具调用等。新消息内容不涉及任何破坏性变更。详情请参阅消息内容文档
  • langchain 中新增了预构建的 langgraph 链和代理。langchain 包的接口范围已缩减,聚焦于流行和核心的抽象(例如 init_chat_modelinit_embeddings),以及由 langgraph 运行时支持的预构建链和代理。为保持向后兼容性,新增了 langchain-legacy 包。详情请参阅新的代理文档发布说明

破坏性变更

Python 3.9 将于 2025 年 10 月停止维护。因此,所有 LangChain 包现在均要求 Python 3.10 或更高版本。
新版 langchain 包缩减了接口范围,专注于 LangChain 组件的标准接口(如 init_chat_modelinit_embeddings),以及由 langgraph 运行时支持的预构建链和代理。此范围之外的现有功能(如索引 API 和 langchain-community 功能的导出)已迁移至 langchain-legacy 包。如需恢复之前的行为,请将 langchain 包安装更新为 langchain-legacy,并替换导入语句:之前:
from langchain import ...
之后:
from langchain_legacy import ...
聊天模型调用的返回类型签名已从 BaseMessage 修正为 AIMessage。实现 bind_tools 的自定义聊天模型应更新其返回签名,以避免类型检查器报错:之前:
Runnable[LanguageModelInput, BaseMessage]:
之后:
Runnable[LanguageModelInput, AIMessage]:
与 Responses API 交互时,langchain-openai 现在默认将响应项存储在消息的 content 中。此前需在实例化 ChatOpenAI 时指定 output_version="responses/v1" 才能启用此行为。此举旨在解决某些多轮对话场景中可能出现的 BadRequestError如需恢复之前的行为,请将 LC_OUTPUT_VERSION 环境变量设置为 v0,或在实例化 ChatOpenAI 时指定 output_version="v0"
os.environ["LC_OUTPUT_VERSION"] = "v0"

# 或

from langchain_openai import ChatOpenAI

llm = ChatOpenA(model="...", output_version="v0")
ChatAnthropic 中的 max_tokens 参数现在将默认为比之前默认值 1024 更高的新值。新默认值将根据所选模型而变化。
已弃用并计划在 1.0 中移除的方法、函数及其他对象已被删除。

弃用项

消息对象上的 .text() 方法应更新为去掉括号:
# 之前
text = response.text()  # 方法调用

# 之后
text = response.text    # 属性访问
现有使用方式(即 .text())仍可正常工作,但会发出警告。

预构建代理

langchain 发布版聚焦于缩减 LangChain 的接口范围,集中于流行和核心的抽象。

ReAct 代理迁移

create_react_agent 已从 langgraph.prebuilts 迁移至 langchain.agents,并进行了重大增强: 增强的结构化输出 create_agent 改进了将输出强制转换为结构化数据类型的能力:
from langchain.agents import create_agent
from langchain_core.messages import HumanMessage
from pydantic import BaseModel

class Weather(BaseModel):
    temperature: float
    condition: str

def weather_tool(city: str) -> str:
    """获取城市的天气。"""
    return f"{city} 阳光明媚,气温 70 度"

agent = create_agent(
    "openai:gpt-4o-mini",
    tools=[weather_tool],
    response_format=Weather
)
result = agent.invoke({"messages": [HumanMessage("旧金山的天气如何?")]})
print(repr(result["structured_response"]))
#> Weather(temperature=70.0, condition='sunny')
结构改进
  • 主循环集成:结构化输出现在在主循环中生成,无需额外的 LLM 调用
  • 工具/输出选择:模型可在调用工具、生成结构化输出或两者之间进行选择
  • 成本降低:消除了额外 LLM 调用带来的额外费用
高级配置 结构化输出生成的两种策略:
  1. 人工工具调用(大多数模型的默认策略)
    • LangChain 生成与响应格式模式匹配的工具
    • 模型调用这些工具,LangChain 将参数强制转换为所需格式
    • 通过 ToolStrategy 提示进行配置
  2. 提供商原生实现
    • 在可用时使用原生结构化输出支持
    • 通过 ProviderStrategy 提示进行配置
提示输出 不再通过 response_format 参数支持。

错误处理

结构化输出错误 通过 ToolStrategyhandle_errors 参数控制错误处理:
  • 解析错误:模型生成的数据与所需结构不匹配
  • 多个工具调用:模型为结构化输出模式生成 2 个或更多工具调用
工具调用错误 更新了工具失败的错误处理:
  • 调用失败:代理返回人工 ToolMessage,要求模型重试(保持不变)
  • 执行失败:代理现在默认抛出 ToolException 而非重试(防止无限循环)
通过 ToolNodehandle_tool_errors 参数配置行为。

破坏性变更

预绑定模型 为更好地支持结构化输出,create_agent 不再支持预绑定工具或配置的模型:
# 不再支持
model_with_tools = ChatOpenAI().bind_tools([some_tool])
agent = create_agent(model_with_tools, tools=[])

# 请改用
agent = create_agent("openai:gpt-4o-mini", tools=[some_tool])
如果未使用结构化输出,动态模型函数仍可返回预绑定模型。
导入变更
# 之前
from langgraph.prebuilts import create_agent, ToolNode, AgentState

# 之后
from langchain.agents import create_agent, ToolNode, AgentState

报告问题

请在 GitHub 上使用 'v1' 标签 报告在 1.0 中发现的任何问题。

参见