Back/harness engineering

What is an Agent Harness?

Updated 2026-04-19
4 min read
905 words

What is an Agent Harness?

Summary

Agent Harness 是将 AI 模型转变为可用 Agent 的所有代码、配置和执行逻辑的统称。模型提供智能,Harness 提供状态管理、工具执行、记忆、编排和可执行约束。模型是常量,Harness 是变量——同样的模型在不同 Harness 下性能排名可以从 top 5 跌到 top 30 以外。

Core Definition

Agent = Model + Harness — Vivek Trivedy, LangChain

原始模型是无状态文本预测器:接收文本,生成文本,然后遗忘一切。Harness 让它成为 Agent。

即使是最基础的聊天机器人也证明了这一点——当你用循环包装模型来跟踪历史消息并追加新用户输入时,你就构建了一个原始 Harness。

Harness 包含什么

组件 说明
System Prompts 在任何用户消息到达前塑造行为的常驻指令
Tools & MCPs 模型用于行动的模式、描述和执行逻辑
Bundled Infrastructure 文件系统、浏览器、bash、沙箱
Orchestration Logic 子 Agent 生成、模型路由、Agent 间交接
Hooks & Middleware 压缩触发器、确认门、确定性执行强制

Framework vs Runtime vs Harness

层级 示例 角色
Framework LangChain, CrewAI, AutoGPT 提供构建 Agent 的抽象
Runtime LangGraph 管理执行状态和持久化任务流
Harness Claude Code, Codex, Cursor, Builder.io 结合两者并添加领域特定配置、约束和基础设施

Node.js 类比

  • Node = Runtime
  • Express = Framework
  • Next.js = Harness

What a Harness Actually Does

Harness 提供原始模型缺乏的六种基础能力:

1. 持久存储(文件系统 & Git)

模型只能在上下文窗口内操作。文件系统解决了这个问题:

  • Agent 获得工作空间来读取数据、代码和文档
  • 工作可以增量添加和卸载,而非全部保存在上下文中
  • 中间输出在会话间持久化

Git 将文件系统扩展为协调表面:

  • 多 Agent 和人类通过共享文件协调
  • 一个 Agent 向另一个 Agent 交接时,通过文件系统而非共享上下文窗口

2. Bash & 代码执行

预配置工具覆盖 Harness 设计者预期的情况,Bash 覆盖其他一切。

当模型可以编写和执行代码时,它能动态设计自己的工具,而非受限于固定工具集。这就是 Agentic 工作流在 Harness 层面的样子。

3. 沙箱安全执行

Agent 生成的代码在本地运行是安全风险。单一本地环境无法扩展到并行 Agent 工作负载。

沙箱解决两个问题:

  • 隔离执行环境
  • 允许列表命令
  • 预安装工具
  • 浏览器访问用于输出验证
  • 测试运行器用于自我检查

4. 记忆与搜索连续性

记忆文件(如 AGENTS.md)在 Agent 启动时注入上下文。当 Agent 更新此文件,Harness 加载更新版本。这是超越任何单一上下文窗口的持久记忆。

网络搜索和 MCP 工具(如 Context7)解决知识截止日期问题。Harness 处理检索,模型请求信息。

5. 上下文管理对抗上下文腐烂

上下文腐烂(Context Rot):模型性能随上下文窗口填满而下降的现象。

压缩(Compaction):Harness 层面的响应——在接近限制时智能卸载上下文,而非让 API 报错或静默丢弃消息。

工具调用卸载:防止大型工具输出淹没上下文窗口。Harness 可以在结果到达模型前进行摘要、截断或缓存。

6. 编排与 Hooks

生产 Agent 在 Harness 层面需要的七种行为:

  1. 工具输出协议:一个输出,多种渲染(UI vs 模型上下文)
  2. 会话状态:可查询的视图,涵盖失败计数、已尝试方法和循环检测
  3. 系统提醒:三个级别(系统消息种子、附加到用户消息、绑定特定工具)
  4. 停止条件:与会话状态集成,而非孤立标志
  5. 工具强制:序列规则、确认门、速率限制、自动操作
  6. 注入队列:上下文注入的优先级、批处理和去重
  7. Hooks:在每个阶段自定义执行

框架将这七种全部留给你。Harness 是这些决策的所在。

Why Frameworks Alone Aren't Enough

生产失败模式是 Harness 失败

失败 原因
maxSteps 存在但与会话状态脱节 Agent 循环,因为 Harness 没有与行为绑定的停止条件
30 分钟后上下文腐烂 框架没有导致它,Harness 没有预防它
大文件读取淹没上下文窗口 框架正确执行了工具,Harness 没有过滤输出

2025-2026 的转变

Harness 开始与模型一起从第一天就在循环中训练:

  • Claude Code
  • Codex
  • Cursor

