2026 年 2 月,一个小型 OpenAI 团队交付了 100 万行生产代码。
他们没有手动编写一行代码。
AI Agent 们写了这些代码。
人类设计了让这些 Agent 变得可靠的系统。
这个系统现在有了一个名字。
约束工程(Harness Engineering)。
几周内,Anthropic 发表了 3 篇相关论文。
ThoughtWorks 将其正式化为一个框架。
Hugging Face 的 Philipp Schmid 称其为“2026 年最重要的学科”。
一门新的工程学科在 90 天内诞生了。
而几乎 AI 基础设施团队之外的人还无法理解它。
这篇文章将解释一切。
没有废话。没有学术术语。只有你实际运用它所需的思维模型。
收藏这篇文章。你会读第二遍的。
第一部分:约束到底是什么(改变你思考 AI 方式的概念)
1. 约束的定义

最简单的定义来自 ThoughtWorks:
→ Agent = 模型 + 约束
约束就是模型之外的一切。
让 Agent 保持在正轨上的约束。捕捉错误的反馈循环。告诉 Agent 它身处何处的文档。它有权使用的工具。
去掉约束 → 原始的语言模型在你的代码库中胡乱猜测。
加上正确的约束 → 能够交付生产代码的系统。
这个名字来源于马具。
约束就像是缰绳、马鞍和马衔铁,它们将强大但不可预测的动物引导到有用的方向。
你不是让马变得更聪明。你是设计装备,让它的力量变得有用。
2. 操作系统类比

Philipp Schmid 给出了最好的技术框架:
把它想象成一台计算机。
→ 模型 = CPU(原始处理能力)
→ 上下文窗口 = RAM(有限、易失的工作记忆)
→ 约束 = 操作系统(管理 CPU 看到什么以及何时看到)
→ Agent = 运行在之上的应用程序
你的模型很强大。
但是如果没有操作系统来管理内存、调度任务和执行规则——它只是一块硅片。
大多数人都在运行没有操作系统的应用程序。
这就是为什么他们的 Agent 在生产环境中会失败。
3. 2026 年发生了什么变化

LangChain 在 Terminal Bench 2.0 上运行了同一个模型两次。
同一个模型。不同的约束。
→ 旧约束:52.8% 分数
→ 新约束:66.5% 分数
Vercel 则走向了相反的方向。
他们移除了 Agent 80% 的工具。
结果?性能更好了。
不是更差。
2026 年令人不安的事实:
→ Agent 从来都不是困难的部分。
→ 约束才是。
如果说 2025 年是 AI Agent 证明它们能写代码的一年……
那么 2026 年就是我们发现环境比模型更重要的一年。
第二部分:5 种约束产物(约束在实践中到底是什么样子的)
4. AGENT.md / CLAUDE.md 文件

最通用的约束产物。
分布在代码库中的 Markdown 文件。
Agent 在每次会话开始时读取它们——就像新工程师加入团队时的入职文档。
里面包含什么:
→ 项目上下文
→ 编码规范
→ 架构决策
→ “我们这里怎么做”的指南
→ 当前正在进行的工作
OpenAI 称之为 AGENT.md。
Anthropic 称之为 CLAUDE.md。
Cursor 使用 .cursorrules。
名称不同。原理相同。
每个主要模块一个文件。随着项目发展而更新。
没有它们:Agent 每次会话都从零开始。有了它们:Agent 每次会话都信息充分。
5. JSON 功能列表(进度追踪器)

当一个 Agent 在多个会话中构建整个应用时,它每次会话都从一个空白的上下文窗口开始。
它怎么知道哪些已经完成了?
一个 JSON 文件。
每个条目定义:
→ 一个功能
→ 如何验证它是否工作
→ 通过 / 失败状态
Agent 在会话开始时读取这个文件。选择优先级最高但失败的功能。实现它。将其标记为通过。提交。重复。
为什么用 JSON 而不是 Markdown?
Anthropic 发现 Agent 意外覆盖 JSON 的可能性比覆盖 Markdown 小。
小细节。在 6 小时的自主运行中关系重大。
6. 会话初始化流程

