Zilliz 前天 22:37
LangChain 1.0 升级:革新 Agent 开发,拥抱 Milvus 实现生产级应用
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

LangChain 1.0 迎来重大改版,放弃了旧的 Chain 设计,转而采用标准化的 ReAct 循环和 Middleware 机制,极大地简化了 Agent 的开发流程并统一了标准。新版本通过 `create_agent` 函数将复杂的 Agent 构建过程浓缩,并引入 Middleware 机制以支持 PII 检测、人工审批、自动重试等生产级能力。此外,LangChain 1.0 还提供了标准化的结构化输出机制,解决了模型供应商间的接口差异问题。文章重点阐述了如何结合 Milvus 向量数据库,为 Agent 构建强大的长期记忆系统,包括海量知识的快速检索、记忆的持久化以及多模态内容的统一管理。最后,文章对比了 LangChain 和 LangGraph 的技术定位,为开发者提供了选型策略。

🚀 **LangChain 1.0 核心革新:拥抱 ReAct 与 Middleware** LangChain 1.0 放弃了原有的 Chain 设计,转而采纳了广泛应用的 ReAct(推理→工具调用→观察→判断)循环,并引入了强大的 Middleware 机制。这一改变旨在简化 Agent 开发流程,统一标准,并为生产级应用提供更健壮的支持。通过 `create_agent` 函数,开发者可以用极少的代码构建功能完备的 Agent,底层 LangGraph 运行时自动处理状态管理、错误恢复和流式输出,极大地提升了开发效率和应用稳定性。

🛡️ **生产级能力注入:Middleware 机制的强大应用** Middleware 机制是 LangChain 1.0 从原型走向生产的关键。它允许开发者在 Agent 执行循环的关键节点注入自定义逻辑,而无需修改核心代码。文章详细介绍了 PII 检测(如邮箱、信用卡号的脱敏或阻断)、对话内容自动总结以管理上下文长度、以及工具调用失败时的自动重试等生产级中间件的应用。这些中间件的组合,使得 Agent 能够满足安全合规、性能优化和高可用性等生产环境的严苛要求,开发者可以像搭积木一样灵活组合所需能力。

🗄️ **Milvus 赋能 Agent:构建强大的记忆系统** 文章强调了向量数据库在 Agent 长期记忆中的核心作用,并将 Milvus 作为重要集成伙伴。Milvus 作为成熟的开源向量数据库,通过其高效的语义检索能力,解决了 Agent 处理海量知识、历史对话和产品手册时的检索难题。它支持将 Agent 的每一次交互、每一次工具调用结果进行向量化存储,实现记忆的持久化,并在需要时快速唤醒相关记忆。此外,Milvus 的多向量支持还能统一管理文本、图片等多种模态的数据,为多模态 Agent 提供统一的记忆底座,并通过元数据过滤实现精细化检索。

📊 **结构化输出与模型切换:提升通用性与灵活性** LangChain 1.0 引入了统一的结构化输出机制,通过 `response_format` 参数,开发者只需定义一次数据 Schema(如 Pydantic 模型),框架就能自动适配不同模型供应商的输出方式。无论是原生支持结构化输出的模型(如 OpenAI),还是通过 Tool Calling 模拟的,LangChain 都能自动选择最优策略,确保输出格式的一致性。这一特性极大地简化了模型切换时的适配工作,提高了 Agent 的通用性和灵活性,使得业务代码无需修改即可在不同模型间切换。

💡 **LangChain 与 LangGraph 的协同:技术选型策略** 文章最后阐述了 LangChain 1.0 和 LangGraph 1.0 的技术定位与协同关系。LangChain 专注于快速构建标准 Agent,而 LangGraph 则提供底层编排能力,适用于复杂工作流和多 Agent 协作。两者并非竞争关系,而是构成了一个渐进式的技术栈。对于新手或需要快速启动项目的开发者,建议从 LangChain 开始;而对于有复杂编排需求的用户,可直接使用 LangGraph。两者也可以在同一项目中根据具体场景灵活选用,共同构建强大的 Agent 系统。

原创 尹珉 2025-11-03 18:05 上海

不再搞Chain 设计的LangChain 1.0 ,如何结合Milvus打造生产级agent

最近,被广大开发者又爱又恨的LangChain ,迎来了重大改版:

专门为agent落地打造的LangChain 1.0版本终于来了!!!

简单来说,其改动主要在于:通过放弃早期的Chain 设计,引入标准化 ReAct 循环(推理→工具调用→观察→判断)和 Middleware 机制,简化agent开发流程、统一标准。