这些产品中实现的 Agentic 设计模式不是事后添加的,而是 Harness 设计的一部分。

How to Build or Choose a Harness

六个关键决策:

1. 执行环境

选项 特点 适用场景
本地 快速、便宜 个人开发
Docker 隔离,无云开销 小团队
云沙箱 并行工作负载扩展 生产部署

2. 工具表面积

从小型、经过良好测试的工具集开始,然后添加 Bash 作为通用逃生舱口。每个预配置工具都是你需要维护的表面。

3. 状态与记忆策略

文件系统是 Agent 拥有的最持久的状态存储。用它作为真相来源:

  • AGENTS.md 用于持久记忆
  • Git 用于版本控制和回滚
  • 两个 Agent 需要协调时,通过文件协调

4. 长时程连续性

Ralph Loop(Geoffrey Huntley 提出):Agent 将每个任务视为重复循环——

  1. 每次会话开始时写规划文件
  2. 执行一个任务
  3. 解决任何失败
  4. 在上下文重置前更新文件

5. 验证循环

运行自己测试套件、检查日志、观察浏览器状态的 Agent 在向人类交接前捕获更多错误。

6. 团队访问

  • 个人 Harness:为单个开发者设计
  • 团队 Harness:需要协作层——谁能触发 Agent、谁能看到它们在做什么、谁能干预

生产级 Harness 的 12 个组件(扩展框架)

根据 Anthropic、OpenAI、LangChain 及社区实践的总结,一个生产级 Agent Harness 可细分为 12 个独立组件:

1. 编排循环(Orchestration Loop)

实现思考-行动-观察(TAO/ReAct)循环。复杂性不在循环本身,而在循环管理的所有东西。Anthropic 将其运行时描述为"哑循环"——所有智能在模型里,harness 只管理回合。

2. 工具(Tools)

Agent 的手。处理注册、模式验证、参数提取、沙盒执行、结果捕获及格式化。Claude Code 提供六类工具:文件操作、搜索、执行、网络访问、代码智能和子智能体生成。

3. 记忆(Memory)

  • 短期记忆:单个会话内的对话历史
  • 长期记忆:跨会话持久化(CLAUDE.md、MEMORY.md、JSON 存储、SQLite/Redis Sessions)
  • 关键原则:Agent 把自己的记忆当作"提示",在行动前会对照实际状态验证

4. 上下文管理(Context Management)

核心问题是上下文腐烂:关键内容落在窗口中间位置时,模型性能下降 30% 以上。

生产策略:

  • 压缩:总结对话历史,保留架构决策和未解决 bug
  • 观察遮蔽:隐藏旧的工具输出,但保持工具调用可见
  • 即时检索:维护轻量级标识符,动态加载数据
  • 子智能体委托:每个子智能体广泛探索,只返回 1000-2000 token 摘要

5. 提示词构建(Prompt Construction)

分层组装:系统提示词 → 工具定义 → 记忆文件 → 对话历史 → 当前用户消息。

OpenAI Codex 使用严格优先级栈:服务器控制的系统消息(最高)→ 工具定义 → 开发者指令 → 用户指令(AGENTS.md,32 KB 限制)→ 对话历史。

6. 输出解析(Output Parsing)

现代 harness 依赖原生工具调用。结构化输出通过 Pydantic 模型约束。边缘情况使用 RetryWithErrorOutputParser 等传统方法。

7. 状态管理(State Management)

  • LangGraph:类型化字典流经图节点,reducer 合并更新,检查点支持中断恢复和时间旅行调试
  • OpenAI:四种互斥策略(应用程序内存、SDK 会话、Conversations API、previous_response_id 链接)
  • Claude Code:git 提交作为检查点,进度文件作为结构化草稿本

8. 错误处理(Error Handling)

10 步流程,每步 99% 成功率,端到端成功率仅约 90.4%。错误快速复合。

LangGraph 区分四种错误:

  • 瞬态:带退避重试
  • LLM 可恢复:将错误作为 ToolMessage 返回,让模型调整
  • 用户可修复:中断等待人工输入
  • 意外:冒泡用于调试

9. 防护栏和安全(Guardrails and Safety)

OpenAI SDK 实现三个级别:输入防护栏、输出防护栏、工具防护栏。"绊线"机制触发时立即停止 agent。

Anthropic 在架构上将权限执行与模型推理分离:模型决定尝试什么,工具系统决定允许什么。

10. 验证循环(Verification Loops)

区分玩具演示和生产 agent 的关键:

  • 基于规则的反馈:测试、linter、类型检查器
  • 视觉反馈:Playwright 截图用于 UI 任务
  • LLM 作为评判者:单独子智能体评估输出

Claude Code 创建者 Boris Cherny 指出:给模型验证其工作的方法,质量提高 2-3 倍

11. 子智能体编排(Subagent Orchestration)

