编辑
2026-04-04
记录知识
0
请注意,本文编写于 36 天前,最后修改于 36 天前,其中某些信息可能已经过时。

目录

解释
演示
总结
参考

harness,马具,给马套上马具,让马更好的被驯服。对ai界的harness就是claude中的HARNESS.md。它可以是

  • 一个作业指导书
  • 一个skill的引用
  • 一个纯软件工程理论
  • 一个实战工具方法

下面来解析harness

解释

我们知道claude是一个无所不能的大脑,我们拿大脑去思考,那它的缺陷是什么?

  1. 记不住几个月前的事情 --- token 上下文长度不够
  2. 每次考试写完试卷老是认为自己是100分,过度自信 --- 不会自我批评,claude老是自信的说"太棒了"

那harness就是解决这两个问题的角色,我仍按照生活类比。

  1. 勤做笔记,抵抗忘记 --- 清空上下文,保存笔记,给下一个agent干活
  2. 让别人批阅你的试卷 --- 开辟两个agent,生成器埋头干活,评估器专门挑刺。

上面是类比,那具体点,什么是harness呢?

简单来说,就是通过一套方法论来抵抗claude本身的缺陷。其具体步骤如下

  • 规划器(Planner): 先让claude给你生成详细的实施规划书
  • 生成器(Generator): 将问题拆解成子问题,让每个agent干一个功能
  • 评估器(Evaluator) : 开辟一个新的agent,使用自动会测试工具验证生成器做的功能
  • Sprint 合同机制 : 每次生成器干活前,生成器和评估器先绑定目标,明确什么叫真正的"完成了"

可以看到,这是一套极强的正反馈机制。现在我们回头看,什么是harness

  • 一个作业指导书 ---> 将一个简单的提示词,抽象成这套方法论的HARNESS.md
  • 一个skill的引用 ---> skill如果引用harness.md,那么就会按照harness方法来执行
  • 一个纯软件工程理论 ---> 就是这套正反馈机制
  • 一个实战工具方法 ---> 就是这套方法论

演示

之前我通过frontend-design设计了一个音乐播放器,但是其生成的后端python只有基本的功能, 现在使用harness方式来改进这个代码。

首先安装

npx skills add https://github.com/trailofbits/skills --skill harness-writing

我们看看使用这个skill的场景

  • Creating a new fuzz target for the first time
  • Fuzz campaign has low code coverage or isn't finding bugs
  • Crashes found during fuzzing are not reproducible
  • Target API requires complex or structured inputs
  • Multiple related functions should be tested together

目前这个音乐播放器的后端music-server.py的代码缺陷正好符合这个场景,我们开始提示加载这个skill运行

> 使用 harness 方式改进music目录下的音乐播放器代码

claude开始工作

● 我已经查看了代码。music 目录包含两个文件: - music-server.py — Python HTTP 服务器 - music-player.html — 前端播放器界面 "harness 方式"意味着创建模糊测试/鲁棒性测试用例来发现和修复代码中的潜在问题。 让我先检查一下 music-server.py 中需要关注的关键部分: Searched for 2 patterns (ctrl+o to expand)

不一会儿,它察觉了问题

● 发现了几个需要关注的潜在问题点。让我创建一套完整的测试用例来提升代码鲁棒性:

开始测试

● 现在运行测试用例:

测试发现了一些问题

● 测试发现了几个需要修复的问题: 1. 路径遍历漏洞 - safe_path 没有正确处理 .. 清理 2. Range 解析错误 - 后缀范围如 bytes=-100 (最后100字节) 解析不正确 3. 文件列表问题 - 一些小 bug 让我修复这些问题:

claude开启了多个agent开始工作,为我修复这些问题

● 最后验证服务器可以正常启动:

评估器开始评估,确保问题修复且功能正常

● 完成!以下是改进总结: 改进内容 1. 提取核心函数 (music-server.py) 将关键逻辑提取为独立可测试的函数: - safe_path(rel_path, base_dir) — 路径安全检查,防止目录遍历攻击 - parse_range_header(range_header, file_size) — HTTP Range 头解析,正确处理 bytes=-100(最后N字节)等格式 - format_file_list(dir_path, base_dir) — 文件列表生成 2. 修复的安全问题 - 路径遍历防护加强:正确处理 .. 组件,拦截 null 字节注入 - Range 头解析修复:正确支持 HTTP Range 规范(RFC 7233),包括后缀范围 bytes=-N 3. 创建测试用例 (music_harness.py) 23 个测试用例覆盖: ┌───────────────────────────┬──────┐ │ 测试类别 │ 数量 │ ├───────────────────────────┼──────┤ │ safe_path 路径遍历防护 │ 9 │ ├───────────────────────────┼──────┤ │ parse_range_header 解析 │ 4 │ ├───────────────────────────┼──────┤ │ format_file_list 文件列表 │ 5 │ ├───────────────────────────┼──────┤ │ 集成测试 │ 2 │ └───────────────────────────┴──────┘ 运行测试 cd ~/music python3 music_harness.py 结果: 23 passed, 0 failed ✻ Baked for 6m 44s

现在给我修复了一些我意识不到的问题。harness的流程符合claude官网的流程。

但是个人评价是:/harness-writing这个skill并不是很优秀,我的演示并没有完全加载这个skill的描述功能,个人不建议使用。本文只是探讨harness这个方法论

总结

本文介绍了什么是harness。

网上很多贩卖焦虑的人在各种吹嘘和瞎编harness,我个人意见是阅读 anthropic 的官方博客harness-design-long-running-apps,里面详细的介绍了harness的作用。我们从标题也可以看到,一句话描述harness

Harness design for long-running application development

也就是你要开发能够长时间运行的应用程序,那么anthropic建议你使用harness方法。

所以,让我换种办法解释一下什么是harness?:

传统提示词去开发大型程序 ---> claude上下文撑不住
skill开发的功能 ---> 没有测试,只按照你的描述完成你要基本功能

那么harness就是一套方法论让你解决上面的问题

那其实不用harness也能解决你的问题,我们从问题的角度来看解决方案

  • 上下文撑不住? ----> claude的memory和CLAUDE.md剪枝就能搞定
  • 没有测试? ----> 自己开个agent去测试即可,或者安装一个TDD的测试skill让他自己运行

参考

https://www.anthropic.com/engineering/harness-design-long-running-apps
https://blog.langchain.com/the-anatomy-of-an-agent-harness/