🏠 总目录 📚 资料库Harness 设计

Effective Harnesses for Long-Running Agents(长时运行 Agent 的有效 Harness)

📄 来自 Claude 官方博客
原文标题
Effective Harnesses for Long-Running Agents(长时运行 Agent 的有效 Harness)
原文链接
https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents
作者
Justin Young(Anthropic)
发布日期
2025-11-26
⚠️ 本页是原文的中文结构化整理笔记(保留架构、数据、案例、结论),并非逐字翻译。具体参数与功能名更新很快,落地前请点击上方链接核对原文。

14 分钟 | ⭐ Harness 是什么、为什么需要它

🎯 一句话

Harness 是包在模型外面的那层工程结构:循环控制、状态管理、错误处理、终止条件。⭐ 模型决定「做什么」,Harness 决定「怎么把它跑稳」。

📑 本页目录

当 AI Agent 处理跨越多个上下文窗口的复杂项目时,会面临连续性和一致性的难题——每个新会话开始时都对之前的工作毫无记忆。Anthropic 设计了一套由「初始化 Agent + 迭代编码 Agent」组成的两段式架构,让 Claude 能在大型软件项目上持续取得进展而不丢失上下文。

文章用了一个类比:想象一群软件工程师轮班工作,但每个人上班时对前一班的工作完全没有记忆——如果没有显式的知识传递机制,项目无法保持连贯。

两种典型失败模式

  1. 过度野心(Over-ambition): Agent 试图在单个上下文窗口内完成整个应用,导致实现不完整、代码无文档,后续会话浪费大量精力从损坏状态中恢复。
  2. 过早宣告完成(Premature completion): 后续的 Agent 实例看到部分已完成的功能,就错误地宣布整个项目已经完成,尽管规格说明远未实现。

架构方案:两段式 Agent 框架

初始化 Agent(仅第一个会话)

编码 Agent(后续所有会话)

两种 Agent 的区别仅在于初始提示词,其余系统基础设施完全相同。

环境管理组件

功能清单(Feature List)

初始化 Agent 用 JSON 格式生成完整的功能规格。在 Claude.ai 克隆项目的演示中包含 200+ 个功能项,初始全部标记为 "failing"。每个功能条目结构类似:

{
    "category": "functional",
    "description": "New chat button creates fresh conversation",
    "steps": ["...详细步骤..."],
    "passes": false
}

为什么用 JSON 而不是 Markdown? 因为模型更不容易随意修改或覆盖 JSON 文件。同时明确禁止 Agent 删除功能条目,确保开发覆盖完整。

增量推进策略

测试机制

Claude 起初难以识别未完成的功能实现。提供浏览器自动化工具(Puppeteer MCP server)后效果显著改善——Agent 像真人用户一样点击按钮、验证视觉变化、确认数据持久化,能发现纯代码审查发现不了的 bug。

标准会话工作流

每个编码会话遵循固定的初始化流程:

  1. 确认当前工作目录
  2. 查看 git 日志和进度文档
  3. 找出优先级最高的未完成功能
  4. 执行 init.sh 启动开发服务器
  5. 运行基线端到端测试确认应用稳定
  6. 开始专注开发选定的功能

典型会话开场是「我先了解一下项目当前状态」,然后立即运行诊断命令,避免浪费 token 重新摸索项目状况。

失败模式与对策一览

问题 初始化 Agent 的对策 编码 Agent 的对策
过早宣告项目完成 创建详细功能清单 一次只选一个功能;宣布完成前核对规格
环境逐渐劣化 初始化 git 仓库和进度跟踪 验证功能基线;提交有文档的变更
功能被错误标记为完成 建立功能规格文件 更新状态前严格测试
不知道如何启动应用 提供 init.sh 脚本 首先执行初始化脚本

关键洞察

成果验证

该方案使 Claude Opus 4.5 成功构建了一个可运行的 Claude.ai 克隆——一个跨越多个上下文窗口、包含数十个功能的完整全栈 Web 应用。

未解问题与未来方向

结论

长时运行的 Agent 需要超越原始上下文窗口管理的显式架构支持。通过功能规格、进度文档、版本控制集成和严格测试协议等环境脚手架,开发者可以让 Claude 在跨会话的长期项目中持续高效工作。该框架把 Agent 的局限转化为可管理的工作流模式,同时保持代码质量和项目连贯性。


✅ 检查点

  1. Harness 具体包含哪些部分?
  2. 为什么说没有 Harness 的 Agent 只能做演示?
  3. 设计 Harness 时最容易忽略的是什么?
👀 答案
  1. ①循环控制(什么时候继续、什么时候停)②状态管理(上下文怎么裁剪、进度怎么持久化)③错误处理(工具失败了怎么办、要不要重试、重试几次)④终止条件(成功标准、步数上限、成本上限)⑤可观测性(每一步都要能被记录和回放)。
  2. 因为演示只需要「顺利那条路」跑通,生产要处理所有不顺的情况:超时、限流、模型输出格式不对、工具返回意外结果、任务比预期长。⭐ 这些恰恰是 Harness 负责的部分,而不是模型能力问题。
  3. 终止条件。很多实现只设了「成功就停」,却没设「步数上限、成本上限、无进展检测」——结果 Agent 在一个死循环里反复尝试同样的失败操作,烧掉大量 token。「无进展检测」尤其容易漏:连续 N 轮状态没有实质变化,就该停下来求助。

🛑 可以停在这里

走神救援
Harness = 包在模型外面的那层工程结构——模型决定「做什么」,Harness 决定「怎么把它跑稳」五部分:循环控制、状态管理(上下文裁剪+进度持久化)、错误处理(失败了要不要重试、重试几次)、终止条件、可观测性(每步可记录可回放)。没有 Harness 的 Agent 只能做演示,因为演示只需「顺利那条路」跑通,生产要处理超时/限流/格式不对/意外返回/任务超长——这些是 Harness 的职责,不是模型能力问题。⚠️⭐最容易忽略的是终止条件:很多实现只设了「成功就停」,没设步数上限、成本上限、无进展检测,结果在死循环里反复尝试同样的失败操作烧掉大量 token「无进展检测」尤其容易漏——连续 N 轮状态没实质变化就该停下求助