Claude Code 支持三种执行模型:Fork(字节相同副本)、Teammate(基于文件的邮箱通信)、Worktree(独立 git 分支)。

OpenAI SDK 支持智能体作为工具和交接。LangGraph 将子智能体实现为嵌套状态图。

12. 循环运作:七步演练

  1. 提示词组装:系统提示词 + 工具模式 + 记忆文件 + 对话历史 + 当前消息
  2. LLM 推理:生成文本、工具调用请求或两者
  3. 输出分类:无工具调用则结束;有则执行;交接则更新当前 agent
  4. 工具执行:验证参数、检查权限、沙盒执行、捕获结果
  5. 结果打包:格式化为 LLM 可读消息,错误作为错误结果返回
  6. 上下文更新:结果附加到对话历史,接近限制时触发压缩
  7. 循环:返回步骤 1,直到终止条件触发

终止条件:无工具调用的响应、超过最大回合限制、token 预算耗尽、防护栏触发、用户中断、安全拒绝。

真实框架实现对比

框架/Harness 核心模式 特点
Claude Agent SDK query() 暴露 harness,流式消息异步迭代器 "哑循环",所有智能在模型里
OpenAI Agents SDK Runner 类,三种模式(异步/同步/流式) 代码优先,原生 Python 表达工作流
Codex Harness 三层架构:Codex Core → App Server → 客户端 所有界面共享同一 harness
LangGraph 显式状态图(llm_call → tool_node → 条件边) 从 AgentExecutor 演变而来,解决扩展性问题
CrewAI 基于角色的多智能体架构(Agent + Task + Crew) Flows 层添加确定性骨干
AutoGen 对话驱动编排,三层架构 五种编排模式:顺序、并发、群聊、交接、magentic

脚手架隐喻与协同进化

建筑脚手架是临时基础设施,使工人能够建造无法触及的结构。关键洞察:建筑完成后,脚手架会被拆除。

随着模型改进,harness 复杂性应该降低。Manus 在六个月内重建了五次,每次重写都删除了复杂性。

协同进化原则:模型现在在循环中使用特定 harness 进行后训练。改变工具实现可能会降低性能,因为这种紧密耦合。

Harness 设计的"未来验证测试":如果性能随着更强大的模型扩展而不增加 harness 复杂性,设计就是合理的。

定义每个 Harness 的七个决策

  1. 单智能体 vs. 多智能体:Anthropic 和 OpenAI 都建议首先最大化单个 agent。仅当工具过载超过约 10 个重叠工具或存在明显独立任务域时才拆分。
  2. ReAct vs. 计划-执行:ReAct 灵活但每步成本更高;计划-执行将规划与执行分离(LLMCompiler 报告快 3.6 倍)。
  3. 上下文窗口管理策略:基于时间的清除、对话总结、观察遮蔽、结构化笔记、子智能体委托。
  4. 验证循环设计:计算验证(测试、linter)提供确定性真相;推理验证(LLM 作为评判者)捕获语义问题但增加延迟。
  5. 权限和安全架构:宽松(快但有风险)vs 限制性(安全但慢)。
  6. 工具范围策略:更多工具通常意味着更差性能。Vercel 从 v0 中删除了 80% 的工具获得了更好结果。原则:暴露当前步骤所需的最小工具集
  7. Harness 厚度:Anthropic 押注薄 harness 和模型改进;基于图的框架押注显式控制。

FAQ

Q: Agent Harness 和 Agent Framework 相同吗?

框架提供构建 Agent 的抽象:工具接口、记忆模式、链原语。Harness 是之上的生产就绪层,添加特定配置、约束和基础设施。LangChain 是框架,Claude Code 是可能内部使用 LangChain 的 Harness。

Q: 什么是 Harness Engineering?

设计和优化 AI Agent 系统非模型层的实践。涵盖工具设计、上下文管理、执行环境、记忆架构和编排逻辑。Terminal Bench 2.0 结果显示它是提升 Agent 性能的主要杠杆,通常比模型选择更有影响力。

Q: 简单 AI 聊天机器人需要 Agent Harness 吗?

如果你的聊天机器人维护对话历史,那个循环已经是原始 Harness。添加工具、记忆或多轮推理时,显式 Harness 设计就很重要了。

Q: 哪些 Agentic AI Framework 可以与 Harness 配合使用?

LangChain、LangGraph、CrewAI、AutoGPT、OpenAI Agents SDK 都在框架或运行时层操作。Claude Code、DeepAgents、Builder.io 等平台 Harness 位于其上,为特定用例配置这些框架。

Key Takeaway

模型包含智能。Harness 是让智能可靠、有状态、可随时间行动的东西。

同样的模型仅通过改变 Harness 就可以从 top 30 以外提升到 top 5 的基准位置。框架选择不如 Harness 设计重要。

Sources

Linked from