那么改版的LangChain 怎么用,如何结合Milvus落地生产,本文将重点解读。

01

LangChain 为何改版?

 Chain 设计不适用agent时代

过去,LangChain 0.x 版本的优点是能让开发者快速构建Agent 原型。但同时也存在三个核心问题:

1、僵化的 Chain 设计

预构建的 Chain(如SimpleSequentialChainLLMChain)在标准场景下很方便,但一旦业务逻辑偏离模板,开发者就会陷入两难——要么被迫接受框架的全部设计,要么放弃框架直接操作原始 LLM 调用。

2、缺少生产级控制

这些问题在 Demo 阶段难以暴露,但上线后每一个都可能致命。

3、模型切换的重复工作

OpenAI、Anthropic、国产模型的接口差异(Reasoning 格式、Tool Calling 协议)迫使开发者在每次切换时重写适配代码。

而针对以上问题,LangChain 1.0选择放弃早期的Chain 设计,引入标准化 ReAct 循环(推理→工具调用→观察→判断,create_agent函数 10 行代码就能构建生产级 Agent)和 Middleware 机制(注入 PII 检测、人工审批、自动重试)简化agent开发流程、统一模型接入等标准。

02

LangChain 1.0 的核心设计All-in ReAct Agent

LangChain 团队在分析大量生产环境的 Agent 后发现:绝大多数成功案例都收敛到了 ReAct 模式。

无论是多 Agent 协作的 Supervisor 架构,还是需要深度推理的复杂场景,核心循环都是:

推理 → 工具调用 → 观察结果 → 判断是否完成

既然绝大多数问题都能用 ReAct 解决,为什么不把这个模式做到极致?因此1.0的第一个核心改版就是引入标准化 ReAct 循环。

LangChain 1.0 的分层策略

这种渐进式设计让开发者可以从最简单的方案开始,按需增加复杂度。

1. create_agent 函数:简化的 Agent 构建接口

LangChain 1.0 的核心突破在于将 Agent 构建的复杂性压缩到一个函数中。create_agent不再要求开发者手动编排状态管理、错误处理和流式输出 —— 这些生产级能力现在由底层 LangGraph 运行时自动提供。

三个参数,一个运行时

