Agent Harness 是什么?为什么它正在成为 Agent 工程的关键一层

从模型调用、Agent Loop、Tool、Context、State 到 Trace,解释 Agent Harness 在 Agent 系统里到底负责什么。

发布 ·更新 ·约 17 分钟 ·hugfeature

Agent Harness 系列 #01
从入门、工具、实操一路写到 Trace、Failure Regression 和 Quality Gate。

如果把大模型看成 Agent 的“大脑”,那么 Harness 更像它外面的运行时和控制层。

模型负责判断“下一步想做什么”;Harness 负责把这个判断变成一次真正的执行:准备上下文、暴露工具、执行 Tool Call、维护状态、处理权限、记录 Trace,再把结果送回模型,直到任务结束。

这也是为什么一个能聊天的 LLM,和一个能够连续工作几十分钟甚至几小时的 Agent,中间还差了很大一层工程系统。

这层东西,现在越来越常被叫做:

Agent Harness。

一、先给一个工程化定义

微软目前对 Agent Harness 的定义很直接:

它是把语言模型变成能够执行工作的 Agent 的运行时脚手架。

它负责驱动模型调用和工具调用、管理上下文和会话状态、应用审批策略,并让 Agent 能持续推进多步骤任务。

VS Code 对 Harness 的解释也很接近:模型负责推理和选择动作,Harness 负责协调这些动作真正执行,包括准备请求、调用工具、处理审批、保存结果和维护 Session。

因此,如果让我用一句更工程化的话定义:

Agent Harness = 驱动 Agent Loop,并控制 Agent 如何获取上下文、调用工具、维护状态和完成执行的运行时控制层。

这里需要先提醒一点:Harness 还不是一个边界完全统一的行业术语。

不同产品对 Harness、Runtime、Framework 的划分不完全一样。比如 Cloudflare 会把 Runtime 和 Harness 分开:Runtime 提供持久状态、Session、调度等基础设施,Harness 更偏向模型调用、Prompt 构造、Tool Loop 和生命周期行为;微软则直接把 Harness 称为 runtime scaffolding。

所以讨论 Harness 时,与其纠结名词边界,不如看它到底承担了哪些执行职责。

二、为什么最近突然开始频繁看到 Harness

因为 Agent 正在从“一次模型调用”变成长时间运行的执行系统。

2026 年,Harness 这个词已经明显从少数工程团队的内部说法进入主流 Agent 产品。

微软在 Agent Framework 中正式提供了 Harness,把 Loop、Planning、Memory、Context Management、Approval 和 Telemetry 组合成一套可直接使用的执行层。

VS Code 的 Agent 文档也专门增加了 Agent Harness 概念,用它解释 Model、Tool、Session、Execution Environment 是如何被连接起来的。

OpenAI 在 2026 年 9 月发布 Agents API 时,也明确提到把支撑 Codex 的 harness + infrastructure 提供给开发者:Harness 负责 Context、Tool 和 Subagent 等 Agent 行为,而底层基础设施保证长时间任务可以持续运行。

这背后其实是同一个变化:

Agent 的主要工程问题,正在从“模型能不能回答”,转向“任务能不能持续、受控地执行”。

三、没有 Harness 时,你得到的只是一次模型调用

最简单的 LLM 应用大概是:

User
  ↓
Model
  ↓
Answer

但一个 Agent 至少要变成:

Goal
  ↓
Build Context
  ↓
Model
  ↓
Tool Call?
  ├─ No  → Final Result
  │
  └─ Yes
       ↓
   Permission / Validation
       ↓
   Execute Tool
       ↓
   Observation
       ↓
   Update State
       ↓
      Model
       ↓
      ...

模型只负责其中一部分。

真正让这条循环跑起来的是模型外面的系统。

伪代码大致是:

while not done:
    context = build_context(state)

    decision = model(context, tools)

    if decision.tool_call:
        check_permission(decision.tool_call)
        result = execute_tool(decision.tool_call)

        trace.record(decision, result)
        state.update(result)
    else:
        done = True
        final_result = decision.output

真正进入工程环境后,还会继续加入:

  • Timeout
  • Retry
  • Tool Approval
  • Token / Cost Budget
  • Context Compaction
  • Session Persistence
  • Human in the Loop
  • Error Recovery
  • Trace
  • Verification

这些东西加起来,才逐渐形成一个真正可用的 Harness。

四、Harness 到底管什么

我现在更倾向于把 Harness 的职责拆成七类。

1. Context:模型这一次到底能看到什么

Agent 每一次调用模型之前,都要重新构造 Context。