每次会话都以相同的方式开始。
每次。每一次。
Anthropic 的 7 步启动序列:
- 确认工作目录
- 读取 git 日志和进度文件
- 检查功能列表,找到优先级最高的未完成项
- 启动开发服务器
- 运行基本的端到端验证
- 实现一个功能
- 提交并附带描述性消息 + 更新进度
没有这个:
Agent 会浪费前 20 分钟来弄清楚已经存在什么。
每次会话都在重新发明轮子。
有了它:
Agent 立即信息充分,直接开始工作。
7. Sprint 契约

在 Agent 编写一行代码之前:
两个 Agent 进行协商。
生成器 Agent 提议:
→ 它将构建什么
→ 如何验证成功
评估器 Agent 审查:
→ 提议是否完整?
→ 成功标准是否清晰?
只有在双方都同意后,实现才开始。
这是一次设计评审。
只不过两个参与者都是 AI。
为什么这很重要?
在同一轮次中规划和执行的 Agent 会产生不可靠的输出。
规划步骤——即使由 AI 完成——也能显著提高输出质量。
8. 结构化任务模板

在任何编码之前:
约束分析真实的代码库。
它生成一个基于实际的影响地图:
→ 真实的文件路径(不是幻觉出来的)
→ 实际存在的真实符号名称
→ 要遵循的现有模式
→ 具体的验收标准
然后实现开始。
这听起来很明显。
但大多数团队跳过了这一步。
Agent 猜测文件结构。发明不存在的 API 端点。构建不适合代码库的东西。
执行前基于实际的上下文 → 输出质量大幅提升。
第三部分:三个阵营(三个团队遇到了同一堵墙——并建造了三架不同的梯子)
9. OpenAI:环境优先

OpenAI 的 Codex 团队遇到了一个荒谬的问题。
100 万行生产代码。零行手动编写。
在那个规模下,你无法审查每一行代码。
所以他们没这么做。
相反:
他们如此彻底地设计了环境,以至于 Agent 首先就能产生可审查的输出。
他们的方法:
→ 严格的依赖流程(类型 → 配置 → 仓库 → 服务 → 运行时 → UI)
→ 整个代码库中的 AGENT.md 文件
→ Agent 直接接入 CI/CD 管道
理念:设计好环境。然后让 Agent 自由发挥。
证明:Sora Android 应用。4 名工程师。28 天。Play Store 排名第一。99.9% 无崩溃率。
Codex 每周处理 70% 的内部 Pull Request。
10. Anthropic:将执行者与评判者分开

Anthropic 遇到了一个不同的问题。
当他们要求 Agent 评估自己的输出时:
它会自信地赞扬自己的工作。
即使,在人类观察者看来,质量明显平庸。
自我评估行不通。
Agent 既是学生又是老师。
而且它在给自己打全 A。
他们的解决方案:三个专门的 Agent。
→ 规划者 — 将 2 句话的提示转化为完整的产品规格
→ 生成器 — 一次一个 Sprint 地实现功能
→ 评估器 — 使用浏览器自动化像真实用户一样测试运行中的应用
洞察:让一个独立的评估器持怀疑态度,远比让生成器批判自己的工作容易得多。
结果:单独 Agent(无约束):9 美元,20 分钟
→ 损坏的应用 完整约束:200 美元,6 小时
→ 可用的软件,带有精美的 UI
11. ThoughtWorks:2×2 框架

