LangChain v1 重大更新讲解⚠⚠⚠

作者:吴佳浩日期:2025/11/21

LangChain v1 重大更新讲解

为什么没有先发布demo教学而是先发布一个什么重大更新

因为langchain更新了,更新还挺多的所以建议大家还是从新版本开始学习

作者:吴佳浩

最后更新:2025-11-22

适用版本:LangChain v1.0+

目录


0. 环境准备

在开始之前,请确保 Python 版本 ≥ 3.9,并安装以下核心包:

1# 安装 v1 核心包、经典兼容包和图运行时
2pip install -U langchain langchain-classic langgraph
3
4# 安装适配的模型提供商包 (以 OpenAI 为例)
5pip install -U langchain-openai
6

一、LangChain v1 为什么是一次“大版本革命”?

LangChain v1 不再仅仅是一个“LLM 调用工具箱”,而是正式转向构建生产级 Agent 系统的工程框架

核心变化包括:

  1. create_agent:正式成为 Agent 的标准构建方式(底层基于 LangGraph)。
  2. Middleware (中间件):允许在任意阶段(模型调用前、工具执行时、输出后)拦截并修改逻辑。
  3. content_blocks:所有模型输出(推理/文本/工具调用)统一为标准格式,不再依赖正则解析。
  4. 结构化输出:Pydantic Schema 成为一等公民,极大提升稳定性。
  5. 命名空间拆分:旧 API(如 Chains)全部迁入 langchain-classic,主包只保留 Agent 核心。

二、v0.1 → v1.0:差异对照表(核心必读)

这是理解 v1 最重要的一张表,展示了从“脚本思维”到“工程思维”的转变。

项目LangChain v0.x (旧版)LangChain v1.0 (新版)核心差异
中心思想Chains (链式调用)Agents (智能体)从线性执行转向循环图执行 (Graph)
构建入口initialize_agentcreate_agent统一的新标准接口
底层引擎AgentExecutor (硬编码循环)LangGraph支持持久化、流式、分支、循环的图运行时
流式能力部分支持 (Token级)全链路流式支持 Token、中间步骤、推理过程的实时流
扩展机制无 (需修改源码或Prompt)Middleware完整的生命周期钩子 (Hooks)
工具定义Tool + funcTool + Pydantic Schema类型更安全,参数定义更清晰
结构化输出JSON Parser + RegexStructured Output直接绑定 Pydantic 类,由模型底层保证格式
输出解析纯文本 + 正则匹配content_blocks标准化对象 (推理块、文本块、工具块)
包管理langchain.*langchain-classic旧功能移至 classic 包,保持主包轻量

三、LangChain v1 架构总览

💡 核心提示:LangChain v1 的底层引擎实际上是 LangGraphcreate_agent 本质上是为你预构建了一个标准的 LangGraph 图。

1flowchart TD
2    subgraph AgentRuntime ["LangGraph 运行时"]
3        direction TB
4        A["用户输入 (Messages)"] --> B[" 模型推理 (LLM)"]
5        B --> C{"决策节点"}
6        C -->|需要工具| D[" 工具执行 (Tool Execution)"]
7        D --> E[" 工具结果反馈"]
8        E --> B
9        C -->|无需工具/结束| F[" 生成最终回答"]
10    end
11    
12    style A fill:#e1f5fe,stroke:#01579b
13    style B fill:#fff9c4,stroke:#fbc02d
14    style D fill:#e8f5e9,stroke:#2e7d32
15

四、create_agent:全新的 Agent 创建方式

为什么废弃 initialize_agent?

因为 v1 统一使用图架构(Graph Architecture)。所有的 Agent 本质上都是:推理 → 工具 → 再推理 的循环。create_agent 是这个标准循环的工厂函数。

基本用法:

1from langchain.agents import create_agent
2from langchain_openai import ChatOpenAI
3
4# 1. 定义模型
5model = ChatOpenAI(model="gpt-4o")
6
7# 2. 创建 Agent
8agent = create_agent(
9    model=model,
10    tools=[search_tool, calculator_tool],
11    system_prompt="你是一个乐于助人的金融分析师。"
12)
13
14# 3. 运行 (Invoke)
15result = agent.invoke({"messages": [{"role": "user", "content": "分析 AAPL 股价"}]})
16

五、Middleware:核心扩展机制(洋葱模型)

中间件是 v1 最强大的功能,允许你在 Agent 生命周期的任意节点插入逻辑(如鉴权、日志、路由)。

生命周期时序图:

1sequenceDiagram
2    participant User
3    participant MW as Middleware (中间件层)
4    participant Agent as Agent Runtime
5    participant Model as LLM
6
7    User->>Agent: invoke(input)
8    Agent->>MW: 1. before_agent_start
9    MW-->>Agent: (清洗后的输入)
10
11    loop 思考与执行循环
12        Agent->>MW: 2. before_model
13        Note right of MW: 动态修改 Prompt / 路由模型
14        
15        rect rgb(240,240,240)
16            MW->>Model: 3. wrap_model_call
17            Model-->>MW: 返回原始结果
18        end
19        
20        MW-->>Agent: 4. after_model (校验输出)
21
22        opt 工具调用
23            Agent->>MW: 5. wrap_tool_call
24            Note right of MW: 敏感操作审批 / 审计
25            MW-->>Agent: 工具结果
26        end
27    end
28
29    Agent->>MW: 6. after_agent
30    MW-->>User: 最终响应
31

六、content_blocks:跨模型统一输出

解决“不同模型返回格式不同”的痛点。

模型输出现在包含统一的 .content_blocks 属性:

  • reasoning: 模型的思考过程(如 Chain of Thought)。
  • tool_call: 结构化的工具调用请求。
  • text: 最终回复文本。

七、结构化输出(Structured Output)

v1 推荐使用 Pydantic Schema 来强制模型输出特定格式,而不是在 Prompt 里写“请返回 JSON”。

三种策略:

  1. SchemaBasedStructurer (推荐):直接传入 Pydantic 类。
  2. ToolStrategy:利用 Tool Calling 机制输出结构。
  3. ProviderStrategy:利用模型原生 JSON Mode(如 OpenAI JSON Object)。

八、命名空间重构 + langchain-classic

为了给 Agent 让路,旧的“链式”组件被移入 classic 包。

迁移对照:

组件旧引入方式v1 新引入方式
Memoryfrom langchain.memory import ...from langchain_classic.memory import ...
Chainsfrom langchain.chains import ...from langchain_classic.chains import ...
Retrieversfrom langchain.retrievers import ...from langchain_classic.retrievers import ...

🛠 九、v0 → v1 迁移指南(实战版)

1. ConversationChain → create_agent

  • 旧 (v0)
1from langchain.chains import ConversationChain  
2chain = ConversationChain(llm=llm)  
3chain.run("Hi")  
  • 新 (v1)
1from langchain.agents import create_agent  
2# create_agent 自带记忆管理 (通过 LangGraph checkpoint)  
3agent = create_agent(model=llm, tools=[])  
4agent.invoke({"messages": [...]})  

2. LLMChain → model.invoke

  • 旧 (v0)
1chain = LLMChain(prompt=prompt, llm=llm)  
2chain.run(variable="value")  
  • 新 (v1)
1# 直接使用 LCEL (LangChain Expression Language)  
2chain = prompt | llm  
3chain.invoke({"variable": "value"})  

3. Tool 定义方式

  • 旧 (v0):依赖 func 和文档字符串解析。
  • 新 (v1):强烈建议使用 @tool 装饰器并配合 Pydantic 类型的参数注解,或者使用 create_tool(schema=MySchema)

十、推荐的生产级项目结构图

在 v1 时代,推荐采用分层架构来管理 Agent 项目:

1graph TD
2  Root[" my_agent_project/"] --> A[" app/"]
3  
4  A --> B[" agent.py <br/> (create_agent 组装入口)"]
5  
6  A --> C["middleware/ <br/> (中间件层)"]
7  C --> C1[" auth_middleware.py"]
8  C --> C2[" risk_control.py"]
9  
10  A --> D[" schemas/ <br/> (数据结构)"]
11  D --> D1[" user_context.py"]
12  D --> D2[" output_schema.py"]
13  
14  A --> E[" tools/ <br/> (工具集)"]
15  E --> E1[" search_tool.py"]
16  E --> E2[" db_tool.py"]
17  
18  A --> F[" main.py <br/> (FastAPI/Streamlit 入口)"]
19

十一、真实企业级案例:多步骤任务 Agent

场景:自动代码修复 Agent。

流程:写代码 → 运行测试 → 失败则分析日志 → 修复代码 → 循环直至成功。

1flowchart TD
2    Start(("开始")) --> Gen["生成初版代码"]
3    Gen --> Run["🔧 工具: 运行代码/测试"]
4    Run --> Check{"测试通过?"}
5    
6    Check -->|失败| Debug[" LLM: 分析错误日志"]
7    Debug --> Gen
8    
9    Check -->|成功| Output["输出最终代码"]
10    Output --> End(("结束"))
11

这在 v1 中通过 createagent 天然支持,因为底层 Graph 支持循环,且可以通过中间件记录每次尝试的详细日志。


十二、可运行综合示例代码

这是一个包含了 中间件 (Middleware)结构化输出 的完整 v1 示例。