其中可能包括:

  • System Instruction
  • 用户目标
  • 历史消息
  • 文件内容
  • Memory
  • 当前任务状态
  • Tool Schema
  • 上一步 Observation

长任务跑到后面,Context 不可能无限增长。

所以 Harness 还要决定:

保留什么、丢掉什么、什么时候做摘要或 Compaction。

这已经不是 Prompt Engineering,而是 Runtime Engineering。

2. Tool:模型想调用工具,谁真正执行

模型通常只会返回:

我要调用 tool_x,参数是 xxx。

真正执行工具的是 Harness。

因此 Harness 至少要处理:

  • Tool Registry
  • 参数校验
  • 调用路由
  • 执行结果回传
  • Tool Error
  • 并发
  • Timeout

一旦工具存在副作用,还要继续处理权限和审批。

3. Loop:什么时候继续,什么时候结束

Agent 最基本的结构就是循环:

Model → Action → Observation → Model

但这个 Loop 不能无限运行。

Harness 要知道:

  • 最大迭代次数是多少;
  • 连续失败多少次终止;
  • 是否允许 Retry;
  • 是否需要用户补充信息;
  • 哪些状态算完成;
  • 哪些状态必须中断。

这其实已经很接近一个状态机。

4. State:任务执行到哪了

对于几分钟的简单任务,消息历史可能就够。

但长任务通常还需要保存:

  • Current Goal
  • Plan
  • Completed Steps
  • Pending Tasks
  • Tool Results
  • Artifacts
  • Checkpoint
  • Resume State

否则 Agent 一旦中断,就可能不知道自己之前做到了哪里。

5. Permission:模型“想做”不代表系统“允许做”

这是 Harness 和 Prompt 最关键的区别之一。

Prompt 可以告诉模型:

删除文件前必须确认。

但 Prompt 本质上只是指导。

Harness 可以真正做到:

delete_file()
     ↓
Need Approval?
     ↓
 YES ──→ Pause
          ↓
       Human Approve
          ↓
        Execute

可靠性不能只建立在模型“记得遵守规则”上。

真正重要的边界,需要由模型之外的执行层控制。

6. Trace:任务完成以后,能不能知道刚才发生了什么

Agent 一旦进入多步骤执行,只保留最终结果是不够的。

Harness 最好能够记录:

  • Model Turn
  • Tool Call
  • Tool Result
  • Handoff
  • Guardrail
  • State Change
  • Error
  • Retry

OpenAI Agents SDK 的 Tracing 就会记录模型生成、Tool Call、Handoff、Guardrail 等事件。

这里开始出现 Harness 和 Agent Reliability 的连接点:

没有 Trace,就很难证明一个 Agent 为什么成功,也很难定位它为什么失败。

7. Recovery:失败以后怎么办

真实 Agent 一定会失败。

网络超时、Tool Error、Context 丢失、模型选错工具、环境状态变化,都可能发生。

所以 Harness 不应该只负责:

把 Agent 跑起来。

还应该逐步具备:

Agent 出错以后怎么继续。

包括 Retry、Fallback、Checkpoint、Resume、Rollback,以及后面我们会专门讨论的 Failure Regression。

五、Harness、Framework、Workflow、Runtime 到底什么关系

这是最容易混在一起的几个词。

概念 更关注什么
Model 推理、生成、选择下一步动作
Agent 一个有目标、指令和能力的执行主体
Agent Framework / SDK 构建 Agent 的开发组件和抽象
Workflow 任务应该按照什么流程或图执行
Runtime 状态、Session、调度、环境等执行基础设施
Harness 驱动 Agent Loop,并把 Model、Context、Tool、State、Policy 组合起来运行

它们并不是互斥的产品类别。

一个 Agent Framework 完全可以内置 Harness。

一个 Harness 也可能建立在一个 Runtime 上。

一个 Workflow Engine 同样可能承担部分 Harness 能力。

例如 OpenAI Agents SDK 提供 Agent Loop、Tool、Guardrail、Session 和 Trace。官方更常把它描述为 SDK 和 higher-level runtime,但从职责上看,它已经覆盖了 Harness 的大量核心能力。

所以以后看到某个产品时,不要先问:

它到底算 Framework 还是 Harness?

更有效的问题是:

Agent Loop 是谁驱动的?Context 谁管理?Tool 谁执行?State 存在哪里?Permission 谁控制?Trace 谁记录?

把这几个问题回答清楚,架构基本就看明白了。

六、为什么 Prompt 解决不了 Harness 的问题

这是我认为最值得区分的一点。

