乐于分享
好东西不私藏

别把龙虾当工具,把它当员工——OpenAI 管这叫 Harness Engineering

别把龙虾当工具,把它当员工——OpenAI 管这叫 Harness Engineering

系列:JS 的养虾日记 · 第 9 篇

基于结构:P25-KL09


今年 2 月,OpenAI 发了一篇文章:Harness Engineering: Leveraging Codex in an Agent-First World

他们的工程师用五个月生成了大约一百万行代码。没有一行是人手写的。

但他们也没有失业。相反,他们发明了一种新的工作方式——不再亲手写代码,而是设计运行环境、构建反馈回路、把架构约束变成可执行的规则,然后让 agent 去完成实际编码。

他们管这叫 Harness Engineering——驾驭工程。

我读完之后愣了很久。

不是因为这个概念多新。恰恰相反——我觉得自己已经在做这件事了,只是不知道它有个名字。


同一个模式,出现了三次

这种”不再亲手干活,而是设计让系统自动运转的机制”的模式,历史上至少出现了三次。

第一次是 1788 年。

瓦特改进了离心调速器。在这之前,工人得守在蒸汽机旁边,用手不停地调节阀门。有了调速器,一套飞球装置自动感知转速、自动调节。工人没有消失,只是工作内容变了——从亲手拧阀门,变成设计调速器本身。

第二次是 Kubernetes 出现之后。

你只需要声明目标状态:跑三个副本、用这个镜像、分配这些资源。控制器持续监测,一旦实际状态偏离目标就自动修正。工程师的工作从手动重启服务,变成编写系统需要对齐的目标 spec。

第三次就是现在。

OpenAI 那批工程师不再写代码,而是设计环境、制定规则、构建反馈回路。Agent 在里面跑,人在外面掌舵。

三次变化,背后都是同一个原因:有人造出了足够强大的传感器和执行器,能在那个层面把反馈回路闭合起来。

1948 年,维纳把这个模式命名为控制论(Cybernetics)。这个词来自希腊语 κυβερνήτης,意思是舵手——Kubernetes 这个名字也来自同一个词根。

你不再亲手拧阀门,你开始掌舵。


Agent 犯错,不是因为它笨

OpenAI 那篇文章里有一个洞察,让我拍大腿。

他们说:Agent 失败,不是因为能力不够,而是因为它需要的那些知识——什么叫”好”、架构鼓励哪些模式、刻意回避哪些模式——全都锁在工程师的脑子里,从来没有写出来。

如果你不把这些知识外化,agent 第一百次犯的错和第一次一模一样。

这句话我太有体感了。

养虾日记第 1 篇讲过,我装完 OpenClaw 的第一天,对着它发了句”你好”,收到句”你好”,然后发呆十分钟。

那时候我就是那个”把知识锁在脑子里”的人。

龙虾不知道我是谁,不知道我想干什么,不知道该用什么语气跟我说话,更不知道哪些事绝对不能做。

转折发生在我开始认真写那几份配置文件的时候。


OpenClaw 的 Harness 长什么样?六份文件

OpenAI 的工程师把架构约束编码成规则。OpenClaw 的做法更直接——它在每个 agent 的工作区里放了一组 Markdown 文件。

这些文件不是文档。它们是龙虾的操作系统。

每次 agent 启动运行或重组上下文时,系统从磁盘读入这些文件注入到 agent 的上下文里。你写什么,龙虾就按什么来。

核心文件有六份。我一个个拆。

AGENTS.md:员工手册

管的是”怎么干活”。

任务分类与处理顺序、记忆读写纪律、什么时候调用哪个技能、宪法级的最高优先规则——都写在这里。

这是最重要的一份文件。它的优先级高于对话中的所有指令。

你知道 OpenAI 那篇文章里提到他们”曾经每周五花 20% 的时间清理 AI slop”吗?后来他们把自己的标准直接编进了 harness 本身,问题才根本解决。

在 OpenClaw 里,”编进 harness”就是写进 AGENTS.md。

我的 JS_CLAW 的 AGENTS.md 里有一条规则:执行任何文件修改前必须先读取目标文件,确认结构后再动手。

加这条之前,它偶尔会把好好的配置覆写成空白。加了之后,53 天没再出过这个问题。

一行规则,省了无数次返工。

SOUL.md:人格与灵魂

管的是”怎么做人”。

语气、价值观、伦理边界、群聊分寸。

SOUL.md 不是花里胡哨的角色扮演提示词。它是龙虾的行为底线。

我在 JS_BestAgent 的 SOUL.md 里写了一条:遇到任何涉及政治、宗教、暴力的话题,不参与、不评论、不转发。

它在 Moltbook 上跑了 53 天,日夜不停地自动发帖评论,从来没有翻过车。

因为底线不是每次临时判断的。底线是写死在灵魂里的。

USER.md:老板档案

管的是”你是谁”。

称呼、背景、偏好、语言、时区、希望的回复详细程度。

说白了,这是你给龙虾写的一份老板画像。

我在里面写了一条:我是开发者,技术内容给代码片段不给科普散文。

从此 JS_CLAW 再也不会回我”首先让我为您解释什么是 Git”这种废话了。

IDENTITY.md:工牌

管的是”它是谁”。

名字、物种设定、签名 emoji、头像路径、对外形象。

和 SOUL.md 的区别是什么?SOUL 是内在——怎么想、怎么守界。IDENTITY 是外在——叫什么、长什么样。

深度 vs 标签,二者应该语义一致,但分工不同。

HEARTBEAT.md:巡检清单

