Courses
这个概念并不全新。多年来,开发者一直在为模型构建包装层、脚手架和执行环境。这个标签之所以流行,是因为 HashiCorp 联合创始人 Mitchell Hashimoto 在 2026 年 2 月的一篇博客中用到了“harness engineering”来描述他的 AI 工作流。他的观点很简单:当代理犯错时,改变环境以避免再次发生。同一周,OpenAI 也在其 Codex 工作中采用了这一术语,LangChain 随后也以相同的框架来阐述。
本文将解释什么是 agent harness、为什么 AI 代理需要它、它与框架和运行时有何不同,以及开发者常用哪些工具来构建类似 harness 的系统。
什么是 Agent Harness?
一种定义来自 LangChain:“如果你不是模型,那你就是 harness。”在实践中,agent harness 是围绕 语言模型的一层软件:工具、内存、状态、执行、防护栏与可观测性。
Agent = 模型 + Harness
模型负责推理。Harness 为这种推理提供行动的场所、记忆能力、结果校验以及规则约束。

模型置于其工作的 agent harness 中。图片由作者提供。
这个公式很有用,但它是心智模型,而非行业标准。一些厂商仍将“harness”“framework(框架)”和“scaffold(脚手架)”大致等同使用。
为何 AI 代理需要 Harness
当您要求模型执行多步工作时,裸模型存在局限。它无法自行维护持久状态、独立执行工具、管理不断增长的上下文窗口,或在没有帮助的情况下从失败的工具调用中恢复。

设想一个代理被要求修复 Python 项目中的失败测试。没有 harness,模型也许能写出看似可行的修复,但它无法读取实际的测试文件、运行 pytest、查看真实错误、编辑出错函数,或确认修复是否通过。有了 harness,这整条闭环就能在几分钟内由代理自动完成,并且每一步都有记录,方便人类查看。
不过,Anthropic 的指导仍然适用:尽可能用最简单的方法起步,只有在任务确实需要时再增加部件。
Agent Harness 由哪些部分构成
组件会有差异,但大多数共享一些基础构件。把它们当作清单,而非严格的产品规格。小型代理可能只需要其中的少数部分,而生产级代理则需要更多。
系统提示与行为规则
Harness 通常控制模型的基线指令。这包括系统提示,但也可能包含项目规则、编码规范、角色约束和安全策略。以 LangChain 的 Deep Agents 为例,一个 AGENTS.md 文件可以在任务开始前设定基本规则。
2026 年的一些 harness 也会采用分阶段披露指令。与其在启动时把每个工具说明都加载进上下文,harness 只添加可用工具的摘要;只有当模型需要某个工具时,才加载该工具的完整说明。
工具:代理如何与世界交互
工具让代理能做出超越文本生成的事。常见示例包括网页搜索、文件读写、数据库查询、API 调用、浏览器操作、代码执行和终端命令。Harness 控制可用的工具、允许模型何时调用它们,以及如何格式化结果并将其返回到代理的上下文中。
Model Context Protocol (MCP) 在 2026 年已成为这方面的标准接口。许多 harness(包括 Anthropic Agent SDK、LangChain Deep Agents 和 OpenAI Agents SDK)使用 MCP 连接外部工具服务器,而无需为每个工具编写自定义集成代码。
记忆与状态
代理需要知道任务早先发生了什么。Harness 可以在活跃对话中保存短期状态,在文件、日志、摘要或已保存的偏好中保存长期状态。一些 harness 还会将较长的历史压缩成更短的摘要,以避免模型在上下文中携带每个细节。
执行环境:代理运行与行动之处
许多有用的代理需要一个实际工作的地方。那可能是文件系统、容器、沙箱终端、浏览器实例或云端运行时。没有由 harness 管理的执行环境,工具调用将无处落地。
如今许多 harness 使用隔离的沙箱容器:以单个会话为范围的短生命周期环境,任务结束时清理,这样一个代理任务中的文件写入、软件包安装和网络调用就不会影响另一个任务。
编排与规划
有些任务并非一条直线。Harness 可提供规划工具,把目标拆分为子任务并跟踪其状态。它也可以派生子代理来完成部分工作,并仅将摘要返回给主代理。
例如,LangChain Deep Agents 会在文件系统中的文件里跟踪计划步骤,随着任务进行将每一步从“待处理”更新为“已完成”。
防护栏与权限
规则应放在 harness 层:人工审批、阻止的工具调用、基于角色的权限以及输出检查。OpenAI Agents SDK、LangChain Deep Agents 和 Microsoft Agent Framework 都支持这类控制。更安全的模式是分别检查输入、输出和工具权限。
可观测性与追踪
当一个 50 步的代理任务在第 37 步失败时,追踪能显示发生了什么。追踪会记录整个运行过程中的模型调用、工具调用、接力、错误、延迟和成本。OpenAI Agents SDK 默认启用追踪。LangSmith 在此基础上提供调试和评估看板。OpenTelemetry 已成为以供应商无关格式导出追踪的标准,这样您就不会被某一款可观测性工具锁定。
Agent Harness vs. 框架 vs. 运行时:有何不同?
这个问题经常出现,答案也比多数解释文所说的更复杂。这个分类法有用,但并不固定。

