Agent 与自动化 4.0 · 优秀 2026-05-10 · 文章

深度拆解:AI Agent Harness 的构造

深度拆解 AI Agent Harness 的 12 个核心组件:编排循环工具记忆上下文管理状态持久化错误处理护栏等Harness 是包裹在 LLM 外层的完整软件架构,Anthropic 将 SDK 定义为'驱动 Claude Code 的 Agent Harness'类比:裸模型如同没有内存和 IO 的 CPU,Harness 就是那个操作系统

打开原文回到归档

本文将深入探讨 Anthropic、OpenAI、Perplexity 和 LangChain 究竟在开发什么。我们将聊聊编排循环、工具、记忆、上下文管理,以及那些将"无状态"的大语言模型(LLM)转变为全能 Agent(Agent)的底层机制。

LangChain 证明了这一点:他们仅仅通过改变包裹大语言模型的底层架构——模型没变,参数没变——就让系统在 TerminalBench 2.0(一个衡量 AI Agent 处理命令行任务能力的权威基准测试)上的排名从 30 名开外飙升到了第 5 名。另一项研究则通过让大语言模型自己去优化这套架构,实现了 76.4% 的通过率,甚至超过了人类精心设计的系统。

现在,这套基础设施有了一个正式的名字:AI Agent Harness

什么是 Agent Harness?

虽然这个术语在 2026 年初才正式确立,但其核心理念早已存在。Harness是包裹在大语言模型之外的完整软件架构:它包括编排循环、工具、记忆、上下文管理、状态持久化、错误处理和护栏(Guardrails)。Anthropic 在其 Claude Code 文档中直截了当地指出:SDK(软件开发工具包)就是"驱动 Claude Code 的 Agent Harness"。

我非常喜欢 LangChain 的 Vivek Trivedy 给出的定义公式:"如果你不是模型本身,那你就是 Harness。"

Beren Millidge 在其 2023 年的博文中做了一个精准的类比:原生大语言模型就像一个没有内存、没有硬盘、也没有输入输出设备的 CPU。此时,上下文窗口充当了内存(快但容量有限),外部数据库扮演了硬盘(大但速度慢),工具集成则是设备驱动程序。而Harness,就是那个操作系统。

工程化的三个层次

围绕模型,工程化可以分为三个同心圆层次:

  • 提示词工程 (Prompt engineering):精心设计模型接收到的指令。
  • 上下文工程 (Context engineering):管理模型在什么时间点能看到什么内容。
  • Harness 工程 (Harness engineering):涵盖了上述两者,再加上整个应用架构:包括工具编排、状态持久化、错误恢复、验证循环、安全执行以及生命周期管理。

生产级 Harness 的 12 个核心组件

1. 编排循环 (The Orchestration Loop)

这是系统的"心脏"。它实现了"思考 - 行动 - 观察"(Thought-Action-Observation,简称 TAO)循环,也被称为 ReAct 循环。这个循环不停运转:整合提示词 -> 调用大语言模型 -> 解析输出 -> 执行工具调用 -> 反馈结果 -> 重复,直到任务完成。

Anthropic 将他们的运行时描述为一个"笨循环",所有的智慧都存在于模型之中,Harness 只负责管理回合的切换。

2. 工具 (Tools)

工具是 Agent 的"双手"。它们被定义为某种结构化模式(名称、描述、参数类型),并注入到模型的上下文中,让模型知道哪些工具可用。工具层负责注册、格式校验、参数提取、在沙箱(Sandbox)环境执行、结果捕获,并最终将结果格式化为模型可读的"观察结果"。

Claude Code 提供了六大类工具:文件操作、搜索、执行、网页访问、代码分析和子 Agent 创建。OpenAI 的 Agents SDK 则支持函数工具、托管工具(如网页搜索、代码解释器、文件搜索)以及 MCP(Model Context Protocol,一种开放的工具接入标准)服务器工具。

3. 记忆 (Memory)

记忆在不同的时间尺度上运作。短期记忆是单次会话中的对话历史。长期记忆则跨越多个会话持久存在:Anthropic 使用项目文件和自动生成的 memory.md 文件;LangGraph 使用按命名空间组织的 JSON 存储;OpenAI 则支持由 SQLite 或 Redis 驱动的会话存储。

