@sydneyrunkle: https://x.com/sydneyrunkle/status/2062217190724579673
摘要
关于使用LangChain的create_agent构建自定义代理框架的指南,重点介绍用于定制的中间件。
查看缓存全文
缓存时间: 2026/06/03 21:54
如何构建自定义 Agent 框架
构建有用的代理很大程度上取决于定制化:将代理连接到正确的上下文、数据和环境(或多个环境)以完成手头的任务。
核心上,代理是一个模型在循环中调用工具,直到完成任务并返回结果:
你也可以将代理定义为:
代理 = 模型 + 框架
框架是围绕模型的脚手架,将其连接到现实世界。
本文的其余部分假设以下内容:
-
代理的好坏取决于提供给模型的上下文
-
框架的工作是在每一步为模型提供上下文
因此,要构建有用的代理,你需要一个善于为给定任务向模型提供正确上下文的框架。
基础框架
create_agent 是 LangChain 用于构建框架的基础原语。传入模型、工具和系统提示,你就有了一个可工作的代理:
from langchain.agents import create_agent
agent = create_agent(
model="anthropic:claude-sonnet-4-6",
tools=tools,
system_prompt="你是一个乐于助人的助手..."
)
像 Deep Agents 和 Claude Agent SDK 这样的框架预装了一套有主见的中间件(下文解释)栈:内存、上下文管理、沙箱等。它们旨在让你快速拥有一个生产就绪的代理,并且在大多数情况下表现良好。但许多代理需要比这些框架支持的更细粒度的定制:自定义提示、业务逻辑、护栏等。
create_agent 采取了不同的方法:它有意保持极简。我们的理念与高度可配置的编码代理框架 Pi 相似。create_agent 仅实现核心代理循环,并将 中间件 作为定制的原语暴露出来。
中间件:如何定制框架
中间件在代理循环的每一步进行挂钩:模型调用前后、工具调用前后、代理启动和关闭时。每个中间件处理一个关注点,并可以自由地与任何其他中间件组合:
中间件允许你通过几个通常协同工作的杠杆来向代理添加 能力:
确定性逻辑。 业务逻辑、策略执行、动态代理控制——任何需要在循环中特定点触发的东西。这包括对代理本身的运行时控制:根据任务复杂度切换模型、调整提示、更新代理的消息历史(例如在压缩期间)。任何不能(或不应该)放在提示中的内容的正确位置。
工具。 中间件不是直接在代理上注册工具,而是可以处理工具的完整生命周期——设置、拆卸、注册——并将一套干净的工具交给代理使用。当工具有依赖关系、需要初始化或需要在运行结束时干净地拆卸时,这一点很重要。它还将工具配置保持在控制它的逻辑附近,而不是分散在代理定义中。
自定义状态。 如果你的中间件需要在多个钩子之间跟踪状态,中间件可以用自定义属性扩展代理的状态。这使得中间件能够在整个执行过程中跟踪状态(维护计数器、标志或其他在代理运行中持续存在的值),并在钩子之间共享数据。
流处理器。 中间件可以拦截并转换代理的输出流——过滤事件、注入元数据、将不同事件类型路由到不同的消费者。当堆栈的不同部分需要对代理所做的不同事情做出反应时(UI 消费 token 增量、审计日志捕获工具调用、监控系统跟踪延迟),这非常有用。
中间件的妙处在于它:
-
允许在代理循环的任何点进行定制
-
将相关逻辑捆绑在可组合、可共享的代码单元中
LangChain 为最常见的模式提供了预构建的中间件。任何针对你用例的特殊需求,只需一个自定义中间件即可实现。由于每个中间件都是独立的,同一个中间件可以在组织内的每个代理中重用,这样新代理就能继承经过实战检验的行为,而无需重新构建。
框架的能力
框架的工作是在正确的时间为给定任务向模型提供正确的上下文。
下表将常见能力映射到支持它们的中间件。大多数生产代理最终会根据代理的需求(是否长时间运行?任务有多复杂?代理的行为有多敏感?等)组合使用多个中间件:
在此查看预构建中间件的完整列表。
任务与框架的匹配度
任务与框架的匹配度是指你的框架与实际任务需求之间的契合程度:它需要的上下文、会遇到的问题、必须执行的策略、运行的环境。客户服务代理的框架与长时间运行的编码代理的框架看起来截然不同。
我们在 LangChain 构建的每个代理,包括我们的 GTM 代理、异步编码代理和无代码代理构建器,都是基于 create_agent 构建的,并搭配了针对该代理使命量身定制的中间件栈。
最好的代理不仅仅是使用强大的模型构建的,更是使用与任务紧密匹配的框架构建的。构建自定义框架的最简单方法是使用 create_agent。
参考资料
入门指南
-
快速入门:使用
create_agent构建你的第一个代理 -
create_agent指南 -
中间件参考
-
自定义中间件指南
-
Deep Agents:基于
create_agent构建的生产框架
致谢
感谢 @hwchase17、@huntlovell、@masondrxy 和 @Vtrivedy10 的深思熟虑的审阅和反馈。
相似文章
@hwchase17: https://x.com/hwchase17/status/2053157547985834227
文章概述了一个系统的“智能体开发生命周期”(构建、测试、部署、监控),以有效创建和管理 AI 智能体,重点介绍了 LangChain、LangGraph 和 CrewAI 等关键框架。
@LangChain:模型。工具。上下文。智能体的三大核心组件。随着你构建更多智能体,上下文越来越多地存在于 AGENTS.md 中……
LangChain 推出 LangSmith Context Hub,一个集中管理智能体上下文(包括 AGENTS.md、技能、策略和研究文件)的平台。
@FakeMaidenMaker: LangChain 刚官方开源了一个开箱即用的 agent harness——Deep Agent 装好就能跑长任务、多步工作,不用 fork 也能轻松替换任何部件。 GitHub 23701 stars,LangChain 官方(lan…
LangChain 官方开源了 Deep Agent,一个开箱即用的 agent harness,支持长任务、多步工作流,可插拔组件,模型无关,生产就绪。
@mfpiccolo: https://x.com/mfpiccolo/status/2060069083878408689
文章认为,当前像 LangChain 和 CrewAI 这样的智能体编排框架将独立关注点捆绑成一个整体模块,导致缺乏灵活性。文章介绍了 iii 引擎,其中每个职责都是一个独立的、可替换的工作单元,通过共享总线和单一触发原语连接,使开发者能够通过替换工作单元而非分叉框架来组合自己的编排方案。
面向长时应用开发的Harness设计
Anthropic工程师详细介绍了一种多智能体Harness设计,利用生成器与评估器智能体提升Claude在长时间内自主构建完整、高质量前端应用的能力。