ThoughtWorks 从不同的角度切入。
他们不是在构建产品。
他们在观察 50 多个工程团队在相同的事情上失败。
他们的洞察:沿着两个轴对每个约束控制进行分类。
轴 1: 它何时运行?
→ 前馈 = 在 Agent 行动之前(指导)
→ 反馈 = 在 Agent 行动之后(传感器)
轴 2: 它如何工作?
→ 计算型 = 确定性的,毫秒级(linter、类型检查器、测试套件)
→ 推理型 = 使用 LLM,秒级(代码审查 Agent、语义分析)
2×2 矩阵:
→ 计算型前馈:类型系统、linter、架构规则
→ 计算型反馈:测试套件、覆盖率分析、变异测试
→ 推理型前馈:规格文档、约束描述
→ 推理型反馈:LLM 代码审查者、行为验证器
单独前馈或单独反馈都不行。
你需要两者。
第四部分:每个阵营都同意的 5 条原则(三个团队从未协调过。他们独立得出了相同的结论。)
12. 原则 1:上下文胜于指令

OpenAI:“给一张地图,而不是一本 1000 页的手册。”
Anthropic:JSON 功能列表和进度文件,让 Agent 始终知道它们在哪里。
Red Hat:在生成任何任务之前分析真实的代码库。
ThoughtWorks:“前馈。”
不同的词语。相同的发现。
向 Agent 展示世界的当前状态,始终优于抽象地告诉它该做什么。
→ 基于真实的文件路径
→ 适合代码库的代码
→ 从模糊的描述开始工作
→ 幻觉出来的文件路径和发明的 API
教训:在 Agent 输入任何内容之前,确保它确切地知道它在哪里。
13. 原则 2:规划和执行必须分离

OpenAI:人类设计环境,Agent 执行。
Anthropic:专用的规划者 Agent 在生成器接触任何代码之前运行。
ThoughtWorks:在规划和实现之间设置强制的人工审查检查点。
Red Hat:阶段 1(影响地图)和阶段 2(实现)之间有硬性关口。
每个阵营都独立发现了这一点:
让 Agent 在同一轮次中规划和执行会产生不可靠的输出。
规划步骤不一定由人类完成。
但它必须是一个单独的步骤,其输出在实现开始之前被审查。
14. 原则 3:反馈循环是不可协商的

OpenAI:Agent 接入 CI/CD 和可观测性系统。
Anthropic:专用的评估器 Agent 使用浏览器自动化。
ThoughtWorks:正式化为“传感器”。警告仅前馈的方法永远无法确认指导是否真的有效。
实现同一原则的三种方法:
→ OpenAI 使用自动化测试和 CI
→ Anthropic 使用另一个 LLM
→ ThoughtWorks 说两者都用,分层使用
他们在谁提供反馈上意见不一。
他们在你是否需要反馈上没有分歧。
没有反馈的约束只是一个多了几步的提示词。
15. 原则 4:一次只做一件事

OpenAI:将目标分解成更小的构建块,深度优先工作。
Anthropic:强制每个 Sprint 一个功能,并在每个功能后提交。
ThoughtWorks:分阶段生命周期(预集成 → 后集成 → 持续监控)。
试图一次做太多事情的 Agent:
→ 耗尽上下文
→ 失去连贯性
→ 悄悄遗漏需求
Anthropic 的流程:
读取进度 → 选择一个功能 → 实现 → 提交 → 重复
强制增量主义是所有成功约束的普遍特征。
16. 原则 5:代码库就是文档

OpenAI:将 AGENT.md 文件嵌入仓库。
Anthropic:将功能列表、进度文件和 git 历史存储为 Agent 的连续性机制。
ThoughtWorks:衡量“可约束性”——代码库对 Agent 的可读性。
没有人维护一个单独的 Agent 知识库。
仓库是唯一的事实来源。
如果一个约定、约束或架构决策不在代码库中——Agent 就不会知道它。
实际含义:
→ 投资于代码组织的团队会免费获得更好的 Agent 性能。
→ 混乱的仓库 + AI Agent = 混乱,但规模更大。
第五部分:悖论——为删除而构建(约束工程中最反直觉的真相)
17. 约束衰减是真实存在的

