导语:如果整个软件项目没有一行人工编写的代码,全部由AI Agent完成,会发生什么?OpenAI在2025年进行了一项激进实验:3名工程师,5个月,100万行代码,0行人工代码。他们称之为"Harness Engineering"——一种全新的AI原生软件开发范式。
"Harness"原意为马具/缰绳——用来控制和引导马匹的工具。在软件工程中,它指的是:
一套用于引导、约束和赋能AI Agent的工程化框架和工具集这个术语由OpenAI在2025年提出,但其思想受到Mitchell Hashimoto(HashiCorp创始人)博客文章的启发。
| 指标 | 数值 |
|---|---|
| **人工编写代码** | 0 行 |
| **总代码量** | ~100万行 |
| **开发时间** | 5个月(2025年8月-2026年1月) |
| **工程师人数** | 3人 → 7人 |
| **PR数量** | ~1,500个 |
| **人均日PR** | 3.5个(且随团队扩大而增加) |
| **估算效率提升** | 10倍 |
"Humans steer. Agents execute." (人类掌舵,Agent执行)工程师的工作从"写代码"转变为:
根据Martin Fowler的总结,Harness Engineering包含三个核心组件:
问题:Agent的上下文窗口是有限的稀缺资源。
解决方案:
传统做法:把AGENTS.md写成百科全书(1000+行)
↓
Harness做法:把AGENTS.md作为目录(~100行),指向结构化知识库
关键原则:
docs/
├── AGENTS.md # 目录(~100行)
├── architecture/ # 架构文档
├── design/ # 设计文档(带验证状态)
├── quality/ # 质量评分
├── plans/ # 执行计划
└── beliefs/ # 核心原则
洞察:Agent在严格边界和可预测结构中最有效。
实践:
✅ 必须在边界解析数据形状(但不指定具体库)
✅ 代码只能"向前"依赖
✅ 跨领域关注点通过Providers单一接口进入
❌ 禁止随意依赖
问题:Agent会复制仓库中已有的模式——包括不均衡或次优的模式。随着时间推移,这必然导致漂移。
初始尝试:团队每周五花20%时间清理"AI slop"——不可扩展。
解决方案:
现象:初期进展比预期慢。
原因:不是Codex能力不足,而是环境 underspecified。Agent缺乏工具、抽象和内部结构。
人类工作:
深度优先:将大目标分解为小块
↓
提示Agent构建这些块
↓
用它们解锁更复杂任务
失败时的反应:
从不"再试一次",而是问:"缺少什么能力?如何让它对Agent既清晰又可执行?"
洞察:仓库完全由Agent生成,因此首先针对Codex的可读性优化。
关键认识:
里程碑:Codex可以端到端驱动新功能。
给定单个提示,Agent现在可以:
反模式:
# AGENTS.md(错误示例)
这里是关于我们代码库的一切...
[1000行详尽说明]
...
问题:
# AGENTS.md(正确示例)
## 核心原则
- [信念文档](docs/beliefs/)
- [质量标准](docs/quality/)
## 架构
- [顶层架构](docs/architecture/overview.md)
- [领域分层](docs/architecture/layers.md)
## 工作流程
- [开发流程](docs/processes/development.md)
- [代码审查](docs/processes/review.md)
## 工具
- [可用工具](docs/tools/)
- [调试指南](docs/debugging/)
瓶颈转移:代码吞吐量增加后,瓶颈变成人类QA能力。
解决方案:让应用UI、日志、指标直接对Agent可读。
具体实践:
| 领域 | 人类做法 | Agent做法 |
|---|---|---|
| **本地开发** | 启动本地服务器 | 每个git worktree可启动独立实例 |
| **UI调试** | 打开浏览器检查 | Chrome DevTools Protocol集成,DOM快照、截图、导航 |
| **可观测性** | 查看日志和指标 | LogQL查询日志,PromQL查询指标 |
| **Bug复现** | 手动操作复现 | Agent自动驱动应用复现 |
效果:经常看到单个Codex运行处理单个任务超过6小时(通常是人类睡觉时)。
传统规范:严格的合并门控,阻塞式审查。
Harness规范:
在Agent吞吐量远超人类注意力的系统中,修正是廉价的,等待是昂贵的。
Harness Engineering的核心是Context Engineering——从Prompt Engineering的自然演进。
| Prompt Engineering | Context Engineering |
|---|---|
| 关注如何写有效指令 | 关注管理整个上下文状态 |
| 一次性任务优化 | 多轮推理、长时间跨度的Agent |
| 系统提示为主 | 系统提示+工具+检索+历史+... |
完整Context栈:
├── 系统提示/指令
├── 代码库上下文(相关文件、架构模式)
├── Git历史/近期变更
├── 依赖和导入库
├── 工具定义(调试器、Linter、测试运行器)
├── 团队标准和模式(AGENTS.md、风格指南)
├── 对话历史
└── 检索的文档(API文档、示例、架构决策记录)
| 策略 | 说明 |
|---|---|
| **选择** | 只检索最相关的片段,而非整个代码库 |
| **压缩** | 保留关键信息同时减少token数 |
| **排序** | 将信息放在模型会关注的位置 |
| **隔离** | 跨专门Agent分割上下文 |
| **格式优化** | 结构化信息以最大化理解 |
研究发现:即使模型声称有100万token上下文窗口,正确性在32,000 token后开始下降。
原因:注意力机制——模型关注上下文开头和结尾,中间内容变成噪音。
教训:> 更多上下文 ≠ 更好性能。最优密度获胜。
| 问题 | 说明 |
|---|---|
| **模式复制** | Agent复制仓库中已有模式,包括次优模式 |
| **上下文漂移** | 长期运行后,上下文质量下降 |
| **过度依赖结构** | 高度依赖特定仓库结构和工具 |
| **不确定性** | 架构一致性在多年时间尺度上如何演变,尚不清楚 |
"What’s become clear: building software still demands discipline, but the discipline shows up more in the scaffolding rather than the code." (变得清晰的是:构建软件仍然需要纪律,但纪律更多地体现在脚手架而非代码中。)
"Our most difficult challenges now center on designing environments, feedback loops, and control systems..." (我们现在最困难的挑战集中在设计环境、反馈循环和控制系统...)
| 传统角色 | Harness角色 |
|---|---|
| 编写代码 | 设计环境和脚手架 |
| 调试Bug | 设计反馈循环 |
| 代码审查 | 设计控制系统 |
| 技术决策 | 指定意图和目标 |
变得更重要:
Martin Fowler的预测:
问自己:
不要试图一次性构建完整Harness:
第1周:创建简短的AGENTS.md(目录)
第2周:添加一个自定义Linter
第3周:建立文档验证CI任务
第4周:添加一个"清理Agent"
...
OpenAI团队工作了5个月。这不是能快速见效的事情。
但当它工作时:
| 资源 | 链接 |
|---|---|
| **OpenAI原文** | https://openai.com/index/harness-engineering/ |
| **Martin Fowler解读** | https://martinfowler.com/articles/exploring-gen-ai/harness-engineering.html |
| **Anthropic Context Engineering** | https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents |
| **Agent Skills开源项目** | https://github.com/muratcankoylan/Agent-Skills-for-Context-Engineering |
| **Codex介绍** | https://openai.com/index/introducing-codex/ |
Harness Engineering代表了软件开发范式的潜在转变:
| 维度 | 传统开发 | Harness Engineering |
|---|---|---|
| **核心活动** | 写代码 | 设计环境和反馈循环 |
| **人机分工** | 人类写,机器辅助 | 人类掌舵,Agent执行 |
| **代码来源** | 人类编写 | Agent生成 |
| **质量保证** | 人工审查 | 机械约束+Agent审查 |
| **技术债务** | 周期性偿还 | 持续垃圾回收 |
| **规模效应** | 边际成本递增 | 边际成本递减 |
这不是关于AI取代工程师,而是关于工程师角色的进化——从亲自编写每一行代码,到设计让AI能够可靠工作的系统。
正如OpenAI团队所说:
"The canary is still alive." (金丝雀还活着。)我们还有时间学习、适应和构建这个未来。
本文基于OpenAI 2025-2026年发布的公开资料整理,Harness Engineering是一个快速发展的领域,具体实践可能随时间演变。
还没有人回复