OpenAI-Harness-Engineering-智能体优先方法论调研
OpenAI 内部一支 3 → 7 人小队,5 个月内交付 100 万行代码 + 1500 PR、零行人类手写代码 的产品 beta。纪律不在代码里,而在支撑代码的环境、文档结构和反馈回路里——这就是 "Harness Enginee...
OpenAI Harness Engineering 深度调研——智能体优先世界的软件工程范式
原文:https://openai.com/zh-Hans-CN/index/harness-engineering/ 发布:2026/02/11 | 作者:Ryan Lopopolo(OpenAI 技术人员)
1. 一句话定位
OpenAI 内部一支 3 → 7 人小队,5 个月内交付 100 万行代码 + 1500 PR、零行人类手写代码 的产品 beta。纪律不在代码里,而在支撑代码的环境、文档结构和反馈回路里——这就是 “Harness Engineering”(工具链/支架工程)。
2. 核心数据
| 指标 | 数值 |
|---|---|
| 团队规模 | 3 人启动 → 7 人现状 |
| 周期 | 5 个月(2025-08 至 2026-02) |
| 代码量 | ~100 万行 |
| PR 数 | 1500(合并 + 关闭) |
| 人均吞吐 | 3.5 PR / 人 / 日(团队扩张后还在涨) |
| 人工写码量 | 0 行(连第一个 AGENTS.md 都是 Codex 写的) |
| 时间成本 | 约为人工开发的 1/10 |
| 单次 Codex 任务最长 | 6+ 小时(通常在人类睡眠时间跑) |
3. 工程师角色重定义
传统:工程师 = 写代码的人新范式:工程师 = 设计环境、明确意图、构建反馈回路的人 智能体 = 执行的人
口号:人类掌舵,智能体执行。唯一介入原则:
取得进展的唯一方式是让 Codex 完成工作,人类介入时只问一个问题:还缺什么能力?怎么让这能力对智能体既清晰可读又可强制执行?
4. 七大支柱(按可借鉴优先级排序)
4.1 AGENTS.md 是「地图」,不是「百科全书」
踩过的坑:一开始把所有规则塞进一个大 AGENTS.md,结果:
- Context 是稀缺资源:大文件挤掉了任务、代码、相关文档
- 指导过载 = 没有指导:当一切都”重要”,一切就都不重要
- 立即腐烂:变成陈旧规则的坟场,智能体无法判断哪些还有效
- 难以机械校验:单个 blob 无法做覆盖率/新鲜度/所有权检查
最终方案(AGENTS.md ≈ 100 行,纯入口 + 索引):
AGENTS.md # 入口,目录索引ARCHITECTURE.md # 顶层架构docs/├── design-docs/ # 设计文档 + index.md + core-beliefs.md├── exec-plans/ # 执行计划(一等公民工件)│ ├── active/│ ├── completed/│ └── tech-debt-tracker.md├── generated/ # 生成的文档(如 db-schema.md)├── product-specs/ # 产品规格├── references/ # 外部参考(design-system-llms.txt 等)├── DESIGN.md├── FRONTEND.md├── PLANS.md├── PRODUCT_SENSE.md├── QUALITY_SCORE.md├── RELIABILITY.md└── SECURITY.md配套机制:
- 渐进式披露:智能体从小切入点起步,文档指引下一步去哪查
- 专职 lint + CI 校验:知识库的新鲜度、交叉链接、结构正确性
- doc-gardening agent:定期扫描过时文档,发起修复 PR
4.2 仓库 = 唯一记录系统(Source of Truth)
残酷事实:
从智能体角度看,运行时在 context 里访问不到的东西 = 不存在。
Google Docs、Slack 讨论、同事脑子里的隐性知识——智能体都看不到。只有版本控制的、纯文本的、可被 grep 的工件才存在。
那次让团队达成架构共识的 Slack 讨论?如果智能体无法发现它,它就会像迟到三个月入职的新人一样对此一无所知。
对应行动:所有重要决策、品味偏好、踩坑经验都必须落地到仓库 Markdown,包括团队的 emoji 偏好(原文真这么说)。
4.3 目标是「智能体可读性」,不是人类可读性
最反直觉的一条:
生成的代码不总是符合人类的风格偏好,这也没关系。只要输出是正确的、可维护的,并且对未来的智能体运行而言清晰易读,就算达标。
取舍倾向:
| 选项 | 理由 |
|---|---|
| 选枯燥技术 | API 稳定、训练集中常见、智能体更容易建模 |
| 选可内化在仓库里推理的依赖 | 不要黑盒上游 |
| 自己重写小工具 > 引入不透明 npm 包 | 例:他们没用 p-limit,自己写了带并发的 map 辅助函数(OpenTelemetry 集成、100% 测试覆盖、行为可预测) |
4.4 严格架构约束(早期就上)
业务域内部:Types → Config → Repo → Service → Runtime → UI横切关注点(认证、连接器、遥测、Feature Flag)→ 必须经过 Providers 单一接口所有规则用「自定义 linter(Codex 写的)+ 结构测试」机械强制关键洞察:
这种架构通常要等到你拥有数百名工程师时才会推迟。对编码智能体来说,这是早期先决条件:有了约束,速度才不会下降,架构才不会漂移。
自定义 lint 的特殊设计:错误信息里直接嵌入修复指令,因为下一个读到的就是智能体。
4.5 让应用对智能体「直接可读」
人类 QA 是固定瓶颈,所以一切都要让智能体能直接看、直接验:
| 维度 | 实现 |
|---|---|
| UI 可读 | Chrome DevTools Protocol 接入运行时,提供 DOM snapshot / screenshot / 导航 skills |
| 多实例并行 | 应用支持基于 git worktree 启动,每个 Codex 实例跑自己的副本 |
| 完整可观测性栈 | 每个 worktree 临时一份:Vector → Victoria Logs/Metrics/Traces,智能体用 LogQL/PromQL/TraceQL 查询 |
| 可执行 prompt | ”确保服务启动 < 800ms” / “这四条用户旅程的任何 span 不超过 2 秒”——直接给智能体跑 |
4.6 吞吐量改写了合并理念
传统软件工程:阻塞性合并门、零容忍 flaky test智能体优先: PR 短命、flaky test 后续重跑、纠错成本低、等待成本高在低吞吐量环境中,这样做是不负责任的。在这里,这通常是正确的选择。
4.7 熵 + 垃圾回收(解决 AI 残渣)
最初:每周五全员花 20% 时间清理 “AI 残渣” → 不可扩展
最终方案:
- 编码 “黄金原则”(机械化、强主观的规则)
- 后台跑 Codex 任务批量扫描偏差、更新质量等级、发起重构 PR
- 大多数清理 PR < 1 分钟即可审完自动合并
- 类比:技术债 = 高息贷款,每天小额还 >> 季度大爆发还
例子:
- 优先用共享 utility,不要手工 helper —— 不变式集中管理
- 不允许 “YOLO 式” 探测数据 —— 必须验证边界或用类型化 SDK
5. 「智能体生成」实际意味着什么
全部由 Codex 生成的内容:产品代码 + 测试、CI 配置、发布工具、内部开发者工具、文档 + 设计历史、评估框架、审阅评论和回复、管理代码仓库本身的脚本、生产仪表板定义。
最近跨过的门槛——端到端自主交付:
给 prompt → 智能体自动:1. 验证代码库现状2. 复现 bug3. 录制故障 demo 视频4. 实施修复5. 运行应用验证修复6. 录制解决方案 demo 视频7. 开 PR8. 响应智能体 + 人类反馈9. 检测并修复 CI 故障10. 仅在需要判断时找人11. 合并审查也是智能体对智能体(Ralph Wiggum 循环):本地自审 + 云端多智能体审查 + 响应反馈 + 循环直到全部审查通过。
Pull Request 人类可以审,但并非必须。随着时间推移,我们已将几乎所有审核工作调整为智能体对智能体处理。
6. 对本地工作流的具体启发
🎯 高优先级(立刻可借鉴)
-
CLAUDE.md ≤ 100 行原则
- 把
~/.claude/CLAUDE.md砍成纯入口 + 链接,详细规则下沉到docs/references/*.md - 当前已在膨胀,需要 GC
- 把
-
markdown/ 目录加 lint
- 写简单 CI / pre-commit hook:检查 frontmatter 完整性、
wikilink死链、文件命名规范 - 这是个人版的 “doc-gardening agent” 雏形
- 写简单 CI / pre-commit hook:检查 frontmatter 完整性、
-
决策记录系统
- 重要技术决策(Token 缓存机制、wechat-skill 选型)必须落到 markdown
- 已经在做(笔记 + memory.md),但缺少 “索引页 + 主题地图”
-
品味编码到 lint,不是放在 review 评论里
- “复用 utility > 手写 helper” 类规则,写成 ESLint plugin
- Vue 项目可参考
🎯 中优先级(中长期)
-
借鉴 docs/ 目录结构
docs/superpowers/已经有 plans + specs 雏形,可以扩展- 加
exec-plans/{active,completed,tech-debt-tracker.md} - 加
references/存外部库的*-llms.txt文档(claude-mem、wechat-cli 等)
-
session-report 进化方向
- 本质就是 harness engineering 的可观测性栈
- 让 Claude Code 的运行状态对下次的 Claude Code 直接可读
🎯 思想冲击(理念层)
-
重新定义自己的角色
- 现在是”AI 增强的前端工程师”
- 下一步:“AI 工程的环境设计师”——杠杆点是设计 AGENTS.md/Skills/Hooks 这些 harness,而不是单纯让 Claude 帮写代码
-
接受”智能体可读 > 人类可读”
- 别因为代码不够优雅就追着改
- 标准是:下一次 Claude Code 读懂这段代码的成本 + 改对的概率
- 这跟”代码必须优雅”的本能会有冲突
7. 风险与边界
OpenAI 自己承认的不确定性:
| 风险 | 说明 |
|---|---|
| 架构连贯性的长期演化 | 不知道 5 年后这套代码库会变成什么 |
| 依赖具体投入 | ”此行为很大程度上取决于此代码仓库的具体结构和工具,不应假设可以泛化” |
| 黄金原则需要持续维护 | 自动清理 ≠ 不需要人类品味,需要持续注入 |
| 模型迭代影响系统形态 | 模型变强后,整套 harness 可能要重新设计 |
8. 核心金句
- “人类掌舵。智能体执行。”
- “取得进展的唯一方式是让 Codex 完成工作,人类介入时只问:还缺什么能力?怎么让这能力对智能体既清晰可读又可强制执行?”
- “在 context 里看不到的 = 不存在的。”
- “给智能体一张地图,不是一本 1000 页的说明书。”
- “在低吞吐量环境中这是不负责任的,在这里这通常是正确的。”
- “技术债是高息贷款——小额每日偿还,胜过痛苦的一次性清算。”
- “纪律不在代码里,而在支撑代码的工具、抽象和反馈回路里。“
9. 关联阅读
- 同目录已有:鹅厂面试官:你怎么看 Harness Engineering(业内人士解读)
- 同目录已有:高德OPC+Harness自主增长系统方法论(国内大厂落地实践)
- 同目录已有:Superpowers-给-Agent-加上跳不过去的工作流(个人工作流约束)