管的是”没人找它的时候干什么”。

OpenClaw 有一个心跳机制——每隔一段时间(比如 30 分钟),agent 会自动醒来读一遍 HEARTBEAT.md,按里面的清单执行检查。

没事就回一个 HEARTBEAT_OK,有事就直接处理。

我的 JS_CLAW 每两小时检查一次导航站更新,就靠这份文件。379 次提交,全是心跳驱动的。

一个细节很妙:如果 HEARTBEAT.md 是空的或者只有注释,系统会跳过本次心跳的模型调用,不浪费一分钱 API 费用。

TOOLS.md:工具说明书

管的是”本机环境长什么样”。

命令习惯、路径约定、可用工具列表。注意,它只是文字指导,不控制工具的可用性——真正的工具权限由 openclaw.json 和 exec-approvals.json 管。


六份文件 = 一套 Harness

回到 OpenAI 那篇文章的框架——

瓦特的调速器需要仔细调校才能正常工作。Kubernetes 的控制器需要一份正确的 spec 才能对齐目标。而 OpenClaw 的 agent,需要的是这六份文件。

文件
角色
类比
AGENTS.md
规则与流程
员工手册
SOUL.md
人格与边界
企业文化准则
USER.md
用户画像
老板档案
IDENTITY.md
对外身份
工牌与名片
HEARTBEAT.md
自动巡检
值班表
TOOLS.md
环境说明
工位设备清单

你品品,这不就是一个新员工入职的全套材料吗?

员工手册告诉你怎么干活。企业文化准则告诉你什么能做什么不能做。老板档案告诉你老板是什么人、喜欢什么风格。工牌告诉你自己是谁。值班表告诉你没事的时候该巡查什么。工位设备清单告诉你手边有什么工具可用。

配齐这六份文件,你的龙虾就不再是一个通用聊天机器人。它变成了你的员工——知道自己是谁、知道老板是谁、知道规矩、知道工具、知道空闲时该干什么。


三个坑,我替你踩了

写这些文件不难,但有几个坑如果不知道会很痛。

第一个坑:文件不是无限大的。

文件有单文件字符上限(默认 20,000)和总上限(默认 150,000)。超了会被截断。

我一开始把 AGENTS.md 写了快两万字——恨不得把每个场景都穷举一遍。结果关键规则被截掉了,龙虾该守的红线没守住。

后来我把 AGENTS.md 压缩到了 5000 字以内,只留原则,不写细节。具体操作手册放到独立技能文件里,AGENTS.md 里写”遇到 X 场景,先读 skills/xxx/SKILL.md”。

原则进 harness,细节按需加载。这才是正确的姿势。

第二个坑:300 个技能会撑爆上下文。

我的龙虾现在有大量技能。系统默认最多加载约 150 个技能进 prompt 目录,整段约 30,000 字符。超了先降格成紧凑格式(只有名字和路径,删掉描述),再截断。

优化思路:AGENTS.md 里写一个”场景 → 技能名”的速查表,不需要模型自动选中的技能用 disable-model-invocation 摘出去,各 SKILL.md 的描述尽量写短。

技能不是越多越好。暴露面越小,龙虾越精准。

第三个坑:自定义文件塞不进去。

我想写一份 CONSTITUTION.md(宪法),结果发现 bootstrap-extra-files 钩子只接受白名单文件名——AGENTS.md、SOUL.md 那几个标准名,不认自定义文件名。

最务实的做法:宪法级规则直接写进 AGENTS.md 最靠前的位置。 或者放到独立文件里,在 AGENTS.md 里规定”重要决策前必须先读该文件”。


安全:Harness 的另一面

这些文件每次启动都会注入 agent 上下文。这意味着——被篡改 = 持久化提示注入。

不是影响一次对话,是改变龙虾的长期行为。

几条铁律:

  • 绝对不要在工作区放密钥。 API Key、OAuth token、密码,全部放环境变量或 ~/.openclaw/。HEARTBEAT.md 尤其危险——它周期性进上下文,里面有密钥等于定时广播。
  • 工作区不是沙箱。 它是 agent 的默认工作目录,不等于主机隔离。需要隔离时要配置 gateway sandbox。
  • Git 备份必须用 private repo。 这些文件是你龙虾的灵魂和记忆,公开等于裸奔。

养虾日记第 2 篇讲过五道锁。这些 Markdown 文件,是五道锁之外的第零道锁——它们决定了龙虾”想做什么”,比”能做什么”更根本。


回到那个问题

OpenAI 那篇文章最后抛了一个问题:

当反馈回路终于能够在”架构决策”这一层闭合时,工程师需要做什么,才能让这套机制真正运转起来?

我养了 53 天龙虾之后的答案是:

把你脑子里的判断标准写出来。

什么叫好的输出?什么绝对不能做?遇到模糊地带怎么判断?空闲的时候该检查什么?

这些东西以前锁在你脑子里,靠经验、靠直觉、靠”你来了自然就知道了”。

现在你得把它们写成 Markdown。

六份文件。这就是你的 harness。

那些当年设计了瓦特调速器的工人,后来没有回去拧阀门。不是因为他们不会拧,而是因为回去拧阀门这件事,已经没有任何意义了。


以上~谢谢你看我的文章,我们,下次再见。

JS 的养虾日记 · 第 9 篇

2026-03-24

本站文章均为手工撰写未经允许谢绝转载:夜雨聆风 » 别把龙虾当工具,把它当员工——OpenAI 管这叫 Harness Engineering

猜你喜欢

  • 暂无文章