harness,马具,给马套上马具,让马更好的被驯服。对ai界的harness就是claude中的HARNESS.md。它可以是
下面来解析harness
我们知道claude是一个无所不能的大脑,我们拿大脑去思考,那它的缺陷是什么?
那harness就是解决这两个问题的角色,我仍按照生活类比。
上面是类比,那具体点,什么是harness呢?
简单来说,就是通过一套方法论来抵抗claude本身的缺陷。其具体步骤如下
可以看到,这是一套极强的正反馈机制。现在我们回头看,什么是harness
之前我通过frontend-design设计了一个音乐播放器,但是其生成的后端python只有基本的功能, 现在使用harness方式来改进这个代码。
首先安装
npx skills add https://github.com/trailofbits/skills --skill harness-writing
我们看看使用这个skill的场景
目前这个音乐播放器的后端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也能解决你的问题,我们从问题的角度来看解决方案
https://www.anthropic.com/engineering/harness-design-long-running-apps
https://blog.langchain.com/the-anatomy-of-an-agent-harness/