作者总结了自己独立开发数据产品时,如何组织AI编程会话的上下文与harness——关键洞察是瓶颈已从代码生成速度转变为需求梳理能力。核心机制是设计一个始终加载的上下文池,配合按需触发的知识库,以控制token成本。
我独自运营一个数据产品。AI 会话承担了大部分的编码工作。这是一张地图,不是手册:三个部分,各有一个核心观点。每部分都会有更深入的文章。
对我而言,核心变化是:瓶颈不再是代码出现得多快,而是出现的东西是否可信。这三个部分都是对这个问题的回答。
模型阅读室里的每一样东西,每次请求都要付出代价,并且相互争夺注意力。所以我维护两个堆。
始终加载的内容:当前会话的身份、我们身处何方,以及少数几条出错代价很高的规则。另外加上一行索引指向其他一切,再加上两个纯粹的定向信息:我们处于循环的哪个站点,以及房间里还有谁——主要是 notary(公证员),即那个检查每次提交、拒绝违反规则的那个程序。如果一个会话不知道 notary 的存在,它会无意中绕过它行事,然后大吃一惊。
知识库:26 本书,每本一个主题,只在任务需要时调取。一本一个月才读一次的书,不应该被支付一千次的费用。始终加载的那个堆承载索引;书本身留在架子上。
决定放在哪个堆里的不是大小,而是不了解它的代价。
两个上限,来自两个不同的时间钟:
第二个上限是危险的那个,因为它永远不会被停止计费。
而如果我要复制到任何项目中的机制是:始终加载的堆有一个只能单向转动的棘轮。它只会缩小——新规则只能替代旧规则才能进入。没有这个棘轮,那个堆会无限增长,因为每学到一个教训,在学会的那天都觉得无比重要。
Harness 是模型周围的一切,但本身不是模型。我的,今天清点如下:
20 个书面程序,模型按名称调用——"执行夜间仪式"、"冷启动攻击这个设计"、"规划无人值守窗口"。文件,有版本控制,在失败时改进。
workers 拥有刻意不同的工具集。负责写代码的那个 worker 有自己的一份代码库副本,不能触碰主分支。负责测量某些东西的那个被拒绝访问设计文档——这样它就不会通过传染与我们达成一致。那种拒绝是一个程序,拒绝读取,而不是 prompt 里的一行字。
11 个自动化检查,其中三个在工具调用之前触发,并可以拒绝它。模型不决定一个行为是否被允许;它事后才发现不被允许。
这是我写这篇文章时第一次清点所有这些。20 个程序中有 9 个是死的——6 个从未被调用过一次,3 个是我自己签字废除但从未删除的。而清点还不够:其中 5 个是某个仍在忙碌的部门唯一的书面章程,所以"未使用"和"可以安全删除"不是一回事。
梯子不是机械装置。它是一个问题,对你写的每条规则都问:如果它在最糟糕的一天被忽视了,实际上什么阻止它?只有四个答案。
② a program on my machine runs on save; I own the off switch
③ a program on a server runs after the work leaves me; no off switch
④ a capability that doesn't exist not a rule — the action is impossible
每条规则都恰好坐在其中一个层级上。这把"我有一条关于那事的规则"——无法检查——变成了"那一条坐在②级"——可以检查。
然后我问了下一个问题——我的③级规则中,哪些有测试证明它真的会拒绝?——结果有三个没有测试。它们是我看不见的地方运行的三个:在一个 subagent 内部,以及通宵运行的地方。一扇你从不看的门,是一扇你从未证明过的门。
工作以轮次运行。一轮不是冲刺:它是一个循环,总是以相同的方式打开,并且有决策点将它发送到不同的路径。

其中有三个值得偷走。
第二站是核心。每轮开始时,测量上一轮预测的结果与实际发生的结果——从书面估算出发,而不是从记忆出发。
两个菱形拒绝向前。超出工时的工作不会延长;它死掉了,必须赢得下一轮。不值得武装的计划返回设计阶段——包括当它太空洞的时候,因为无论哪种方式,开始一次运行的成本是一样的。
最后一个菱形选择形态。能塞进一个上下文 → 一个会话运行到完成。不能 → 一个新鲜会话的链条:每环成本更高,但能撑过自己的上下文填满。
两种形态都包含一次 redteam 通过:一位 reviewer 拿到产物和代码库,没有别的,因为解释才是让 reviewer 与你达成一致的原因。
以及不那么光鲜的那一半
九个站点中有三个不是工作——它们是簿记,而且它们是那些被从图中省略的部分。它们维护服务文件:仪表板、法律(每个决策一行,从不重新争论)、计划、验证记录、知识库索引。
我终于测量了这需要多少成本:58% 的提交触及这些文件之一,而它们只占变更行数的 8.9%。频率非常高,质量几乎为零——所以要防范的不是成本,而是噪音,而这正是棘轮的用途。
Context — 保持定向持久化,知识按需加载,并对始终加载的内容设置单向棘轮,因为那是没有人会主动缩减的堆。
Harness — 给模型真正的装备,然后对每条规则问它实际上处于哪一级。
The loop — 每轮开始时测量上一轮,让超出工时的工作死去而不是漂流,并在任何无人值守的东西可能开始之前武装它。
更深入的文章陆续到来:装备,逐工具讲解 · 九个站点的实践 · 无人值守运行如何被武装,逐单元讲解 · 以及当一条无人阅读的警告终于长出牙齿时会发生什么。
For further actions, you may consider blocking this person and/or reporting abuse