当 Anthropic 从 Opus 4.5 升级到 Opus 4.6 时:
Sprint 分解——曾经是必不可少的——变成了累赘。
模型改进的规划能力使其变得多余。
一个在 3 月份是承重结构的约束组件,到了 4 月份就成了开销。
然后 Opus 4.7 发布了。
模型开始验证自己的输出。
评估器 Agent 的职责描述开始缩小。
这就是约束衰减。
约束中的每个组件都编码了一个关于模型不能做什么的假设。
随着模型的改进 → 这些假设过期 → 该组件变成开销。
Opus 4.5:Sprint 分解 + 每个 Sprint 评估
Opus 4.6:无 Sprint 分解 + 单次评估(节省 38% 成本)
Opus 4.7:模型开始自我验证 → 评估器角色进一步缩小
18. 为删除而构建

Philipp Schmid 的建议:
“为删除而构建。”
设计每个约束组件使其可移除。
定期测试每个组件:关闭它,并衡量输出质量是否变化。
如果没有变化:删除它。
Manus 在 6 个月内重构了他们的约束 5 次。LangChain 在 1 年内重组了 3 次。Vercel 移除了 80% 的工具 → 获得了更好的性能。
这些不是糟糕工程的标志。
它们是在快速改进的模型之上构建的自然结果。
携带死掉的约束组件会在每次运行时消耗 Token。零额外质量。纯粹的浪费。
19. 成本现实

来自 Anthropic A/B 测试的真实数据:
→ 单独 Agent(无约束):9 美元,20 分钟
→ 可用的 UI,损坏的核心功能
→ 完整约束(Opus 4.5):200 美元,6 小时
→ 可用的软件,精美的 UI,正确的物理效果
这是 22 倍的成本增加。
对于一个功能产品与一个仅在截图中看起来正确的演示相比。
这是贵还是便宜,完全取决于一个损坏的版本对你的团队来说代价有多大。
但这里有一个没人谈论的事情:
约束 + 模型的组合是不断演化的。
200 美元的约束在一次模型升级后变成了 124 美元。
趋势线:
→ 更好的模型 = 更简单的约束 = 更便宜的运行 = 更快的输出
2026 年获胜的工程师不是在编写最好的代码。
他们是在设计最好的约束。
并且愿意在约束不再值得保留的那一刻将其丢弃。
结语

你刚刚学到的所有内容:
约束是什么:
→ 1. Agent = 模型 + 约束
→ 2. 模型 = CPU。约束 = 操作系统。
→ 3. 同一个模型,更好的约束 = +13% 性能
5 种约束产物:
→ 4. CLAUDE.md / AGENT.md — Agent 的入职文档
→ 5. JSON 功能列表 — 进度追踪器 + 测试套件合二为一
→ 6. 会话初始化流程 — 每次都相同的 7 步启动
→ 7. Sprint 契约 — Agent 在编码前进行协商
→ 8. 结构化任务模板 — 真实的文件路径,真实的模式
三个阵营:
→ 9. OpenAI:设计环境,让 Agent 自由发挥
→ 10. Anthropic:将执行者与评判者分开
→ 11. ThoughtWorks:2×2 前馈/反馈框架
5 条普遍原则:
→ 12. 上下文胜于指令
→ 13. 规划和执行必须分离
→ 14. 反馈循环是不可协商的
→ 15. 一次只做一件事
→ 16. 代码库就是文档
悖论:
→ 17. 约束衰减 — 上个月有效的,这个月可能有害
→ 18. 为删除而构建 — 测试并移除死掉的组件
→ 19. 成本现实 — 更好的模型 = 更简单的约束 = 更便宜的运行
2026 年获胜的工程师不是在编写最好的代码。
他们是在设计最好的约束。
并且愿意在约束不再值得保留的那一刻将其丢弃。
如果这篇文章对你有用:
→ 转发,让你的网络中的构建者看到
→ 关注 @sairahul1 每周获取更多类似内容
→ 收藏这篇文章 — 当你的 Agent 开始行为不端时,你会回来参考的
我撰写关于 AI、构建产品以及 2026 年真正有效方法的内容。