1import asyncio
2from typing import Any, Dict
3from pydantic import BaseModel, Field
4
5from langchain.agents import create_agent
6from langchain_openai import ChatOpenAI
7from langchain.tools import tool
8from langchain.agents.middleware import AgentMiddleware, ModelRequest, ModelResponse
9
10# 1. 定义工具
11@tool
12def get_weather(city: str) -> str:
13    """获取指定城市的天气信息"""
14    # 模拟 API 返回
15    return f"{city} 天气晴朗, 25°C"
16
17# 2. 定义结构化输出 Schema
18class WeatherReport(BaseModel):
19    city: str = Field(description="城市名称")
20    temperature: float = Field(description="温度数值")
21    summary: str = Field(description="一句话天气总结")
22
23# 3. 定义自定义中间件 (示例:自动添加礼貌用语)
24class PolitenessMiddleware(AgentMiddleware):
25    def wrap_model_call(self, request: ModelRequest, handler) -> ModelResponse:
26        # 在发送给模型前,修改 System Prompt
27        print("🕵️ Middleware: 正在注入礼貌指令...")
28        if request.messages:
29            last_msg = request.messages[-1]
30            if last_msg.role == "user":
31                last_msg.content += " (请用非常礼貌的语气回答)"
32        return handler(request)
33
34# 4. 构建 Agent
35async def main():
36    agent = create_agent(
37        model=ChatOpenAI(model="gpt-4o-mini"),
38        tools=[get_weather],
39        middleware=[PolitenessMiddleware()],
40        # 强制结构化输出 (v1 特性)
41        # response_format=ToolStrategy(WeatherReport) # 若需强制结构化可开启此行
42    )
43
44    print("🚀 Agent 启动...")
45    result = await agent.ainvoke({
46        "messages": [{"role": "user", "content": "帮我查一下北京的天气"}]
47    })
48
49    # v1  result 包含完整的执行状态
50    print("\n💬 最终回复:")
51    print(result["messages"][-1].content)
52
53if __name__ == "__main__":
54    asyncio.run(main())
55

十三、总结

LangChain v1 标志着我们从 “玩票性质的 Chain” 走向了 “工程化的 Agent”

  • 如果你需要构建简单的问答机器人,LangChain v1 提供了更统一的接口。
  • 如果你需要构建复杂的、多步推理的、具有自我纠错能力的企业级智能体,LangChain v1 (配合 LangGraph) 是目前 Python 生态中最佳的选择。

下一步建议: 安装 langchain-classic 确保旧代码运行,同时在新模块中开始尝试使用 create_agent。 慎重更新老项目。。。。。。崩了。。。别赖我。。


LangChain v1 重大更新讲解⚠⚠⚠》 是转载文章,点击查看原文


相关推荐


2 种方法!用 n8n 自动发公众号
麦麦麦造2025/11/19

大家好,我是 MAI麦造 前段时间有朋友找我咨询 ==n8n 中如何自动发公众号的问题==,刚好发现了一些新手可能会遇到的坑,所以这里分享一下! [!Note] 我用了两种方法来实现,分别是: 自己手动配置 http 节点,实现公众号接口。 使用社区节点 各有自己适合的场景,所以根据自己的需求来选择即可。 不过都需要用到公众号的官方接口,所以先需要在公众号后台进行一下配置! 公众号后台配置 1. 获取 开发者 ID 和 开发者密码 通过设置与开发——开发接口管理——账号开发信息获取


某电商大厂技术面试场景解析
360_go_php2025/11/19

​ 在某电商大厂的技术面试中,候选人通常会面临一系列关于分布式系统、性能优化、数据一致性等问题。以下是一些常见的面试问题和解答,帮助你为面试做好准备。 1. 如果我的服务器IP地址变了,客户端如何感知到呢?​编辑 当服务器的IP地址发生变化时,客户端通常无法直接感知到变化,除非有特定的机制来解决这个问题。常见的解决方案包括: DNS(域名系统):通过DNS解析来动态更新服务器的IP地址。客户端会定期请求DNS,以获取最新的服务器IP。 负载均衡器:客户端通过负载均衡器进行访问,负载均衡器会维


STM32通信接口----USART
雾岛听风眠2025/11/17

STM32芯片里面集成了很多功能模块,如定时器计数、PWM输出、AD采集等,这些都是芯片内部的电路,这些电路的配置寄存器、数据寄存器斗殴在芯片里面,操作这些寄存器直接读写即可。但也有一些功能是STM32内部没有的,如蓝牙无线遥控功能、陀螺仪加速度计测量姿态的功能,只能外挂芯片来完成,外挂的芯片,数据都在STM32外面,STM32若想获取这些数据,则需在两个设备之间连接上一根或多跟通信线,通过通信线路发送或接收数据,完成数据交换,从而实现控制外挂模块和读取外挂模块数据的目的。 全双工:通信双方能


