目录

AI Agent 失控:从模型崇拜到环境工程

一个真实场景。

你让一个 AI Agent 负责代码审查,第一天它干得还不错。第二天你让它继续,它忘了昨天的审查标准,开始用另一套逻辑评分。第三天它直接在 PR 里删代码,理由是"看起来没用"。一周后你得到一堆风格不一致的代码、一个报废的测试套件,和一个不知道为什么走偏了的 Agent。

你开始怀疑模型不够强。换了个更强的模型,同样的问题重复出现。

问题不在模型。在运行环境

模型很强,Agent 却总出问题

过去几年行业焦点一直是"模型能力"。GPT-4o 比 GPT-4 强,Claude 3.7 比 3.5 强,这个逻辑没问题。

但模型强不代表 Agent 强。

一个只训练过单轮对话的模型,你让它跑一周的代码任务,它不会天然理解"任务状态需要持久化"、“不要修改你没要求改的模块”、“每次提交前跑测试”。这些不是模型的缺陷,是运行环境没有提供约束

Harness Engineering 的核心命题是:如何为 AI Agent 构建一个可靠的、可控的、出了问题能追踪的运行环境。

行业逐渐形成的共识:Agent = 模型(大脑)+ Harness(身体/环境)。模型负责推理,Harness 负责让推理结果可靠地执行。

Harness 的四大支柱

1. 上下文架构:别往模型脑子里塞垃圾

“context 越来越长,输出质量却越来越差”——这是"context rot(上下文腐烂)"。

常见的做法是把所有东西都塞进 context:系统 prompt、几十个 few-shot examples、项目所有文档、最近的对话历史。Context 越来越长,模型在无关信息里打转,开始出现"幻觉指令"——它开始执行 context 里根本没让你做的事。

上下文架构的核心是分层和渐进式披露

系统层:固定规范(编码风格、架构约束、不变量)
   ↓ 按需注入
任务层:当前目标的背景、验收标准
   ↓ 按需注入
执行层:具体某一步的输入/输出,通过 Tool 调用传递

这样 model 在每一步只看到它真正需要的信息,不需要在每一步都从一堆积压文档里筛选。

2. 机械化约束:代码能拦住的事,别靠嘴说

Prompt 说"不要修改 tests 目录",模型在压力下可能忽略。

这不是模型的错。Prompt 本质上是在"请求"行为,不是"强制"行为。模型在推理时可能会权衡:写这个测试是否对任务有帮助?然后决定跳过。

机械化约束是用工具强制执行

  • Linter 拦住违规提交:CI 里跑静态检查,Agent 写了不符合规范的代码 → 门禁 fail
  • 架构测试:ArchUnit 用代码定义组件边界,Agent 试图跨层调用 → 测试 fail
  • 强制门禁:没有 human override 选项,Agent 不能绕过验证

Stripe 的 Minions 系统就是这样跑的。Agent 写代码 → CI 跑测试 → 失败 → Slack 通知 → Agent 自己读错误、修代码、重跑。没有人类介入循环。

Prompt = 建议,机械约束 = 规则。 建议可以被忽略,规则不能。

3. 持久化记忆:解决 AI 的失忆症

模型没有持久化状态。每次对话都是从零开始。

上一轮改了什么、做到了哪一步、下一步该做什么——模型不知道。Session 之间完全割裂,第二天启动和新人入职一样。

传统解法是"上下文传递",把历史对话塞进新请求。但这解决不了根本问题:上下文会满、传的是消息不是状态、跨 session 依然无法共享。

Harness 的解法是文件系统优先

/workspace/
  AGENTS.md          # 项目规约,机器可读
  progress.json      # 当前进度状态
  memory/
    20260414.md      # 每日工作日志
    MEMORY.md        # 长期记忆(偏好、决策、技能)

Agent 启动时先读 AGENTS.md 和 progress.json,形成对项目状态的完整认知。执行后把结果写回文件。下一个 session 读同一份文件,无缝衔接。

OpenClaw 的记忆分层就是这个思路的实践:Daily Notes 是原始日志,MEMORY.md 是长期记忆,Agent 每次启动先读这些,形成连续性。

4. 自验证反馈回路:让 Agent 重新理解需求,而不是重跑

传统开发:写代码 → 跑测试 → 失败 → 看错误 → 修代码 → 重跑

Agent 开发多了一步:写代码 → 跑测试 → 失败 → 重新理解需求 → 修代码 → 验证

最后一步是核心差异。Agent 犯的错往往不是"写错了",而是"理解偏了"。它在错误的假设下写出了逻辑上自洽但不符合需求的代码。

Ralph Loop 是这个模式的典型实现:Agent 提交代码后测试失败,退出信号被拦截,Agent 必须重新对照原始需求评估自己的代码,而不是简单地根据错误信息做表面修复。

行业实践:不只是在概念

OpenAI Codex:5 个月,100 万行无人手写的代码

OpenAI Codex 团队 5 个月产出了 100 万行代码。人类工程师全程没手写一行代码。

人类在做什么?设计 Harness,设计反馈回路,定义验证标准,然后让 Agent 在这个框架里跑。

这是 Harness Engineering 的理想状态:人类做架构,Agent 做实现,环境做验证。

Anthropic:跨 session 的进度保持

通过 claude-progress.txt 和 Puppeteer 浏览器自动化,实现能执行数天复杂任务的 Agent。

不是 Agent 变聪明了,是环境帮 Agent 记住了上下文。它可以在中途暂停、恢复,不丢失状态。

Stripe Minions:无人值守的开发循环

Agent 自动完成从写代码、到通过 CI、到 Slack 提 PR 的全流程。

CI 是反馈回路,Slack 是通知机制。两个组合起来,构成完整的 Agent 工作循环。

为什么 Prompt Engineering 不够用了

Prompt Engineering Harness Engineering
关注点 单次交互的质量 整个系统生命周期的可靠性
范围 模型 prompt 环境、工具、约束、状态
失效方式 prompt 被忽略 门禁 fail

这不是说 Prompt Engineering 没用。两者不在同一层。Prompt Engineering 是战术优化,Harness Engineering 是战略架构。

你可以在一个没有 Harness 的系统里优化 Prompt,效果有限。你也可以在一个 Harness 完整的系统里用朴素 Prompt,系统依然可靠运行。

工具链现状

  • AGENTS.md / CLAUDE.md:行业标准,存放项目规约和机器可读指令集
  • MCP(Model Context Protocol):连接 Agent 与外部工具的标准化协议
  • DeepAgents:LangChain 推出的开源 Harness 框架,支持中间件和自验证逻辑

最后

Harness Engineering 的本质是把"如何让 AI 可靠工作"从玄学变成工程。

当 Agent 出问题时,你该检查的不是模型够不够强,而是 Harness 够不够严:上下文有没有泄漏、约束有没有被绕过、状态有没有丢失、反馈回路有没有闭环。

模型是大脑,Harness 是身体。没有 Harness 的模型是一个会说话的空壳——看起来能动,遇到真实压力就散架。