三层结构,自下而上抽象度递增。图片由作者提供。
我先从框架说起,因为许多开发者已经用过。
什么是代理框架?
一个 代理框架为开发者提供创建代理的构件。它涵盖模型调用、工具定义、记忆模式和代理循环结构。示例包括早期的 LangChain、CrewAI 和 Google ADK。框架会告诉您如何构建代理,但不一定告诉您如何在生产中稳定运行它。
什么是代理运行时?
代理运行时是帮助代理长期稳定运行的那一层。它处理持久执行、状态持久化、重试、有人参与的步骤以及流式传输。LangGraph、Temporal 和 Inngest 就是例子。Harrison Chase 打了个比方:如果 Node.js 是运行时、Express 是框架,那么 harness 就像 Next.js。
Harness 有何不同?
Harness 的抽象层级高于框架。框架提供组件,而 harness 往往已经替您做了更多决定:工具、规划、文件系统访问与上下文管理等。
Agent Harness 的应用场景:编程、研究、数据与企业
相同的基础构件会出现在非常不同的工作中,但变化的是它们的组合。编程代理与企业工作流代理都需要 harness,但侧重点不同。这些类别不是正式标准,而是从实用角度出发,观察同一理念如何随手头工作而调整。
编程代理的 harness
编程代理是当前的好例子,因为 harness 是可见的。要完成有用的编码工作,代理需要文件访问、git 上下文、终端执行、测试运行、依赖安装和项目规则。Claude Code 和 Codex 就是这种模式的示例:两者都依赖大量 harness 代码,而非裸模型 API。
优秀与一般的编程 harness 往往体现在细节:如何从失败的测试中恢复、能否回滚错误编辑、如何干净地向模型暴露 git 历史。这些细节正是大部分工程投入所在。
研究代理的 harness
研究代理需要不同的工具集:网页搜索、来源跟踪、笔记、引文管理与摘要。Harness 负责管理搜索结果如何存储、如何标注来源,以及如何对长文档分块与卸载,以避免在一次性占满整个上下文窗口。
数据分析代理的 harness
数据代理需要访问数据集、SQL 数据库、Python 执行环境和模式上下文,这样在开始写查询之前就知道可用的表与列。Harness 还会强制执行权限边界,这在代理可以接触生产数据时尤为重要。
企业工作流的 harness
企业级部署会再加一层要求:身份认证、审计日志、审批流程、基于角色的访问控制,以及与内部系统的连接。AWS AgentCore 是该类别中的一个托管示例,内含身份、VPC 网络与可观测性。Microsoft Agent Framework 在 Azure 或 .NET 环境中的团队也涵盖了类似范围。
2026 年构建 Agent Harness 系统的工具
到 2026 年年中,有几款产品最常被提及。它们分布在框架—运行时—harness 光谱的不同位置,边界仍在变化。
LangChain Deep Agents
LangChain Deep Agents 是 LangChain 的开源 harness,基于 LangGraph 作为运行时。它自带规划工具、虚拟文件系统、子代理派生、自动上下文压缩,以及用于人工审批与 PII 检测的中间件。它与模型无关,支持兼容 OpenAI 的端点,并可连接 Modal、Runloop、Daytona 等沙箱提供商进行代码执行。
Anthropic Agent SDK
Anthropic Agent SDK(包名:claude-agent-sdk)从 Claude Code 中抽取并以独立选项发布。它包含内置代理循环、用于 bash 执行、文件读写、网页搜索的工具、MCP 集成与上下文压缩。仅适用于 Claude 模型,可通过 Anthropic API、Amazon Bedrock、Vertex AI 与 Azure 使用。
OpenAI Agents SDK
正如我先前提到的,OpenAI Agents SDK 随着功能集的增长,从框架跨入了 harness 领域。2026 年 4 月的版本加入了原生沙箱执行、内存压缩与文件系统工具。该 SDK 提供 Python 与 TypeScript 版本,支持工具使用、代理接力与防护栏。
Google Agent Development Kit
Google ADK 支持多代理编排,内置顺序、并行与循环式代理结构的类。它包含评估工具,可配合 Vertex AI 做托管部署,并支持 MCP 连接工具。提供 Python、Java、TypeScript 与 Go 版本,针对 Gemini 模型优化,但声称与模型无关。
Microsoft Agent Framework
Microsoft Agent Framework 是微软当前针对 AutoGen 项目的迁移路径。它支持 Python 与 .NET,可与 Azure AI 服务配合,并包含 MCP 工具连接支持。
CrewAI
CrewAI 采用基于角色的多代理方法。您可以为代理定义特定角色、分配任务、组建团队,并以声明式方式配置内存与防护栏。它适合自然映射到“专家团队”的问题。
Temporal 与 Inngest
它们本身并不是 agent harness,而是可持久执行的平台,用于处理当代理任务需要运行数小时或数天且不能丢失状态的情况。发生故障时,引擎会从上一次成功的检查点回放,而不是从头开始。
Agent Harness 的挑战与权衡
增加 harness 能让系统做更多事,但每多一个工具、权限与代理,就多了一种出错方式。随着任务变长,防护栏、追踪和持久状态不再是可选项,而是保障长时间运行可恢复的关键。
还有一种常让团队措手不及的耦合风险。LangChain 报告称,在加入特定模型的 harness 配置文件后,tau2-bench 子集的分数提升了 10 到 20 个点。Artificial Analysis 在其 Coding Agent Index 中也表达了类似观点:编程代理的结果取决于模型与 harness 的组合,不同组合在成本、token 使用与任务耗时上差异很大。模型没变,变的是周围的提示词、工具与中间件。而这种配置本身就是 harness 的工作。
您真的需要一个 Agent Harness 吗?
不妨用一个直接的方式来判断您是否需要它。
如果您的系统满足以下一条或多条条件,您很可能需要一个 harness:
- 需要使用外部工具
- 需要在会话之间记住进度
- 需要在真实环境中运行代码
- 需要协调多个代理
- 需要从部分失败中恢复而不丢失进度
- 需要人工审批
如果任务是一个可预测的工作流,每一步都预先确定,那么您很可能不需要 harness。
一个有用的检验:如果任务可以通过一次模型调用,或一个包含少量条件语句的确定性小脚本来完成,那么 harness 可能大材小用。一旦任务要求代理随时间进行决策、使用工具并对结果作出反应,harness 就开始发挥真正作用。
我反复看到的一种模式是,团队过早选择 harness,为实际上是一次性文本生成的任务搭建追踪与沙箱。相反的错误更为痛苦:直接上线模型,然后在第二个失败的测试、第三次工具调用或第五次重启时才意识到,缺乏可回退的基础设施。
结语
如前所述,不同厂商并不完全用相同的词来指代相同的事物,而框架、运行时与 agent harness 之间的边界仍在移动。
对于一次性生成任务,包装层是多余的。对于需要在长会话中行动、记忆与恢复的代理,agent harness 会成为系统中的重要组成部分。选择合适的 harness 越来越成为与选择合适模型相互独立的决策。我很好奇下一代模型会在多大程度上自行吸收这一层,因为从 OpenAI 和 Anthropic 的一些动向看,边界会继续变化。但基本思路仍然成立:代理 = 模型 + agent harness。
如果您想进一步学习如何构建代理系统,我们的 Building Scalable Agentic Systems 课程涵盖了工具使用、编排与长时代理工作流背后的模式。
Agent Harness 常见问答
Agent harness 与系统提示有何区别?
系统提示是代理在开始时读取的一条输入。Agent harness 是更广的一层,负责管理工具、状态、权限与故障处理。一个我认为最简洁的表述:系统提示告诉模型“该做什么”,而 agent harness 控制它“能做什么”。您可以有一个打磨精良的系统提示却没有 agent harness,结果仍然只是一次无状态的 API 调用。将提示变成系统的,正是 agent harness。
我能从零开始构建自己的 agent harness 吗?
原则上可以。最简单的 harness 就是一个循环:调用模型、解析响应、执行其中的工具调用、返回结果、再重复。用几十行 Python,一个下午就能写出来。难点在循环之后:上下文溢出、工具调用失败、重启时状态丢失、权限管控与追踪。实际中,这些循环之后的工作总是比团队预期更耗时,这也是为何开源的 harness 越做越大、而不是越做越小。
模型是否知道自己处于 harness 中?
并不明确。一些 harness 会通过系统提示告知模型有哪些工具可用,但模型并不具备对“包裹在其外的一套 harness 系统”的概念。它只看见给到的上下文、生成回应,并有时产出工具调用。一个副作用是:当某处出错时,模型往往无法告诉您原因,因为它并不知道 harness 的存在。调试代理最终大多是在调试 harness,而不是模型。
模型选择如何影响我该用哪种 harness?
影响超出很多人的预期。前沿的编程模型有时会在训练后阶段将自家 agent harness 纳入循环,因此换用不同的 harness 可能会浪费性能。一个实用的经验是:如果您的团队决定长期使用一个模型家族,agent harness 的候选清单往往不言自明。更难的是日后更换模型,通常意味着重写 harness 逻辑,而非仅改个配置值。
这和过去所谓的“LLM 脚手架”有不同吗?
并不算。只是旧概念的新名称。“LLM 脚手架”“agent 封装”“执行环境”都指向同一方向。2026 年的细微变化在于,“脚手架”暗示这是一种临时结构,一旦模型足够好就会拆除;而“agent harness”则暗示模型会一直保留它。这改变了团队的工作预期:脚手架会移除,agent harness 会成为系统的一部分。