构建有用的 Agent,核心在于定制化:将你的 Agent 连接到适合当前任务的上下文、数据和环境等。

从本质上讲,Agent 是一个模型循环调用工具,直到完成任务并返回结果:

你也可以将 Agent 定义为:agent = model + harness
Harness 是围绕模型的脚手架,负责将其与现实世界连接起来。

本文的其余部分基于以下假设:
- Agent 的好坏取决于提供给模型的上下文质量
- Harness 的职责是在每一步都为模型提供上下文
因此,要构建一个有用的 Agent,你需要一个 Harness,能够针对给定任务向模型精准交付正确的上下文。
- 基础 Harness
=============
create_agent 是 LangChain 用于构建 Harness 的原语。传入模型、工具集和系统提示词,你就拥有了一个可运行的 Agent:
from langchain.agents import create_agent
agent = create_agent(
model="anthropic:claude-sonnet-4-6",
tools=tools,
system_prompt="you are a helpful assistant..."
)
像 Deep Agents 和 Claude Agent SDK 这样的 Harness 已经预装了带有明确设计取向的中间件(Middleware)栈:记忆、上下文管理、沙箱环境等。它们旨在让你快速构建生产级 Agent,并且在大多数场景下表现良好。但许多 Agent 需要比这些 Harness 更细粒度的定制:自定义提示词、业务逻辑、护栏(Guardrails)等。
create_agent 采取了不同的方法:它是有意极简的。我们的理念与 Pi(一个高度可配置的编程 Agent Harness)类似。create_agent 只实现了核心的 Agent 循环,并将中间件(Middleware)作为定制的原语暴露出来。
- 中间件:定制 Harness 的方式
=====================
中间件在 Agent 循环的每一步进行介入:在模型调用之前和之后、在工具调用之前和之后、在 Agent 启动和销毁时。每一块中间件只处理一个关注点,并可以自由地与其他中间件组合:

中间件允许你通过几个通常协同工作的杠杆,为 Agent 添加能力:
- 确定性逻辑(Deterministic Logic)
业务逻辑、策略执行、动态 Agent 控制,任何需要在循环特定节点触发的逻辑。这包括对 Agent 本身的运行时控制:根据任务复杂度切换模型、调整提示词、更新 Agent 的消息历史(例如在历史压缩时)。任何无法(或不应)放在提示词中的逻辑,都应该放在这里。
- 工具(Tools)
与其直接在 Agent 上注册工具,不如让中间件来处理工具的完整生命周期:初始化、销毁、注册,并向 Agent 提供一套干净的工具集。当工具存在依赖、需要初始化或需要在运行结束时被干净地销毁时,这一点尤为重要。它还能让工具配置与其管理逻辑紧密耦合,而不是散落在 Agent 定义各处。
- 自定义状态(Custom state)
如果你的中间件需要在各个 Hook 之间追踪状态,中间件可以通过自定义属性扩展 Agent 的状态。这使得中间件能够在整个执行过程中追踪状态(维护计数器、标志位或其他在 Agent 运行期间持久化的值),并在不同 Hook 之间共享数据。
- 流处理器(Stream handlers)
中间件可以拦截并转换 Agent 的输出流,过滤事件、注入元数据、将不同类型的事件路由到不同的消费者。当你的技术栈中不同部分需要对 Agent 的不同行为做出反应时,这就非常有用:UI 消费 Token 增量、审计日志捕获工具调用、监控系统追踪延迟。
中间件的优雅之处在于:
- 它允许在 Agent 循环的任意节点进行定制
- 它将相关逻辑打包为可组合、可共享的代码单元
LangChain 为最常见的模式提供了预构建的中间件。任何针对你特定用例的定制需求,只需一个自定义中间件即可实现。由于每一块都是独立的,同一个中间件可以在组织内的每一个 Agent 中复用,从而让新 Agent 继承经过实战检验的行为,无需重复构建。
- Harness 能力
=============
Harness 的职责是在正确的时间,为给定任务向模型提供正确的上下文。
下表将常见能力映射到支持它们的中间件。大多数生产级 Agent 最终会根据自身需求(它是长时运行的吗?任务有多复杂?Agent 的行为有多敏感?等)组合使用多个中间件:
| 能力 | 为什么重要 | 中间件 |
|---|---|---|
| 防止上下文溢出 | 长会话会快速累积消息历史。如果不加干预,会超出上下文窗口限制。 | SummarizationMiddleware, ContextEditingMiddleware |
| 访问和更新记忆 | 在启动时加载相关知识,在运行结束时写回。让 Agent 能从实际使用中不断进化。 | FilesystemMiddleware, MemoryMiddleware, SkillsMiddleware |
| 在环境中执行操作 | 固定的工具集限制了 Agent 的能力。访问文件系统和执行环境可以解锁更具创造性的解决方案,通常还能带来更高的 Token 效率。 | ShellToolMiddleware, FilesystemMiddleware, CodeInterpreterMiddleware |
| 委派任务 | 子 Agent 以干净的上下文窗口处理复杂的子任务。待办列表用于追踪长时运行的进度。 | SubAgentMiddleware, AsyncSubAgentMiddleware, TodoListMiddleware |
| 处理瞬时故障 | 模型和工具会不可预测地失败。生产级 Agent 需要带退避(backoff)的重试逻辑,以及在模型不可用时进行降级。 | ToolRetryMiddleware, ModelRetryMiddleware, ModelFallbackMiddleware |
| 执行策略 | PII 处理、合规检查、审批关卡,这些需要在每次调用时触发,无论模型做什么。它们不应该放在提示词中。 | PIIMiddleware, HumanInTheLoopMiddleware |
| 引导 Agent | 完全自主并不总是合适的。在执行关键操作前暂停,等待人类批准、拒绝或重定向。 | HumanInTheLoopMiddleware |
| 控制成本 | 提示词缓存可以减少长时运行任务的 Token 消耗。调用限制可以防止成本无节制地累积。 | ModelCallLimitMiddleware, ToolCallLimitMiddleware, PromptCachingMiddleware |
查看完整的预构建中间件列表,如下所示:
https://docs.langchain.com/oss/python/langchain/middleware/built-in
- 任务-Harness 适配度
=================
任务-Harness 适配度(Task-harness fit)衡量你的 Harness 与实际任务需求的匹配程度:它需要的上下文、可能遇到的故障、必须执行的策略、以及它运行的环境。一个客服 Agent 的 Harness 与一个长时运行的编程 Agent 的 Harness 看起来截然不同。
我们在 LangChain 构建的每一个 Agent,包括我们的 GTM Agent、异步编程 Agent 和无代码 Agent 构建器,都是基于 create_agent 构建的,并配有针对该 Agent 使命定制的中间件栈。
最好的 Agent 不仅仅是用强大的模型构建的,而是它们是用与任务高度适配的 Harness 构建的。构建自定义 Harness 的最简单方式,就是使用 create_agent。
学AI大模型的正确顺序,千万不要搞错了
🤔2026年AI风口已来!各行各业的AI渗透肉眼可见,超多公司要么转型做AI相关产品,要么高薪挖AI技术人才,机遇直接摆在眼前!
有往AI方向发展,或者本身有后端编程基础的朋友,直接冲AI大模型应用开发转岗超合适!
就算暂时不打算转岗,了解大模型、RAG、Prompt、Agent这些热门概念,能上手做简单项目,也绝对是求职加分王🔋

📝给大家整理了超全最新的AI大模型应用开发学习清单和资料,手把手帮你快速入门!👇👇
学习路线:
✅大模型基础认知—大模型核心原理、发展历程、主流模型(GPT、文心一言等)特点解析
✅核心技术模块—RAG检索增强生成、Prompt工程实战、Agent智能体开发逻辑
✅开发基础能力—Python进阶、API接口调用、大模型开发框架(LangChain等)实操
✅应用场景开发—智能问答系统、企业知识库、AIGC内容生成工具、行业定制化大模型应用
✅项目落地流程—需求拆解、技术选型、模型调优、测试上线、运维迭代
✅面试求职冲刺—岗位JD解析、简历AI项目包装、高频面试题汇总、模拟面经
以上6大模块,看似清晰好上手,实则每个部分都有扎实的核心内容需要吃透!
我把大模型的学习全流程已经整理📚好了!抓住AI时代风口,轻松解锁职业新可能,希望大家都能把握机遇,实现薪资/职业跃迁~
这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费】


412

被折叠的 条评论
为什么被折叠?



