Agent Harness 技术综述:模型之外,智能体如何持续完成真实任务¶
同一个模型接入不同的编程助手、研究 Agent 或企业平台,完成率、速度和安全性可能相差很大。差异不只来自提示词,还来自模型周围那套负责组织上下文、调用工具、保存状态、执行代码、控制权限和验证结果的系统。这套系统通常被称为 Agent Harness。
“Harness”原意是挽具或成套装备。在 Agent 领域,它强调的是:把模型的推理能力接到真实环境上,同时约束模型能够做什么、怎样留下证据、失败后从哪里继续。本文所说的 Harness 均指 Agent Harness,与同名的软件交付产品 Harness.io 无关。
一页结论¶
- Harness 不是模型包装器,而是 Agent 的运行与治理层。 模型提出下一步动作,Harness 负责准备上下文、执行动作、保存状态、施加权限、判断是否继续,并交付可以核验的结果。
- 工具数量不是核心指标,工具接口质量才是。 参数语义、返回结构、错误信息、幂等性和反馈速度,都会直接影响模型的决策质量。SWE-agent 将这一层称为 Agent-Computer Interface(ACI)。
- 状态必须独立于进程。 长任务会遇到模型限流、工具超时、Pod 重启、人工审批和上下文压缩;仅靠内存中的消息列表无法可靠恢复。
- “模型建议执行”与“系统允许执行”必须分开。 Harness 应在工具调用边界检查身份、参数、资源、网络、预算和审批策略,再把获准动作交给沙箱或业务系统。
- 验证器决定任务是否真的完成。 测试通过、文件存在、接口返回 2xx 或模型说“已完成”,都可能只是中间信号。生产 Harness 需要针对任务定义机器可核验的完成条件。
- 确定性工作流和自主 Agent 应组合使用。 让代码负责交易、审批和不可逆操作,让模型负责理解、规划、信息提取和异常处理,通常比完全开放的循环更稳定。
- MCP、沙箱、模型网关都不是完整 Harness。 MCP 解决连接协议,沙箱解决执行隔离,模型网关解决模型访问;Harness 把这些能力编排为一条可恢复、可审计的任务链。
- Kubernetes 适合承载 Harness,但不能自动赋予它可靠性。 生产落地仍需拆分控制面与执行面,使用持久事件、任务队列、最小权限身份、网络策略、独立工作区和完整 Trace。
1. 用一个生活场景理解 Harness¶
可以把模型想象成一位经验丰富的工程师。只给他一个聊天框,相当于让他隔着电话回答问题;给他一台电脑、代码仓库、终端和浏览器,他才可能真正修改和验证系统。
但企业不会只把电脑和管理员密码交给工程师,还会提供工单、门禁、审批、开发环境、版本管理、监控和审计:
| 现实组织中的设施 | Agent 系统中的对应能力 |
|---|---|
| 工单和验收条件 | 任务、约束与完成标准 |
| 工作台和资料夹 | 上下文、工作区与记忆 |
| 工具柜 | Tool Registry、MCP Server、企业连接器 |
| 门禁和审批单 | 身份、策略、Guardrail、Human-in-the-loop |
| 实验室 | 容器、浏览器、VM 或远端 Sandbox |
| 工作日志和监控 | Event Log、Trace、Metrics、Audit Log |
| 代码评审和质检 | 测试、规则校验、独立 Verifier |
模型负责判断,Harness 提供完成任务所需的工作制度和基础设施。一个便于工程讨论的表达是:
其中 Model 决定“下一步建议做什么”,Harness 决定“如何让这一步在真实系统中安全、连续、可验证地发生”。DeepSeek Harness 的官方介绍也用“Agent = Model + Harness”强调这一关系。DeepSeek Harness
2. Harness 与相邻概念有什么区别¶
不同项目对 Agent Runtime、Framework、Orchestrator 和 Harness 的命名并不统一,判断时应看职责,而不是只看产品名称。
| 概念 | 主要解决的问题 | 单独使用时缺少什么 |
|---|---|---|
| 模型 API | 生成文本、推理和 Tool Call | 任务状态、实际执行、权限、恢复与验收 |
| Agent SDK / Framework | 用代码定义 Agent、工具、交接和循环 | 未必提供隔离执行、多租户治理和生产运维 |
| 工作流引擎 | 固定步骤、分支、重试和补偿 | 开放任务中的动态规划与工具选择 |
| Agent Runtime | 驱动轮次、状态与工具执行 | 有些 Runtime 只提供底层执行原语,没有完整工作台和策略 |
| MCP | 统一 Agent 与工具、资源和提示词的连接协议 | 任务循环、状态、沙箱、审批、验证与 UI |
| Sandbox | 隔离代码、Shell、浏览器和文件系统 | 模型循环、上下文、业务授权和任务编排 |
| 模型网关 | 模型路由、限流、配额、密钥和审计 | 工具执行、工作区、任务状态和完成判定 |
| Harness | 把上下文、模型、工具、状态、执行、策略和验证组成任务闭环 | 仍需选择模型、工具、存储和基础设施实现 |
MCP 架构中的 Host 负责权限、连接生命周期、上下文聚合和编排,Server 暴露工具、资源和提示词。它是 Harness 很重要的工具接入边界,但协议本身不会决定 Agent 怎样循环、何时暂停或如何恢复。
3. 一套完整 Harness 的逻辑架构¶
flowchart TB
U[用户、API 或事件] --> T[任务与会话服务]
T --> C[上下文编译器]
C --> L[模型适配与路由]
L --> A[Agent Loop 与调度器]
A --> P{策略与审批}
P -->|允许| R[工具注册表]
P -->|暂停| H[人工处理]
R --> X[沙箱、浏览器或业务系统]
X --> V[结果验证器]
V -->|继续| C
V -->|完成| O[答案、Diff、报告或业务回执]
H --> A
S[(事件、状态与制品)]
T <--> S
C <--> S
A <--> S
X --> S
V --> S
E[Trace、Metrics、Audit] -.观测.-> T
E -.观测.-> L
E -.观测.-> R
E -.观测.-> X
这张图中最重要的边界是:模型只提出动作,策略层决定能否执行,执行环境产生事实,验证器判断事实是否满足目标。 把四者混为一体,最容易出现越权、假完成和无法恢复的问题。
3.1 上下文编译器¶
上下文不是把全部聊天记录直接塞给模型。Harness 需要根据当前任务和 Token 预算,组合:
- 系统指令、组织规则和用户约束;
- 当前计划、待办项和完成标准;
- 工具定义、参数 Schema 与权限范围;
- 检索结果、仓库文件、页面和业务数据;
- 历史摘要、最近工具结果和失败原因;
- 时间、身份、环境、预算和风险等级。
成熟实现还要记录每次请求中模型实际看到了什么。否则即使保存了原始对话,也无法解释模型为何在某一步做出特定决定。
上下文压缩也不能只追求更短。身份边界、用户明确约束、未完成事项、来源和外部操作回执属于必须保留的信息;工具输出中的重复日志和已经沉淀为状态的内容才适合裁剪。
3.2 模型适配与路由¶
模型层除了兼容不同 API,还要处理流式输出、Tool Call、结构化结果、重试、限流、缓存和降级。生产系统应把以下版本一起写入 Trace:
只记录模型名称无法复现实验。同一个模型换了工具描述、上下文顺序或停止条件,任务表现就可能变化。
3.3 工具与 ACI¶
工具是模型作用于外部世界的接口。一个对人类很方便的通用 Shell,对模型不一定是最佳接口;一个窄而清晰的 create_change_request() 往往比一组模糊的 HTTP 或数据库工具更可靠。
好的工具接口通常具备:
- 清楚的动词、参数类型、单位和默认值;
- 结构化、稳定且长度受控的返回值;
- 能区分“参数错误、权限拒绝、暂时失败、业务冲突”的错误码;
- 查询状态、重试、取消和幂等能力;
- 明确声明只读、可逆、需审批或不可逆;
- 返回可用于验证的资源 ID、版本号和回执。
SWE-agent 论文把为 Agent 设计的计算机接口称为 ACI,并通过软件工程任务说明:接口设计本身会显著影响 Agent 表现。因此,评估 Harness 时不能只统计“接了多少工具”,还要测试模型是否能稳定理解和使用这些工具。
3.4 Agent Loop 与停止条件¶
最小 Agent Loop 看似简单:
flowchart TD
S[载入任务状态] --> C[编译本轮上下文]
C --> M[请求模型]
M --> D{模型输出}
D -->|回答| V[验证完成条件]
D -->|工具调用| P{策略检查}
P -->|拒绝| F[记录拒绝原因]
P -->|需审批| H[持久化并暂停]
P -->|允许| E[执行工具]
E --> R[追加结果与回执]
F --> C
R --> V
H -->|批准、编辑或拒绝| C
V -->|未完成| B{预算与停止规则}
B -->|继续| C
B -->|耗尽| X[结束并说明未完成]
V -->|通过| O[交付结果和证据]
真正困难的是停止语义。Harness 至少要同时考虑:
- 任务完成条件是否通过验证;
- 最大轮次、Token、费用和墙钟时间;
- 连续重复动作或无进展循环;
- 用户取消、策略拒绝或人工接管;
- 下游不可用是否值得重试;
- 是否已产生部分成功和外部副作用。
Anthropic 将预定义代码路径称为 Workflow,将由模型动态决定过程和工具使用的系统称为 Agent,并建议从满足需求的简单方案开始。Building Effective Agents
3.5 状态、事件日志与 Checkpoint¶
长任务的状态不能只存在于一个进程的内存里。建议把信息分成三类:
| 类型 | 内容 | 推荐保存方式 |
|---|---|---|
| 事实事件 | 用户消息、模型请求、Tool Call、执行结果、审批和状态变化 | 只追加事件流,保留顺序和因果关系 |
| 派生状态 | 当前步骤、计划、预算、工具状态和等待原因 | 从事件计算并建立 Checkpoint |
| 大型制品 | 仓库快照、日志、截图、报告、Diff 和数据文件 | 对象存储或持久卷,事件中只保存引用与哈希 |
DeepSeek Harness 使用只追加 Session Log,让 resume、fork、search 和 replay 基于同一事件流;LangGraph Persistence则在执行步骤保存 Checkpoint,以支持 Human-in-the-loop、故障恢复和 time travel。两者实现不同,但都体现了同一原则:任务事实必须比运行任务的进程活得更久。
3.6 执行环境与 Sandbox¶
Agent 可能执行 Shell、Python、浏览器自动化、文件编辑、编译或第三方 CLI。隔离级别应按风险选择:
| 执行环境 | 启动与资源成本 | 隔离强度 | 典型场景 |
|---|---|---|---|
| 宿主机进程 | 低 | 低 | 可信单用户、本地开发 |
| 容器 | 低 | 中 | 常规代码和数据任务 |
| gVisor / Kata | 中 | 中到高 | 多用户、未知依赖和较高风险代码 |
| MicroVM / VM | 高 | 高 | 强租户隔离、浏览器和不可信代码 |
| 远端业务 API | 取决于服务 | 由接口和授权决定 | 企业记录、发布、支付和生产变更 |
OpenHands Runtime将任意代码放进 Docker Sandbox,以获得隔离、一致性、资源控制和可复现环境。需要注意,容器或 VM 只解决执行边界;业务系统是否允许某个用户执行某项操作,仍要由身份和授权层判断。
更完整的 Sandbox 对比和 Kubernetes 实验见:Agent Sandbox 选型与分析与Firecracker Kubernetes 实验。
3.7 策略、审批与身份¶
策略应在动作边界生效,而不是只写进 System Prompt。对于每次 Tool Call,Harness 可以按以下顺序判断:
- 当前用户和任务身份能否使用这个工具;
- 参数是否符合 Schema、数据范围和资源限制;
- 操作是只读、可逆、需审批还是禁止;
- 凭据能否按本次任务换取短期最小权限令牌;
- 网络目的地和数据出站是否允许;
- 是否超出费用、调用次数和运行时间预算;
- 是否需要人工批准、编辑参数或拒绝。
审批必须是耐久状态:进程重启后仍能看到待审批动作,批准后也不能重复执行。OpenAI Agents SDK Human-in-the-loop支持序列化运行状态,在批准、编辑或拒绝后恢复;LangChain Human-in-the-loop也把工具策略与 Checkpointer 结合起来。
3.8 验证器¶
模型输出“已完成”只是一个声明。验证器应尽量使用独立于生成过程的证据:
| 任务 | 较弱的完成信号 | 更可靠的验证 |
|---|---|---|
| 修复代码 | 模型说问题已修复 | 指定测试通过、Diff 满足范围、静态检查无新增问题 |
| 生成报告 | 文件已经写出 | 必填章节、引用、数据一致性和渲染结果通过检查 |
| 修改配置 | API 返回成功 | 读取目标资源,核对版本、实际字段和控制器状态 |
| 发布内容 | HTTP 2xx | 获得发布 ID,并从目标系统读取最终状态 |
| 数据分析 | 得到一段结论 | 输入快照、计算过程、单位和关键数字可复算 |
验证失败时,应把结构化差异反馈给 Agent,而不是只返回“失败”。这样模型才能知道是缺少文件、数值不一致,还是外部状态尚未收敛。
3.9 可观测性与评测¶
Harness 的 Trace 应能回答:任务为何这样执行、时间和费用花在哪里、哪个动作改变了外部系统、失败后能否恢复。
Run
├── Turn / Step
│ ├── Context build
│ ├── Model generation
│ ├── Policy / Approval
│ ├── Tool execution
│ │ └── Sandbox or business API
│ └── Verification
└── Final artifact and outcome
OpenAI Agents SDK Tracing用 Trace 和 Span 表达 Agent、Generation、Function、Guardrail 与 Handoff;OpenTelemetry GenAI 语义约定也已覆盖 Agent、Workflow、Conversation、Tool Call 和 Token Usage 等概念。工具参数和结果可能含有凭据、个人信息或源代码,采集时必须分级、脱敏和限制保留周期。
生产指标至少应覆盖:
| 维度 | 推荐指标 |
|---|---|
| 质量 | 任务完成率、验证通过率、首次通过率、人工返工率 |
| 性能 | 端到端延迟、模型延迟、工具延迟、排队和审批等待时间 |
| 成本 | 每个已验收任务的 Token、模型费用、Sandbox 时长和人工时间 |
| 可靠性 | 重试率、恢复成功率、重复副作用、无进展循环和超时率 |
| 安全 | 策略拒绝、越权尝试、敏感数据出站、审批绕过和异常插件调用 |
| 运维 | 活跃任务、积压、执行池利用率、版本分布和依赖故障 |
只看每次模型调用的准确率,会漏掉 Harness 带来的大部分差异。更有用的成本公式是:
4. 为什么同一个模型在不同 Harness 中表现不同¶
模型是 Agent 能力的上限之一,Harness 决定这份能力能否稳定转化为任务结果。
| 变量 | 对结果的影响 |
|---|---|
| 上下文选择 | 相关文件是否完整、规则是否冲突、历史摘要是否丢失关键约束 |
| 工具接口 | 模型能否理解参数、错误是否可恢复、返回值是否过长或含糊 |
| 执行反馈 | 测试、页面、命令和业务系统是否及时返回真实环境状态 |
| 循环策略 | 何时重新规划、怎样防止重复、什么时候停止或求助 |
| 状态恢复 | 限流、断网、Pod 重启和审批等待后能否从准确位置继续 |
| 验证方法 | 是接受模型自报完成,还是使用独立、可复现的检查 |
| 权限设计 | 是因权限过大产生风险,还是因工具被过度限制无法完成任务 |
| 延迟与预算 | 工具往返太慢或预算太小,会迫使模型选择次优捷径 |
因此,模型评测和 Harness 评测应分开:
- 固定 Harness,比不同模型的任务完成率;
- 固定模型和推理参数,比不同上下文、工具和循环策略;
- 回放固定工具结果,定位模型决策差异;
- 注入超时、限流、Pod 重启和审批延迟,检查恢复语义;
- 对相同黄金任务做版本回归,避免提示词或工具升级造成隐性退化。
5. Workflow、受约束 Agent 与开放 Agent¶
生产系统不必在“全是流程”和“完全自治”之间二选一。
| 形态 | 谁决定路径 | 优点 | 适用范围 |
|---|---|---|---|
| 确定性 Workflow | 代码 | 可预测、易审计、易补偿 | 对账、审批、发布流水线、固定业务流程 |
| 受约束 Agent | 模型在允许的状态和工具内选择 | 兼顾灵活性和治理 | 客服处理、工单分类、代码修改、研究任务 |
| 开放 Agent | 模型动态规划并使用通用工具 | 能处理边界不清的复杂任务 | 探索、个人助手、低风险且可复核的工作 |
常见的生产组合是:入口由 Workflow 完成身份、参数和任务分类;中间把模糊问题交给 Agent 调查或生成候选方案;高风险动作再回到确定性 API、审批和事务系统。这样既保留模型处理例外的能力,也能让关键副作用有清楚的控制点。
6. 主流实现的侧重点¶
以下项目不在同一抽象层,表格用于观察它们怎样覆盖 Harness 能力,而不是做简单排名。
| 项目 | 主要定位 | 突出的 Harness 能力 | 需要补齐或注意 |
|---|---|---|---|
| DeepSeek Harness | 插件化 Agent Harness | Cordis 插件内核、模型/工具/会话/沙箱 seam、只追加会话日志、多种运行模式 | 仍是 Developer Preview;企业认证、多租户和远端执行需自行集成 |
| Deep Agents + LangGraph | 应用 Harness + 耐久执行 Runtime | 规划、子 Agent、文件系统、Checkpoint、恢复、HITL 与图编排 | 开发者仍需设计状态、工具、存储和部署边界 |
| OpenAI Agents SDK | 轻量 Agent SDK | Agent、Tool、Handoff、Guardrail、Session、Tracing、HITL 与 Sandbox Agent | 强隔离、企业工具授权和平台控制面仍需按场景建设 |
| OpenHands | 软件开发 Agent 平台 | Agent Server、Conversation、Workspace、Event、终端和代码 Sandbox | 面向软件工程场景;生产部署需要进一步治理模型、网络和租户 |
| SWE-agent | 软件工程研究 Harness | 强调 ACI、任务环境和可重复评测 | 重点是研究与基准,不是通用企业 Agent 平台 |
DeepSeek Harness 的插件架构、Agent Loop 和会话持久化可继续阅读仓库深度解析;Docker、Compose、Helm 与 StatefulSet 实践见容器化部署。
7. 可靠性:重试不等于恢复¶
Harness 的一次任务可能持续几分钟到数小时。可靠性设计的重点不是无条件重试,而是知道动作是否发生、能否安全重放以及应该从哪里继续。
| 故障位置 | 推荐处理 | 关键前提 |
|---|---|---|
| 模型请求超时且无响应 | 按请求 ID 重试 | Provider 支持幂等或确认未生成可消费结果 |
| 只读工具失败 | 指数退避并重试 | 工具没有副作用,错误可分类 |
| 写工具连接中断 | 先按幂等键查询状态,再决定重试 | 工具有操作 ID、状态查询和回执 |
| Sandbox / Pod 消失 | 从最近 Checkpoint 新建执行环境 | 工作区、事件和制品独立持久化 |
| 等待人工审批 | 释放计算资源,耐久暂停 | 审批对象、参数和状态已保存 |
| 上下文压缩 | 保存摘要的来源和未完成约束 | 能回到原始事件与制品 |
| 下游部分成功 | 执行补偿或进入人工处理 | 预先定义补偿动作和所有权 |
对外部副作用,系统很难凭空实现“恰好一次”。更现实的组合是:
例如 Agent 提交发布请求后连接中断,Harness 不应直接再次发布,而应先用 operation_id 查询目标系统;只有确认未执行时才重试。
8. 安全:把不可信内容与可执行指令分开¶
Agent 同时读取网页、文档、Issue、邮件和工具结果,这些内容可能包含 Prompt Injection。Harness 应把它们视为数据,并由可信策略决定哪些内容能够影响动作。
生产基线包括:
- 每个任务使用独立身份和短期凭据,不共享长期管理员密钥;
- 工具采用 allowlist,写操作使用窄接口和结构化参数;
- 浏览内容、仓库内容和工具结果不自动升级为系统指令;
- Sandbox 限制 CPU、内存、磁盘、进程、系统调用、挂载和网络出口;
- 对下载、插件和 Skill 建立来源、签名、固定版本和扫描机制;
- 高风险动作在执行前审批,审批页面展示真实参数和影响范围;
- Trace 与日志默认不采集密钥,并对源码、个人信息和业务数据分级;
- 对间接提示注入、权限升级、记忆污染、计划操纵和重复副作用做红队测试。
提示词中的“不要泄露密钥”不能代替执行时的密钥隔离;模型遵守规则也不能代替后端授权。
9. Kubernetes 上的生产架构¶
Kubernetes 能为 Harness 提供资源调度、故障重建、身份、网络和隔离原语。推荐把长生命周期控制面与短生命周期执行面拆开:
flowchart TB
U[用户、Webhook、消息入口] --> G[API Gateway、OIDC]
G --> H[Harness Coordinator]
H --> Q[(任务队列)]
H <--> DB[(任务事件与 Checkpoint)]
H <--> OBJ[(制品与工作区快照)]
H --> MG[模型网关]
MG --> MS[托管或私有模型服务]
Q --> EC[Executor Controller]
EC --> J1[每任务 Job]
EC --> J2[Warm Sandbox Pool]
J1 --> TG[Tool Gateway]
J2 --> TG
TG --> B[Git、浏览器、数据与业务 API]
SA[ServiceAccount 与短期凭据] -.身份.-> J1
NP[NetworkPolicy] -.网络.-> J1
RC[RuntimeClass] -.隔离.-> J1
PV[PVC 或对象存储] -.工作区.-> J1
H --> OT[OpenTelemetry Collector]
EC --> OT
J1 --> OT
J2 --> OT
OT --> OBS[Prometheus、Grafana、Loki、Tempo]
9.1 Kubernetes 原语怎样映射到 Harness¶
| Harness 需求 | Kubernetes 原语 | 生产注意事项 |
|---|---|---|
| 无状态 API 与 Coordinator | Deployment、Service、HPA | 会话和任务状态不能只存在 Pod 内存 |
| 有界的一次性执行 | Job | 设置超时、重试上限、TTL 和幂等恢复;Job只保证 Pod 重建,不理解业务副作用 |
| 低延迟执行 | 预热 Sandbox Pool | 池中环境必须在分配前清理,避免跨租户残留 |
| 持久任务事实 | PostgreSQL / Event Store | 事件、Checkpoint 与制品引用要有统一 Run ID |
| 大型工作区和制品 | PVC、CSI、对象存储 | 区分临时工作盘与长期制品;记录版本和哈希 |
| 任务身份 | ServiceAccount、OIDC、Workload Identity | 每类工具使用最小权限,不挂载默认高权限 Token |
| 网络出口控制 | NetworkPolicy、Egress Gateway、DNS Policy | NetworkPolicy依赖 CNI 实现,并且主要工作在 L3/L4 |
| 强隔离 | RuntimeClass、gVisor、Kata、MicroVM | 按任务风险分层,验证宿主机内核、设备和存储边界 |
| 资源公平与成本控制 | ResourceQuota、LimitRange、PriorityClass、Kueue | 给模型推理和 Sandbox 分开核算资源;防止单个长任务占满队列 |
| 可观测性 | OTel Collector、Prometheus、Loki、Tempo | 统一 Run、Turn、Tool、Pod 和业务操作 ID |
9.2 三种部署形态¶
共享控制面 + 每任务 Job 适合执行时间明确、隔离要求较高的代码和数据任务。任务进入队列后创建 Job,结束后把 Diff、报告和日志写到对象存储,再通过 TTL 清理计算资源。
共享控制面 + 预热 Sandbox 池 适合交互式编程或浏览器 Agent。它降低冷启动延迟,但需要可靠的租户切换清理、容量预测和池水位控制。
每用户 StatefulSet + PVC 适合个人工作台或开发者预览,例如将单用户 DeepSeek Harness Web Runtime 放入 Kubernetes。它便于保存本地状态,但不应被误当作共享多租户控制面。相关部署边界见DeepSeek Harness + Chromium Kubernetes 实战。
9.3 审批时不要持续占用执行资源¶
人工可能数小时后才处理请求。Harness 应在审批前完成以下动作:
- 把待执行工具、参数、上下文摘要和风险写入状态库;
- 将工作区增量和制品保存到持久存储;
- 释放 Job、GPU、浏览器或远端 Sandbox;
- 审批后以同一 Run ID 恢复,重新核对权限和外部状态;
- 使用幂等键执行获准动作。
这比让一个 Pod 长时间挂起更省资源,也更能抵抗节点维护和集群升级。
10. 一个代码变更 Agent 的完整案例¶
假设用户要求“修复服务的分页错误,运行测试并提交可评审的变更”。一条可审计的任务链可以这样设计:
- API Gateway 验证用户身份,将仓库、分支、Issue 和验收命令写入任务;
- Coordinator 创建 Run,并保存模型、提示词、工具 Schema 和 Harness 版本;
- Executor 为任务分配独立工作区和短期只读 Git 凭据;
- Agent 读取代码、搜索调用关系并形成计划;
- 每次 Shell、文件修改和依赖下载都经过策略层,网络只允许批准的域名;
- Agent 修改代码,在 Sandbox 中运行指定测试;
- Verifier 独立检查测试结果、Diff 范围、敏感文件和新增依赖;
- Harness 生成 Diff、测试摘要和完整 Trace,等待用户确认;
- 用户批准后,系统换取短期写凭据并创建分支或 PR;
- 使用 PR ID 回读目标系统,确认最终状态后结束 Run。
如果第 6 步 Pod 被回收,新 Pod 从 Checkpoint 和工作区快照继续;如果第 9 步网络中断,系统先按幂等键或分支名查询 PR 是否已经创建。恢复过程不依赖模型“记得刚才做了什么”。
11. 如何选择是否需要 Harness¶
| 需求 | 推荐方案 |
|---|---|
| 单轮问答、摘要或分类 | 直接使用模型 API,加结构化输出和基础审计 |
| 路径固定的业务流程 | 工作流引擎为主,在少数节点调用模型 |
| 需要搜索、代码、浏览器或多轮修正 | 使用具备状态、工具、验证和 Sandbox 的 Harness |
| 高风险企业操作 | 受约束 Agent + Tool Gateway + 耐久审批 + 确定性事务 |
| 研究复杂开放问题 | 允许更灵活的循环,但限制预算、来源和最终发布动作 |
| 多 Agent 协作 | 仅在角色、上下文或并行任务能清楚拆分时采用 |
选型时可以依次检查:
- 能否重建每次模型请求实际看到的上下文;
- 工具是否有清楚 Schema、错误分类、幂等和回执;
- 进程或 Pod 消失后能否从确定位置恢复;
- 人工审批是否可以持久暂停并安全续跑;
- 完成条件是否由独立证据验证;
- 用户身份是否传递到工具层,并落实最小权限;
- Sandbox 是否限制文件、网络、资源和租户边界;
- Trace 能否串联模型、工具、执行环境和业务操作;
- 是否有覆盖成功、失败、恢复和安全的真实任务集;
- 模型、提示词、工具和 Harness 升级能否做同一批回归。
如果这些问题大部分没有答案,系统可能已经能演示,但还不能无人值守地处理真实业务。
12. 技术趋势¶
Harness 与模型协同设计¶
模型会针对特定工具格式、编辑协议和长任务反馈进行优化,Harness 也会根据模型的实际行为调整上下文、工具和恢复策略。两者将越来越像共同迭代的系统,而不是可以任意互换的两个黑盒。
事件流与可回放执行成为基础能力¶
长任务、审批、分支探索和故障恢复都要求保存事件和 Checkpoint。未来“回放某次失败任务”“从第 N 步 fork”“比较两个 Harness 在相同环境中的决定”会成为标准评测方法。
控制面与执行面分离¶
会话、策略和调度留在稳定控制面;Shell、浏览器和代码运行进入按任务创建的远端 Sandbox。这种分离方便使用不同隔离级别、弹性伸缩和异构计算资源,也减少 Harness 主服务直接持有宿主机权限的风险。
协议标准化,但系统差异仍在 Harness¶
MCP 等协议会降低工具接入成本,OpenTelemetry 语义约定会改善跨框架观测。协议统一之后,上下文编译、工具接口、循环、验证、权限和评测仍会决定最终任务完成率。
Harness 本身开始被优化和评测¶
2026 年的 Harness-of-Harness研究尝试让上层系统迭代改进 Agent Harness,并在多个编程基准与 Harness—模型组合上报告了明显增益。它是一项较新的研究结果,还不能代表所有任务和生产环境,但说明 Harness 已经从“模型外面的胶水代码”变成可独立设计、评测和优化的对象。
结语¶
Agent 的价值最终体现在任务是否完成,而不是模型生成了多少看似合理的步骤。Harness 把模型的建议连接到真实工具和环境,再用状态、策略、隔离、验证与观测把开放式推理变成可以运行的工程系统。
建设 Harness 时,最值得优先投入的并不是增加更多工具,而是让已有工具清楚可用、让外部动作可追踪、让失败任务可恢复、让完成结果可验证。模型能力会持续变化,这些基础机制决定了系统能否安全吸收新的模型能力,并在真实业务中长期运行。
参考资料与延伸阅读¶
- DeepSeek Harness 官方介绍与开源仓库
- Anthropic:Building Effective Agents
- OpenAI Agents SDK
- LangGraph Overview与Persistence
- Model Context Protocol Architecture
- OpenHands与Runtime Architecture
- SWE-agent:Agent-Computer Interfaces Enable Automated Software Engineering
- OpenTelemetry GenAI Semantic Conventions
- 2026 年 AI Agent 现状、实现原理与趋势
- CubeSandbox Agent Adapter v0.5:多 Runner、强审计与可观测性实战