Claude Code 实现了三层记忆架构:一个轻量级索引(每条约 150 字符,始终加载)、按需调用的详细主题文件,以及仅通过搜索访问的原始对话记录。一个核心设计原则是:Agent 将自己的记忆视为一种"提示",在行动前必须根据实际状态进行验证。

4. 上下文管理 (Context Management)

这是许多 Agent 容易暗中翻车的地方。核心问题在于上下文腐烂:当关键信息处于窗口中间位置时,模型表现会下降 30% 以上(这就是斯坦福大学发现的"迷失在中间"现象)。

生产环境的应对策略包括:

  • 压缩 (Compaction):在接近限制时总结对话历史(Claude Code 会保留架构决策和未修复的 Bug,同时丢弃冗余的工具输出)。
  • 观察掩码 (Observation masking):隐藏旧的工具输出,但保留工具调用的记录。
  • 即时检索 (Just-in-time retrieval):只保留轻量级标识符,动态加载数据。
  • 子 Agent 委托:让每个子 Agent 进行深度探索,但仅返回 1000 到 2000 Token 的浓缩摘要。

5. 提示词构建 (Prompt Construction)

这决定了模型在每一步具体能看到什么。它是层级化的:系统提示词、工具定义、记忆文件、对话历史,以及当前的用户消息。

OpenAI 的 Codex 使用严格的优先级栈:服务器控制的系统消息(最高优先级)、工具定义、开发者指令、用户指令,最后才是对话历史。

6. 输出解析 (Output Parsing)

现代 Harness 依赖于原生工具调用,即模型返回结构化的 tool_calls 对象,而不是需要费力解析的自由文本。Harness 会检查:是否有工具调用?如果有,执行并继续循环;如果没有,那当前的输出就是最终答案。

7. 状态管理 (State Management)

LangGraph 将状态模拟为在图形节点中流动的类型化字典。系统会在关键步骤进行"存档"(Checkpointing),这样即使中断也能恢复,甚至可以进行"时间旅行"式的调试。

8. 错误处理 (Error Handling)

为什么这很重要?一个包含 10 个步骤的过程,即使每一步的成功率高达 99%,最终全流程的成功率也只有约 90.4%。错误是会滚雪球的。

LangGraph 将错误分为四类:临时性的(带延迟的重试)、模型可恢复的(将错误作为工具消息返回,让模型自己调整)、用户可修复的(暂停等待人类干预)以及意外错误(上报调试)。

9. 护栏与安全 (Guardrails and Safety)

OpenAI 的 SDK 实现了三个层级:输入护栏(在第一个 Agent 运行时检查)、输出护栏(检查最终结果)以及工具护栏(每次调用工具前检查)。一旦触发"绊网"(Tripwire)机制,Agent 将立即停止。

Anthropic 在架构上将"权限执行"与"模型推理"分离。模型决定想做什么,但 Harness 决定允许做什么。

10. 验证循环 (Verification Loops)

这是区分"玩具演示"和"生产级 Agent"的关键。Anthropic 推荐三种方法:基于规则的反馈(测试、代码检查)、视觉反馈(通过 Playwright 截取 UI 截图)以及以大语言模型为裁判 (LLM-as-judge)(由另一个子 Agent 评估输出)。

Claude Code 的创造者 Boris Cherny 指出,让模型能够验证自己的工作,能让产出质量提升 2 到 3 倍。

11. 子 Agent 编排 (Subagent Orchestration)

Claude Code 支持三种模式:克隆 (Fork)(复制父级上下文)、队友 (Teammate)(通过文件邮箱通信的独立窗口)和 工作树 (Worktree)(独立的 Git 分支)。OpenAI 则支持将 Agent 作为工具(专家处理特定子任务)或移交(专家接管后续控制权)。

"脚手架"的比喻

"脚手架"这个比喻并非装饰,而是极其精准的。建筑脚手架是临时性的基础设施,让工人们能触及原本够不到的高度。脚手架本身不盖房子,但没有它,工人就上不去高层。

关键洞察在于:房子盖好后,脚手架是要拆除的。 随着模型能力的提升,Harness 的复杂程度应该逐渐降低。

这就是协同进化原则:现在的模型在训练时,就已经考虑了 Harness 的存在。如果你的 Harness 设计得好,当模型升级时,你不需要增加复杂度,性能就会自动提升。