很多 Agent 系统早期都会不断往 System Prompt 里加规则:

  • 不要重复调用工具;
  • 出错之后重试;
  • 修改文件之前先检查;
  • 完成之后执行测试;
  • 不允许删除重要文件。

Prompt 确实能够改善行为。

但 Prompt 解决的是:

模型应该怎么做。

Harness 解决的是:

系统允许它怎么做,以及做了以后系统怎么处理。

例如“最多调用工具 20 次”,如果只写在 Prompt 里,最终还是模型自己遵守。

如果 Harness 维护一个计数器:

tool_calls >= 20
       ↓
 terminate_run()

这才是真正的执行约束。

所以对于 Agent Reliability 来说,有一个非常重要的边界:

能用 Runtime 约束的东西,不应该只依赖 Prompt。

七、一个最小 Harness 至少需要什么

如果我们完全不用 Agent Framework,自己从零写一个最小 Harness,我认为至少需要五个模块:

┌──────────────────────────────┐
│          Agent Harness       │
│                              │
│  Context Builder             │
│        ↓                     │
│  Model Adapter               │
│        ↓                     │
│  Loop / State Machine        │
│        ↓                     │
│  Tool Dispatcher + Policy    │
│        ↓                     │
│  Trace / Result              │
└──────────────────────────────┘

有了这五块,一个最基础的 Agent 才算真正跑起来。

再继续往生产环境走,会逐步增加:

Session
Checkpoint
Approval
Budget
Sandbox
Recovery
Evidence
Evaluation
Regression
Quality Gate

而这正是 Harness 系列后面会继续拆的内容。

八、怎么判断一个系统有没有真正的 Harness

以后看到一个所谓 Agent 平台,可以直接问这几个问题:

  1. Agent Loop 在哪里?
  2. Context 是谁构造和裁剪的?
  3. Tool Call 是谁执行和校验的?
  4. Session / State 怎么保存?
  5. 危险动作能不能在模型之外被阻断?
  6. 一次运行结束后能不能完整重建执行轨迹?

如果这些问题没有明确答案,那么它可能只是:

LLM + Tools + 一些 Prompt。

它当然也能工作,但离真正可控的 Agent Runtime 还有距离。

九、Harness 真正有意思的地方,是它开始连接 Reliability

如果目标只是做一个 Demo,Harness 只需要把 Loop 跑通。

但一旦 Agent 开始修改代码、操作 ERP、调用外部 API,甚至进入真实生产流程,问题就会变成:

  • Agent 做的事情是否受控?
  • 最终结果有没有独立证据?
  • 中间有没有产生危险副作用?
  • 出错以后能不能定位?
  • 同样的失败以后会不会再次发生?

于是 Harness 的边界会自然向外扩展:

Agent
  ↓
Harness
  ↓
Trace
  ↓
Verification
  ↓
Failure
  ↓
Regression
  ↓
Quality Gate

这也是我想写这个系列的原因。

Agent Harness 不只是让 Agent“能跑起来”的东西。

当 Agent 开始进入真实工程系统后,它还会逐渐承担另外一个角色:

成为 Agent Reliability 真正落地的执行边界。

下一篇:Agent、Framework、Workflow、Runtime、Harness 到底有什么区别?


参考资料

继续阅读这个系列

Agent Harness:从入门到 Reliability →
  1. Agent Harness 是什么?为什么它正在成为 Agent 工程的关键一层 · 当前篇
  2. Agent、Framework、Workflow、Runtime、Harness 到底有什么区别?
  3. 2026 Agent Harness / Runtime 工具盘点:主流方案怎么选
  4. OpenAI Agents SDK 教程:安装、Tool、Session 与 Trace
  5. smolagents 教程:用 CodeAgent 跑通一个 Agent Loop
  6. 手写 Agent Harness:用 Python 实现 Loop、Tool、Policy 与 Trace
  7. 一个 Agent Loop 到底是怎么跑起来的?
  8. Agent 为什么需要 Harness:模型负责决策,系统负责约束
  9. Harness 到底应该管什么?从 Agent Loop 到 Reliability Boundary
  10. Trace 不是日志:Harness 应该记录哪些执行证据?
  11. Agent 调错工具怎么办:Timeout、Retry、Budget 与 Side Effect
  12. 结果正确就够了吗?给 Agent 设计 Evidence Contract
  13. 一次 Agent 失败,怎么变成一条 Regression Case?
  14. Harness 和 Eval 平台到底是什么关系?
  15. Agent Harness 的终点:从执行引擎走向 Quality Gate
  16. 让 Agent 下班后继续跑:有界自主运行怎么设计?

沿着问题继续探索

从执行机制走向验证与交付。

相关文章

在 GitHub 反馈 ↗