解密 Agent Harness
2025年初,当整个行业的团队都在尝试用不同方式应用AI时,我编写了一个简单的命令行工具,包装在LLM周围,叫做WISH,是Workflow Infused SHell的缩写。我在构建者体验团队的目标很简单,就是交付能帮助开发者快速前进的工具,有了WISH,你可以用一条命令执行复杂的SDLC工作流。我一直在使用它,但大多数开发者仍然主要通过自动补全和聊天界面来体验AI。
在随后的几个月里,随着自主编码代理如雨后春笋般涌现,我放弃了WISH这个产品,顺应行业潮流,不断实验、构建,并留下了一系列关于哪些做法有效、哪些无效的博客文章。回顾过去,每篇文章都在探索同一系统的不同层次。那些看起来是关于MCP、记忆、上下文工程、技能和评估的独立讨论,实际上是一个更大架构的各个组成部分,而这个架构正越来越被行业认可为Agent Harness。在这篇文章中,我将把这些散落的线索汇聚在一起,准确解构Agent Harness到底是什么,以及为什么它已成为现代AI工程的定义性架构。
1、Agent Harness
我们从ChatGPT开始,一个简单的界面附加在无状态的大型语言模型上。但工程不仅仅是聊天,我们需要能够以编程方式与LLM交互以执行任务的应用程序,因此,Agent诞生了。随着这些任务变得越来越复杂,模型需要访问超出其训练权重的实时数据和外部系统。对于许多有范围限定的、重复性的用例,一个带几个工具的基本循环就足够了。我创造了Agentlet这个词来描述这些设置——一个LLM被包装在非常薄的、单一用途的Harness中。
Agentlet在简单自动化方面表现出色,但健壮的自主系统需要的远不止几个工具。它们需要上下文管理,以及用于跟踪对话的短期工作记忆和用于记住过去决策的长期状态。提供所有这些能力的更广泛基础设施——从循环本身到工具和记忆层——就是我们现在所说的Agent Harness。像Kiro CLI、Claude Code和Gemini CLI等工具正在发布越来越强大的Harness,每个工具都在不断增加功能以赢得开发者的青睐,我们甚至开始看到像Hermes这样的高级Harness能够随时间学习并动态生成新技能。
简单来说,如果LLM是大脑,那么Agent Harness就是承载它穿越世界的整个身体。
2、循环
剥离现代Harness添加的每一层复杂性,中心剩下的是一个你不能移除的单一循环——移除它,Agent就不再是Agent。模型感知当前状态,决定下一步做什么,通过调用工具来行动,并观察结果,这个循环重复直到达到目标或Agent用尽空间。Harness中的其他一切——所有的记忆和上下文管理以及我们将要讨论的护栏——都只为了让这个循环运行更久、判断更好而存在。
在我的文章The Age of Agentic AI中,我介绍了Strands SDK上一个互联企业助手,其工作归结为几个重复步骤:收集正确的信息、制定计划、将工作分解为子任务、执行,并根据返回结果进行调整。那就是WISH,现在通过MCP推理内部系统,而不是从终端执行预定义的工作流。它通过ReAct模式结合在一起,将思考与行动交织在一起,使每个工具调用都在上一个的基础上选择,而不是盲目地预先规划。即使在那时,这些都不是什么新鲜事,这正是重点所在,因为我曾经写过循环的战略祖先——观察、定向、决策和行动的OODA循环,这种相似并非巧合,因为两者都描述了一种将新观察结果融入到下一步行动中的任何类型的代理。
我当时看不到的是,这个循环只是引擎,而引擎在能安全地带你去任何地方之前,仍然需要底盘和转向系统。
3、MCP工具与技能
一个只能思考的循环在工具允许它通过搜索信息或运行脚本来接触和操作世界之前,一直处于惰性状态。根本挑战是代理如何连接到这些工具,因为直接连接会产生上下文丢失和安全暴露的混乱局面,我在Are AI Agents the New Microservices中就警告过这个问题。行业通过汇聚于模型上下文协议(Model Context Protocol)来解决这一问题,这是一个开放标准,为Harness提供了一致的方式来发现和编排单一接口背后的工具。虽然这些协议工具在模型外部运行以将其连接到外部世界,但技能(Skills)在模型的推理内部运行,教它如何以及何时利用这些能力。技能还同时保持上下文窗口精简,因为评估代理只看到它们紧凑的前置元数据,而不是完整的工具定义。借鉴微服务时代的经验教训,当能力作为清晰限定的单元到达,而不是一个充当杂乱多功能工具的单一单体服务器时,Harness会保持更健康的状态。
3.1 上下文很重要
循环所做的每一件事都在争夺一个稀缺资源——上下文窗口,即容纳系统提示、到目前为止的对话、工具定义以及任何检索内容的"工作记忆"。直觉反应是假设更大的窗口能解决这个问题,但在Lost in Context中我深入探讨了为什么这种看法是误导的,因为"中间丢失"效应表明模型可靠地使用开头和结尾的信息,而忽视中间的内容。问题从来不是容量,而是理解力,所以好的上下文工程是策展而非积累:只向循环提供该步骤需要的内容,动态选择工具,按需检索其余内容。这种纪律也体现在计费中,因为正如我在The Agentic AI Tax中所论述的,循环每一步都会重新发送整个历史,所以提示缓存和递归摘要使上下文既精简又便宜。
3.2 记忆:短期,然后长期
我首先将短期记忆添加到循环中。它是一个用于即时行动和失败的瞬态草稿板。正如我在Coding Agents Do Not Need Personal Memory中所论述的,这种状态是短暂的。它只属于活跃的上下文窗口。真正的持久上下文已经存在于你的代码仓库中。它存在于你的AGENTS.md文件和架构决策记录(ADRs)中。草稿板在任务结束时消亡,但长期记忆将简单的循环转化为真正的Agent Harness。这种状态在运行之间持续存在,以随时间复合价值。它记住过去的成功和失败。然而,正如我在What Memory Frameworks Forget中指出的,这个承诺看似简单却代价高昂。你不能只是将聊天日志倒入向量数据库。你必须提取关键事实,检索精确的子集,并修剪过时的数据。像Mem0这样的框架只提供基础管道。决定哪些记忆塑造未来行为的严格策略才是真正的工程。
3.3 控制与可靠性
一个从不检查自己的工作或从不从错误的工具调用中恢复的执行循环是一种责任,而非真正的自主。Harness提供了关键机制来保持这个循环的诚实,通过执行合理的停止条件、重试暂时性故障,以及应用严格的行为护栏。正如我在The Deming Way to Build Responsible AI中所论述的,质量必须直接工程化到流程中,将护栏视为基础设计而非事后补丁。代理循环经常跳过关键的学习步骤,造成我在Fast Code, Fragile Systems中描述的那种生产脆弱性——令人印象深刻的演示在实际负载下不可避免地崩溃。评估在Harness中占有一席之地,因为使用人类审查员或LLM评判者的持续自动化评估仍然是衡量实际改进的唯一可靠方法。如果不将这个反馈循环整合到底层系统中,代理只是在没有任何结构性问责的情况下向前奔跑。
4、结束语
回顾过去,WISH只是一个更大系统的第一个组件。在接下来的18个月里,我将MCP、记忆、上下文工程、RAG和评估作为独立主题来写。它们都是同一架构的不同层面。
行业的第一波创新专注于模型。差异化越来越多地从模型转向Harness。基础模型提供智能,但Harness决定了这种智能能多有效地感知、行动、记忆、恢复和随时间改进。制胜策略保持不变:保持Harness精简,只在额外能力真正物有所值的地方加强它。
原文链接:Demystifying Agent Harness
汇智网翻译整理,转载请标明出处