LangChain1.0速通指南(一)——LangChain1.0核心升级

2025-12-22 12:51:53
文章摘要
LangChain 1.0 核心升级包括: create_agent、标准化接口及精简包结构。智能体开发从“原型玩具”迈向“生产级框架”,create_agent 通过中间件和结构化输出提升开发上限

前言

近期笔者收到了不少读者的反馈,提到 LangChain 已经升级到了 1.0 版本,而之前实战教程使用的仍是 0.x 系列,大家希望笔者能结合最新、更稳定的 LangChain 1.0 来编写项目。作为全网最宠粉的大模型博主,粉丝的要求自然要优先满足。因此,笔者决定调整内容规划,先用一周左右的时间,带大家快速掌握 LangChain 1.0 的核心升级内容。从本期开始,笔者将推出 「LangChain 1.0 速通指南」 系列,带大家系统梳理新版本的重要变化与关键 API。之后也会继续沿用 1.0 版本,完成多模态知识库系统的开发实战。本期我们将重点关注 LangChain 1.0 中的核心升级点,后续几讲则会逐步展开如 create_agent 等关键 API 的使用教学。

一、LangChain与LangGraph的定位与演进:1.0时代全新启航

LangChain 与 LangGraph 作为当前性能最强、使用最广泛的 AI Agent 框架,一直以来也因其频繁的版本迭代受到关注。每次升级往往伴随着大量 API 重构与依赖复杂化,给开发者带来不少适配困扰。随着社区的持续反馈与版本的不断优化,2025年10月23日,LangChain 团队正式发布了 LangChain 1.0 与 LangGraph 1.0,标志着这两个框架进入首个正式稳定版本。同时上线的还有全新设计的官方文档站点(https://docs.langchain.com/oss/python/langchain/overview),以更通俗易懂的示例帮助开发者理解框架使用方法。

很多读者在问:在 1.0 时代,到底该学习 LangChain 还是 LangGraph?笔者的建议是:两者都要掌握。因为 LangChain 1.0 与旧版已有本质不同。回顾笔者文章深入浅出LangChain AI Agent智能体开发教程(三)—LangChain核心概念“链”中学习的链式调用语法,以及在深入浅出LangChain AI Agent智能体开发教程(六)—两行代码LangChain Agent API快速搭建智能体 中使用的 create_tool_calling_agent 等快速构建智能体的方法,这些在 1.0 中已基本不再需要。如今,仅需一个 create_agent API 即可覆盖大多数场景。更重要的是,LangChain 1.0 已不再作为 LangGraph 的基座,反而其智能体构建于 LangGraph 之上,从而原生支持持久化执行、实时流式响应、人工介入机制与状态持久存储等高级功能。

可以这样理解:现在的 LangChain 相当于笔者在深入浅出LangGraph AI Agent智能体开发教程(二)—LangGraph预构建图API快速创建Agent中介绍的 create_react_agent 这类预构建图 API 的高级封装,而以往复杂的 LCEL 语法则被整合进 LangGraph 底层,作为其核心支持。因此,在 1.0 时代,官方建议如下框架选型策略:

  1. 如需快速构建智能体与自主应用程序,推荐使用 LangChain
  2. 若需结合确定性流程与智能工作流、实现深度定制、精确控制响应延迟,则应使用底层编排框架 LangGraph

新版本LangChain的安装方式也非常简单,只需在 Python 环境中执行以下命令即可:


pip install -U langchain


二、LangChain1.0三大核心升级

LangChain1.0是一个专注于智能体构建、可直接用于生产环境的基础框架。为提升开发体验,LangChain官方围绕以下三大核心方向对框架进行了重构与精简:

create_agent

作为新一代智能体构建标准,取代原有的 langgraph.prebuilt.create_react_agent

标准化内容块

引入 content_blocks 属性,统一不同服务商现代大语言模型功能的访问接口。

包结构精简

优化依赖包命名,聚焦智能体核心构建模块,旧版功能迁移至 langchain-classic

接下来笔者就带大家逐一解析这些升级内容的关键知识点:

2.1 create_agent

2.1.1 基本使用

create_agent 是 LangChain 1.0 中构建智能体的标准方式。与笔者文章深入浅出LangGraph AI Agent智能体开发教程(二)—LangGraph预构建图API快速创建Agent中介绍的langgraph.prebuilt.create_react_agent类似,但它提供了更简洁的接口,同时通过中间件机制实现了更强的定制能力(中间件机制我们接下来会讲解)。

在底层实现上,create_agent 基于代理循环模式(ReACT)构建图——通过传递给大模型提示词和可执行工具列表,让大模型自行选择工具并自主决定调用工具的方式(串行、并行等),并在获取足够信息后由大模型自行结束流程。


from langchain.agents import create_agent

agent = create_agent(
model="claude-sonnet-4-5-20250929",
tools=[search_web, analyze_data, send_email],
system_prompt="You are a helpful research assistant."
)

result = agent.invoke({
"messages": [
{"role": "user", "content": "Research AI safety trends"}
]
})

2.1.2 中间件机制

中间件机制是create_agent api的核心特性,智能体在执行过程中会经历多个关键时机,LangChain 在这些节点为开发者提供了高度定制的入口,可用于实现动态提示词控制、对话历史摘要、选择性工具调用、状态管理及安全护栏等功能,大幅提升了智能体的功能上限。

钩子函数

触发时机

应用场景

before_agent

在调用代理之前

加载记忆数据、验证输入

before_model

在每次大模型调用之前

更新提示词、精简消息历史

wrap_model_call

围绕每次大模型调用(可拦截)

拦截并修改请求/响应

wrap_tool_call

围绕每次工具调用(可拦截)

拦截并修改工具执行过程

after_model

在每次大模型返回响应之后

验证输出内容、应用安全护栏

after_agent

在代理完成运行之后

保存结果、执行清理操作

预置中间件

LangChain为常见场景提供了以下预置中间件:

  1. PIIMiddleware:在发送至模型前自动屏蔽敏感信息
  2. SummarizationMiddleware:当对话历史过长时自动进行内容浓缩
  3. HumanInTheLoopMiddleware:敏感工具调用需经人工审批

示例代码如下:


from langchain.agents import create_agent
from langchain.agents.middleware import (
PIIMiddleware,
SummarizationMiddleware,
HumanInTheLoopMiddleware
)


agent = create_agent(
model="claude-sonnet-4-5-20250929",
tools=[read_email, send_email],
middleware=[
PIIMiddleware("email", strategy="redact", apply_to_input=True),
PIIMiddleware(
"phone_number",
detector=(
r"(?:\+?\d{1,3}[\s.-]?)?"
r"(?:\(?\d{2,4}\)?[\s.-]?)?"
r"\d{3,4}[\s.-]?\d{4}"
),
strategy="block"
),
SummarizationMiddleware(
model="claude-sonnet-4-5-20250929",
max_tokens_before_summary=500
),
HumanInTheLoopMiddleware(
interrupt_on={
"send_email": {
"allowed_decisions": ["approve", "edit", "reject"]
}
}
),
]
)


自定义中间件

开发者也可基于智能体执行过程中暴露的钩子函数构建定制化中间件


from dataclasses import dataclass
from typing import Callable

from langchain_openai import ChatOpenAI

from langchain.agents.middleware import (
AgentMiddleware,
ModelRequest
)
from langchain.agents.middleware.types import ModelResponse

@dataclass
class Context:
user_expertise: str = "beginner"

class ExpertiseBasedToolMiddleware(AgentMiddleware):
def wrap_model_call(
self,
request: ModelRequest,
handler: Callable[[ModelRequest], ModelResponse]
) -> ModelResponse:
user_level = request.runtime.context.user_expertise

if user_level == "expert":
# More powerful model
model = ChatOpenAI(model="gpt-5")
tools = [advanced_search, data_analysis]
else:
# Less powerful model
model = ChatOpenAI(model="gpt-5-nano")
tools = [simple_search, basic_calculator]

request.model = model
request.tools = tools
return handler(request)

agent = create_agent(
model="claude-sonnet-4-5-20250929",
tools=[
simple_search,
advanced_search,
basic_calculator,
data_analysis
],
middleware=[ExpertiseBasedToolMiddleware()],
context_schema=Context
)


2.1.3 结构化输出

还记得笔者在文章 深入浅出LangChain AI Agent智能体开发教程(三)—LangChain核心概念“链”中讲解的结构化解析器吗?旧版本的LangChain包含了包括BooleanOutputParser,DatetimeOutputParser, StructureOutputParser等多个结构化解析器的使用,使用流程较为复杂。在LangChain1.0中,create_agent 在结构化输出生成方面实现了显著优化:

  1. 主循环集成和成本优化
  2. 结构化输出现已在主循环中直接生成,无需额外的大模型调用,有效降低运算成本。
  3. 灵活的输出策略
  4. 模型可根据需求选择调用工具或根据自定义数据结构直接生成结构化输出。

简单来说开发者只需要使用pydantic定义数据模型,并配合相应的结构化输出策略即可快速实现指定格式输出的功能。示例代码如下:


from langchain.agents import create_agent
from langchain.agents.structured_output import ToolStrategy
from pydantic import BaseModel


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

def weather_tool(city: str) -> str:
"""Get the weather for a city."""
return f"it's sunny and 70 degrees in {city}"

agent = create_agent(
"gpt-4o-mini",
tools=[weather_tool],
response_format=ToolStrategy(Weather)
)

result = agent.invoke({
"messages": [{"role": "user", "content": "What's the weather in SF?"}]
})

print(repr(result["structured_response"]))
# 返回的结果是 `Weather(temperature=70.0, condition='sunny')`


2.2 标准化内容块

标准化内容块是 LangChain 的核心设计之一,旨在将不同厂商的接口统一为标准化表示,使开发者能够跨提供商访问推理过程、引用标注、内置工具(如网络搜索、代码解释器等)功能,无需关注底层差异。 例如在消息输出层面,不同模型对思考过程的标记方式各不相同(如 thinkreason 标签)。以往需要通过 langchain-anthropiclangchain-openai 等适配器分别处理,而现在 LangChain 1.0 的 content_blocks 功能将模型推理消息统一标识为 type=="reasoning",便于用户访问。示例代码如下:


from langchain_anthropic import ChatAnthropic

model = ChatAnthropic(model="claude-sonnet-4-5-20250929")
response = model.invoke("What's the capital of France?")

# Unified access to content blocks
for block in response.content_blocks:
if block["type"] == "reasoning":
print(f"Model reasoning: {block['reasoning']}")
elif block["type"] == "text":
print(f"Response: {block['text']}")
elif block["type"] == "tool_call":
print(f"Tool call: {block['name']}({block['args']})")


输入层面也实现了标准化。以往向多模态大模型传递图片消息时,不同厂商的输入格式各异:

  1. OpenAI
  2. {"type": "image_url", "image_url": {...}}
  3. Anthropic
  4. {"type": "image", "source": {...}}
  5. Google
  6. {"type": "inline_data", "inline_data": {...}}

现在通过 content_blocks,开发者可统一使用 type:image 传递消息,示例如下:

from langchain_core.messages import HumanMessage

online_image_url = "https://dashscope.oss-cn-beijing.aliyuncs.com/images/dog_and_girl.jpeg"

message = HumanMessage(
content=[
{
"type": "text",
"text": "请分析这张在线图片"
},
{
"type": "image",
"image_url": {"url": online_image_url}
}
]
)

agent = create_agent(
"gpt-4o-mini",
tools=[weather_tool],
response_format=ToolStrategy(Weather)
)

response = model.invoke([message])
print("模型回复:", response.content)

2.3 包结构全面精简

LangChain/LangGraph让开发者最头疼的一点绝对是的依赖包关系,根本记不住呀!LangChain 1.0 对 langchain 包的命名空间进行了大幅精简,聚焦于智能体开发的核心构建模块,形成了清晰实用的功能体系:

模块

核心内容

说明

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

Embeddings

, init_embeddings

嵌入模型管理

这么看是不是顺眼多了,这些依赖大多从 langchain-core 重新导出,为开发者提供了专注而统一的智能体开发接口,示例代码如下:

# 智能体构建
from langchain.agents import create_agent

# 消息与内容处理
from langchain.messages import AIMessage, HumanMessage

# 工具功能
from langchain.tools import tool

# 模型初始化
from langchain.chat_models import init_chat_model
from langchain.embeddings import init_embeddings

当然为保证向后兼容,langchain也将旧版功能整体迁移至 langchain-classic 模块。同时也为大家提供了完整的迁移指南(https://docs.langchain.com/oss/python/migrate/langchain-v1), 大家想要将旧项目迁移到最新1.0版本LangChain的赶紧依照迁移指南行动起来吧~

以上就是笔者今天要分享的全部内容~

三、总结

本篇分享了 LangChain 1.0 的三大核心升级:全新智能体构建 API create_agent、标准化内容块接口和精简的包结构。LangChain进入1.0时代标志着智能体开发已经从混沌走向只需——从“原型玩具”走向了“生产级框架”,相信未来智能体开发标准会越来越统一,智能体开发会越来越简单,让我们早日期待智能体大爆发年的到来!从上面笔者的分享中大家也能感受到LangChain1.0核心特性中,create_agent 作为新一代智能体构建标准,通过中间件机制和内置结构化输出能力,显著提升了开发效率和功能上限。下期将围绕该 API 推出详细实战教程,带大家掌握LangChain1.0 智能体开发的核心技能。



声明:该内容由作者自行发布,观点内容仅供参考,不代表平台立场;如有侵权,请联系平台删除。
标签:
大模型
自然语言处理(NLP)
具身智能
开发平台与工具