我开发了一款关于病历管理的app:安康记
叶子的技术碎碎念2025/11/16

上线了!上线了!基于Vibe Coding我终于也能独立开发出一款属于自己的app-安康记,目前终于成功上架App Store啦。 独立开发app这个事情我很早之前就有点念头,但学习Swift过程还挺痛苦的,总觉的各种语法糖很膈应,导致进度缓慢,后面就一直搁置了。ChatGPT出来之后也尝试了一点,但还是觉得当时的AI能力不够,并且纯靠聊天还是不太行,自从Cursor、Windsurf、CC、Codex这一类AI开发工具出来之后,Vibe Coding的概念也随之火热,我想也是时候重启自己的开发


Python 的内置函数 locals
IMPYLH2025/11/15

Python 内建函数列表 > Python 的内置函数 locals Python 的内置函数 locals() 是一个非常有用的工具函数,它返回一个字典,包含当前局部命名空间中的所有变量名及其对应的值。这个字典反映了函数或代码块中当前可访问的所有局部变量。 def locals(): ''' 返回一个代表当前局部符号表的映射对象 :return: 当前局部符号表的映射对象 ''' 功能详解: 返回内容:locals() 返回的字典包含当前作用域中


Python编程实战 - Python实用工具与库 - 文件批量处理脚本
程序员爱钓鱼2025/11/14

在实际开发、数据整理或办公自动化中,我们经常需要一次性处理大量文件,例如: 批量重命名文件 批量复制/移动文件 批量压缩文件 批量格式转换 批量读取与写入文本内容 Python 的标准库中,os、shutil、glob 等模块可以轻松构建各种文件批处理脚本,是自动化办公与数据清洗的利器。 本章将从常见场景出发,通过示例脚本帮助你快速掌握文件批量处理能力。 一、基础库介绍 1. os 模块 提供文件路径、文件夹、新建/删除目录等操作。 常用方法: os.listdir() os.rena


Arya - 功能强大的在线 Markdown 编辑器
修己xj2025/11/12

在当今信息爆炸的时代,Markdown 已成为写作、文档编写和内容创作的必备工具。今天我要向大家推荐一款功能强大、界面优美的在线 Markdown 编辑器——Arya(二丫)。 ScreenShot_2025-11-12_195419_427.png 项目简介 Arya 是一款基于 Vue2 和 Vditor 构建的现代化在线 Markdown 编辑器。它不仅具备了传统 Markdown 编辑器的所有基础功能,还集成了众多高级特性,让 Markdown 写作变得更加高效和愉悦。 该项目在git


Skip Fuse现在对独立开发者免费! -- 肘子的 Swift 周报 #0110
东坡肘子2025/11/11

📮 想持续关注 Swift 技术前沿? 每周一期《肘子的 Swift 周报》,为你精选本周最值得关注的 Swift、SwiftUI 技术文章、开源项目和社区动态。 📬 在 weekly.fatbobman.com 免费订阅 💬 加入 Discord 与中文 Swift 开发者深入交流 📚 访问 fatbobman.com 查看数百篇深度原创教程  一起构建更好的 Swift 应用!🚀 Skip Fuse现在对独立开发者免费! 在 Swift 社区发布官方 Android 版 SD


Vue SSR 深度解析:ssrProcessTeleport 的源码机制与实现原理
excel2025/11/9

在 Vue 3 的服务端渲染(SSR)编译阶段中,ssrProcessTeleport 是一个二次编译(second-pass)阶段的代码生成转换函数,用于处理 <teleport> 组件的服务端输出逻辑。 本文将深入剖析其设计目的、实现原理与编译链中的位置,并通过逐行注释展示源码的运行流程。 一、概念背景:SSR 与 Teleport 的特殊性 Teleport 的核心作用是在客户端渲染时允许开发者将某些内容渲染到 DOM 树的其他位置,例如: <teleport to="#modal">


单链表反转:从基础到进阶的完整指南
oioihoii2025/11/6

单链表反转是数据结构与算法中的经典问题,它不仅考察对链表结构的理解,也考验编程思维和技巧。本文将带你从基础实现到高级应用,全面掌握单链表反转。 1. 理解单链表 在深入反转算法之前,我们先回顾单链表的基本结构: class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next 单链表的特点是每个节点包含数据和指向下一个节点的指针,只能单向遍历。 2.

首页编辑器站点地图

本站内容在 CC BY-SA 4.0 协议下发布

Copyright © 2025 聚合阅读