底层自动继承 LangGraph 的持久化状态、中断恢复和流式处理能力,将过去需要数百行代码实现的 Agent 循环浓缩为声明式 API。

    from langchain.agents import create_agent

    agent = create_agent(

        model="openai:gpt-4o",

        tools=[get_weather, query_database],

        system_prompt="你是一个专业的客服助手,帮助用户查询天气和订单信息。"

    )

    result = agent.invoke({

        "messages": [{"role""user""content""上海今天天气怎么样?"}]

    })

    在此基础上,通过内置中间件(Middleware)机制,开发者可以在不破坏核心循环的前提下注入人机协作审批、对话摘要压缩、PII 数据脱敏等生产级能力


    2. Middleware 机制:可组合的生产级能力层

    Middleware 是 LangChain 1.0 从原型到生产的核心桥梁。它在 Agent 执行循环的战略节点暴露钩子函数,让开发者无需重写核心循环即可注入自定义逻辑 —— 这种设计类似于 Web 服务器中间件的对称处理模式。

    中间件的执行流程:

    Agent 的核心循环遵循“模型→工具→终止”的三步决策模式

    以下是几个典型的生产级中间件示例:

    (1)PII Detection:敏感信息检测与处理

      from langchain.agents import create_agent

      from langchain.agents.middleware import PIIMiddleware

      agent = create_agent(

          model="openai:gpt-4o",

          tools=[...],

          middleware=[

              # 脱敏邮箱地址

              PIIMiddleware("email", strategy="redact", apply_to_input=True),

              # 掩码信用卡号(显示后4位)

              PIIMiddleware("credit_card", strategy="mask", apply_to_input=True),

              # 自定义正则检测API密钥,发现后阻断

              PIIMiddleware(

                  "api_key",

                  detector=r"sk-[a-zA-Z0-9]{32}",

                  strategy="block",  # 检测到后抛出错误

              ),

          ],

      )


      (2)Summarization:自动管理上下文长度

        from langchain.agents import create_agent

        from langchain.agents.middleware import SummarizationMiddleware

        agent = create_agent(

            model="openai:gpt-4o",

            tools=[...],

            middleware=[

                SummarizationMiddleware(

                    model="openai:gpt-4o-mini",  # 使用更便宜的模型总结

                    max_tokens_before_summary=4000,  # 触发阈值

                    messages_to_keep=20  # 保留最近20条消息不总结

                )

            ],

        )


        (3)Tool Retry:工具调用失败自动重试

          from langchain.agents import create_agent

          from langchain.agents.middleware import ToolRetryMiddleware

          agent = create_agent(

              model="openai:gpt-4o",

              tools=[search_tool, database_tool],

              middleware=[

                  ToolRetryMiddleware(

                      max_retries=3,           # 最多重试3次

                      backoff_factor=2.0,      # 指数退避倍数

                      initial_delay=1.0,       # 初始延迟1秒

                      max_delay=60.0,          # 最大延迟60秒

                      jitter=True,             # 添加随机抖动(±25%)

                  ),

              ],

          )


          (4)自定义中间件:

          除了官方提供的预构建中间件,开发者可以通过装饰器或类继承的方式创建自定义中间件。例如,记录模型调用日志:

            from langchain.agents.middleware import before_model

            from langchain.agents.middleware import AgentState

            from langgraph.runtime import Runtime

            @before_model

            def log_before_model(state: AgentState, runtime: Runtime) -> dict | None:

                print(f"即将调用模型,当前消息数: {len(state['messages'])}")

                return None  # 返回None表示继续正常流程

            agent = create_agent(

                model="openai:gpt-4o",

                tools=[...],

                middleware=[log_before_model],

            )


            中间件机制将生产级能力(安全合规、错误处理、性能优化)从业务逻辑中解耦,让开发者可以像搭积木一样组合这些能力。

            3. Structured Output:标准化的结构化输出机制

            LangChain 1.0 引入了统一的结构化输出机制,解决了模型供应商之间输出格式不一致的问题。

            核心问题:传统 Agent 开发中,不同模型供应商对结构化数据的支持方式各不相同。OpenAI 有 Native Structured Output API,而其他模型只能通过 Tool Calling 模拟,开发者需要针对不同供应商编写适配代码。

            LangChain 的解决方案:通过create_agentresponse_format参数,开发者只需定义一次数据 Schema,框架自动选择最优策略:

              from langchain.agents import create_agent

              from pydantic import BaseModel, Field

              class WeatherReport(BaseModel):

                  location: str = Field(description="城市名称")

                  temperature: float = Field(description="温度(摄氏度)")

                  condition: str = Field(description="天气状况")

              agent = create_agent(

                  model="openai:gpt-4o",

                  tools=[get_weather],

                  response_format=WeatherReport  # 直接传入Pydantic模型

              )

              result = agent.invoke({"role""user""content""上海今天天气怎么样?"})

              weather_data = result['structured_response']  # 获取结构化数据

              print(f"{weather_data.location}{weather_data.temperature}°C, {weather_data.condition}")


              两种实现策略:

              (1)Provider Strategy:当模型原生支持结构化输出(如 OpenAI、Grok)时,LangChain 自动使用 API 级别的 schema enforcement,可靠性最高

              (2)Tool Strategy:对于不支持原生结构化输出的模型,LangChain 将 Schema 转换为 Tool Calling,通过工具调用机制实现相同效果

              开发者无需关心底层策略选择,框架根据模型能力自动适配。这种抽象让你可以在不同供应商之间自由切换,而业务代码保持不变。

              4.向量数据库与 Agent 记忆系统的集成

              生产级 Agent 的能力上限,往往不在推理引擎,而在记忆系统。LangChain 1.0 将向量数据库作为 Agent 的外部海马体,通过语义检索赋予 Agent 长期记忆能力,Milvus是其最重要的生态组成之一。

              为什么选择 Milvus?

              Milvus 是目前最成熟的开源向量数据库之一,专为 AI 应用的大规模向量检索而设计。它在 LangChain 生态中拥有原生集成,无需手动实现向量化、索引管理和相似度计算——langchain_milvus包已将其封装为标准的VectorStore接口。

              Milvus 解决 Agent 的三个关键记忆问题

              问题一:海量知识的快速检索

              假设 Agent 需要处理成千上万份文档、历史对话、产品手册时,关键词搜索已经不够用。Milvus 通过向量相似度搜索,在毫秒级找到语义最相关的内容——即使用户换了说法。

                from langchain.agents import create_agent

                from langchain_milvus import Milvus

                from langchain_openai import OpenAIEmbeddings

                # 初始化向量数据库作为知识库

                vectorstore = Milvus(

                    embedding=OpenAIEmbeddings(),  

                    collection_name="company_knowledge",

                    connection_args={"uri""http://localhost:19530"}  #

                )

                # 将检索器转为Tool供Agent使用

                agent = create_agent(

                    model="openai:gpt-4o",

                    tools=[vectorstore.as_retriever().as_tool(

                        name="knowledge_search",

                        description="搜索公司知识库以回答专业问题"

                    )],

                    system_prompt="你可以从知识库中检索信息来回答问题。"

                )


                问题二:长期记忆的持久化

                Middleware 的SummarizationMiddleware可以压缩对话历史,但那些被总结掉的细节去哪了? Milvus 将每一轮对话、每一次工具调用的结果向量化存储,构建 Agent 的长期记忆。需要时,通过语义检索快速唤醒相关记忆。

                记忆持久化模式

                  from langchain_milvus import Milvus

                  from langchain.agents import create_agent

                  from langchain.agents.middleware import SummarizationMiddleware

                  from langgraph.checkpoint.memory import InMemorySaver

                  # 长期记忆存储(Milvus)

                  long_term_memory = Milvus.from_documents(

                      documents=[],  # 初始为空,运行时动态写入

                      embedding=OpenAIEmbeddings(),

                      connection_args={"uri""./agent_memory.db"}

                  )

                  # 短期记忆管理(LangGraph Checkpointer + Summarization)

                  agent = create_agent(

                      model="openai:gpt-4o",

                      tools=[long_term_memory.as_retriever().as_tool(

                          name="recall_memory",

                          description="检索Agent的历史记忆和过往经验"

                      )],

                      checkpointer=InMemorySaver(),  # 短期记忆

                      middleware=[

                          SummarizationMiddleware(

                              model="openai:gpt-4o-mini",

                              max_tokens_before_summary=4000  # 超过阈值时总结并存入Milvus

                          )

                      ]

                  )


                  问题三:多模态内容的统一管理

                  现代 Agent 要处理文本、图片、音频、视频。Milvus 的多向量支持动态 Schema23,让你在同一个系统中管理不同模态的向量,为多模态 Agent 提供统一的记忆底座。

                  元数据过滤检索

                    # 按来源过滤检索(例如:只检索医疗报告)

                    vectorstore.similarity_search(

                        query="患者的血压指标是多少?",

                        k=3,

                        expr="source == 'medical_reports' AND modality == 'text'"  # Milvus标量过滤

                    )


                    有了 Milvus 提供的记忆底座,Agent 才能从健忘的执行器进化为具备经验积累的智能体。

                    03

                    LangChain 与 LangGraph 的技术定位与选型策略

                    LangChain 1.0以上升级,只是其构建生产级 Agent 的一环,但并不意味着LangChain 1.0永远是构建agent的最优解。

                    选择合适的开发框架,决定了你能多快将这些能力组合成可用的系统。

                    在实际开发中,LangChain 1.0 和 LangGraph 1.0 的关系经常被误解为二选一的竞争关系。实际上,它们是渐进式的技术栈LangChain 专注于快速构建标准 Agent,LangGraph 提供底层编排能力用于复杂工作流。

                    以下是一个小的技术定位对比

                    如果你是 Agent 新手或希望快速启动项目,从 LangChain 开始;如果你已经明确需要复杂编排、多 Agent 协作或长期流程,直接使用 LangGraph。两者可以在同一个项目中共存,根据具体场景选择合适的工具。

                    04 

                    尾声

                    三年前,LangChain 还只是个调用 LLM 的轻量级包装器,现在,它已经变成了完整的生产级框架 。

                    在内部, LangChain 的 Middleware 解决安全合规问题,LangGraph 提供持久化执行和状态管理;在外部,是Milvus 等生态集成产品为其补上长期记忆短板。

                    如今,Agent 开发终于有了一套可靠的工具链。

                    作者介绍

                    Zilliz黄金写手:尹珉

                    阅读推荐

                    放弃ES+Mongo,如何用Milvus一套系统搞定千万用户视频检索*关键词

                    沃尔沃RAG实战:企业级知识库,早就该放弃小分块策略

                    DeepSeek-OCR解读:视觉如何成为长上下文压缩的新思路

                    多少做RAG的人,连分词都搞不定? Milvus Analyzer指南

                    阅读原文

                    跳转微信打开

                    Fish AI Reader

                    Fish AI Reader

                    AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

                    FishAI

                    FishAI

                    鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

                    联系邮箱 441953276@qq.com

                    相关标签

                    LangChain 1.0 Agent开发 Milvus 向量数据库 ReAct Middleware 生产级Agent AI Agent LangGraph
                    相关文章