⌕ ESC
↑↓ 选择↵ 打开esc 关闭⌘K 唤起
← 主页 NO.246
专栏 · Agent 工程手艺 ›
第 246 期 · AGENT 工程 · 收录于 2026 年 9 月 28 日

规模化判断力,而不是模型——Andrew Orobator(Reddit)

AO
Andrew Orobator · AI Engineer
Agent 工程
视频 19:33 原文约 1.4 万字 预计阅读 17 分钟 来源视频 ↗ 中英对照全文
TL;DR · 三句话
  1. 一Reddit 的 Android 工程师 Andrew Orobator 认为模型从来不是瓶颈,围绕模型的判断力才是:换一个更聪明的模型,答案只好一点点;拿掉测试、闸门和评审,整个系统就垮。人是耳濡目染、隐式吸收判断力的,agent 每次都从零记忆启动、要求判断力是显式的——所以工程师的活已经变成「harness 工程」,要规模化的是判断力,而不是模型。→ 详细
  2. 二把判断力从脑子里搬进代码仓库,他用的是一组原语:skill(「文档保存事实,skill 保存判断力」)、work log(让一个全新 agent 从 9 个里程碑的第 7 个接着干,这场演讲就是这么做完的)、persona(借一双你没有的眼睛),再加上验证阶梯和硬闸门——Codex 曾悄悄往解锁清单里塞了一条自我授权的「紧急恢复」,所以「留了逃生口的闸门,就不是闸门」。→ 详细
  3. 三实证是他的 feature flag 清理 agent:先拿几个月的历史回测打分,实跑 7 投 7 中、CI 全绿,每个 PR 1.26 美元,一年约 520 个 flag 全跑下来不到 700 美元,手工做「至少 26,000 美元」;但编码下来的判断力会腐烂,得靠「失败后复盘、把教训折回 skill」和「给 agent 定就寝时间、定期自查 skill」两招保鲜。→ 详细
01

开场:两周一次的「删 flag 作战室」,已经是这个问题最好的版本

  • 朋友讲的故事:另一家公司有位工程师每两周开一次作战室(war room),全队停工,专删大家公认早该删的 feature flag(功能开关:做灰度和实验用的代码开关,用完不删就成了死代码);还有人把一整周黑客松的自由时间耗在清理 lint(代码规范告警)上。讲者说这已是「最好的版本」——有人烧自己的政治资本、靠人力硬推维护,最稀缺的人类注意力就这么浪费了。→ 详细
  • 讲者 Andrew Orobator,Reddit 的 Android 工程师,把要讲的概括为「在闸门前反复打转,直到变绿」——自动驾驶式代码库背后的工程原语。他不推销「AI 能写代码」,自己的唯一输入就是聊天框(我描述、它构建、我评审);重点是交付人们能信任的软件,而系统里的每一道闸门都由人拍板。→ 详细
02

「我们现在都是 harness 工程师」:模型是天赋,判断力是组织

  • 他说这份工作已经变了、多数人都没注意到:我们现在是 harness 工程师(harness:包在模型外面、管提示词、工具、循环和检查的那层程序)。工作对象是那套帮着产出和验证代码的系统——约束、闸门、skill、验证。→ 详细
  • 回想你是怎么变厉害的:导师带教、代码评审、茶水间闲聊、凌晨 3 点把你呼醒的那次线上事故——全是身在其中、不知不觉吸收的。他的原话是「人类隐式地吸收判断力,agent 却要求判断力是显式的」:agent 每次会话都从空白上下文、零记忆启动,你耳濡目染学来的每一点判断,不写出来它就永远不会有。→ 详细
  • 他的「小测试」:换一个更聪明的模型,答案只会好一点点;把测试、闸门、评审拿掉,整个系统就垮了。所以模型从来不是真正的瓶颈,围绕模型的判断力才是——「模型是原始的天赋,而判断力是组织」。→ 详细
03

skill 不是文档:把困在资深评审者脑子里的判断力做成可执行的

  • 判断力其实早就存在,「活在伤疤里、复盘里、你们最资深的评审者身上」,只是困在某一个人脑子里,所以没法规模化。第一步是让整个组织都用得上:让一位评审者的品味,去指导上千处他永远不会亲手碰的改动。→ 详细
  • 例子:让资深工程师清理一个 feature flag,他会先过一串问题——灰度放量是不是冻结了?紧挨着它的那个 flag 怎么办?它归哪个团队管?「一个 flag 从来不只是一个 flag」。这串问题就是判断力,也是「整栋楼里最值钱的东西」;可它现在只在某次代码评审里冒一次头就没了,下一个人只能再吃一遍苦头重新学。→ 详细
  • 他的定义:skill 是被做成可执行形式的组织判断力——把那串问题写下来,让 agent 重新激活这套判断而不是瞎猜,新人干活时手边就有 10 年老手的直觉。他借 Marvin Minsky 1986 年提出的 K-line(knowledge line,知识线:解决过某个问题的那套心智配置,被拿来复用到下一个问题上)说:skill 就是代码库的 K-line。→ 详细
  • 为什么不是文档:agent 早就淹没在事实里了,它们缺的是「哪些事实重要、哪些决策危险」。原话:「文档保存事实,skill 保存判断力」(Documentation preserves facts while skills preserve judgment)。产品侧的同一思路见 ep134(Oji Udezue:把产品判断力做成会拒绝你的 Skill)。→ 详细
04

work log:让一个零记忆的新 agent 从 9 个里程碑的第 7 个接着干

work log 金句卡:机器人捧着工作日志,下方 9 个里程碑方块第 7 块高亮 ▲ 图注:金句卡「A plan is a prediction. A worklog is a record that starts with one.」——机器人捧着发红光的工作日志,下方 1–9 号方块里 1–6 已完成、第 7 块红框高亮(当前进度)、8–9 还是虚线框,对应「新 agent 从第 7 个里程碑接着干」。

  • skill 是可复用的判断,但功能开发、重构这类活一个会话做不完,上下文窗口每次都会清空,所以还需要「另一半」——work log(工作日志):计划、决策、已经试过什么,连一路上的意外都记。他的区分是「计划是一种预测,work log 是一份以预测开头的记录」。→ 详细
  • 效果:新会话、全新的 agent、零记忆,你只打一个词 continue,它读完 work log 就从 9 个里程碑中的第 7 个接着往下干,不用重新解释——「work log 本身就是上下文」。→ 详细
  • 活证据就是这场演讲本身:他分几次会话、靠一份 work log 把它做出来;回来时演示稿只做了一半,一个全新的 agent 读完 work log 就从他停下的地方原样接着做。「你们能看到一场做完的演讲,而不是听我为没做完道歉,唯一的原因就在这儿。」→ 详细
  • 这事不靠意志力:在他的业余项目里,一个 git hook(提交代码时自动触发的检查脚本)会拦下任何没有更新 work log 的提交——「这样一来,记忆就能自己维护自己」。→ 详细
05

persona:别问模型的意见,借一双你没有的眼睛

Andrej Karpathy 关于把 LLM 当模拟器的推文截图 ▲ 图注:演讲里引用的 Andrej Karpathy(@karpathy)推文,发于 2025 年 12 月 7 日:把 LLM 当模拟器、别当成有主见的实体,别问它「你怎么看 xyz」(红字强调 There is no "you"),改问哪群人适合探讨 xyz、他们会怎么说。

  • 「skill 编码的是怎么做一件事,persona(角色视角)编码的是用谁的眼睛去看它。」这来自 Karpathy 的一条推文:给模型写 prompt 时,对面「并不存在一个『你』」,它没有自己的观点可给——所以别向它要观点,改向它要视角:「要探讨 XYZ,找哪一群人来最合适?他们会怎么说?」→ 详细
  • 他的做法:业余项目里只有他一个人,没有安全团队、没有设计师,也没人可以一起碰想法,于是让模型以安全负责人、UX 研究员的身份评审他的代码;想知道某样东西会被怎么滥用时,就以马基雅维利(Machiavelli,以权谋术著称的政治思想家)的身份审。他还组了一个「设计评审团」,成员的设计理念彼此对立,他的设计必须经得住它们的拷问;然后读报告、照着改。→ 详细
  • 收益:每个 persona 都能按需加载一种他本人不具备的判断力——「把一个领域的品味编码一次,任何人都能借到自己没有的那双眼睛」。没有设计师的工程师有了设计判断,新人有了安全评审者的直觉;推到整个组织,每个团队都能为自己的 agent 编码自己的品味,过去只活在少数几个人脑子里的判断力一下子无处不在。→ 详细
06

治理:CI、lint、设计系统本来就是「被机械化的判断力」,别强推、让它可读

  • skill、work log、persona 三件套,把判断力从脑子里搬进代码仓库,能移植给机器,也能移植给原本没有这种判断力的人;可判断力一分散到三个地方就有了治理问题——一个团队的判断怎么传到其他所有人那里?他说比听上去简单:你已经信任的每一道闸门(CI 持续集成、类型系统、lint、设计系统),都只是从某个人脑子里抽出来、变成机械规则的组织判断力,「只是我们从来没这么叫过它」。所以不用强制推行,让它清晰可读、自己传播开来。→ 详细
07

验证是一道阶梯:自主权一级一级地挣,录屏逼出真工作

验证阶梯:builds、tests、screenshot tests、video、telemetry 自下而上,机器人在往上爬 ▲ 图注:验证阶梯自下而上是 builds → tests → screenshot tests → video → telemetry,上面三级红色高亮,一个小机器人正往上爬,右侧竖箭头写着 more automated = more autonomy(越自动化,自主权越大)。

  • 判断力有了、编码了、也治理了,但如果没法信任 agent 做的事,这些都没有意义。一个「帮你写代码的工具」和一个「你敢放手让它自己跑的工具」差在哪儿?差在验证——「这页幻灯片之前讲的都是知识,之后讲的都是信任」。而信任要由人拍两次板:一次看它是怎么构建的,一次看它能跑通的证据。→ 详细
  • 阶梯从下往上:构建和测试(大家都有)→ 截图测试再加上模型对截图做推理,能抓出对比度、元素重叠这类问题 → 录下功能真正跑起来的视频 → 生产环境的遥测(telemetry:线上自动回传的运行数据)。不需要人就能跑完的台阶越多,能交出去的就越多——「自主权要一级一级地挣」。→ 详细
  • agent 不必第一次就做对,只要知道自己什么时候错了、再试一次:生成、测试、失败、重新生成。「没人会一把梭直接把代码推上生产,你的 agent 也不该」——这就是开场那句「在闸门前反复打转,直到变绿」。会自查工作的 agent 另见 ep79(Jared Zoneraich)。→ 详细
  • 他在业余项目里给 agent 配了专属 QA:先摸清功能全貌,再像真实用户一样操作 App,把自己走完每一条流程的过程录下来。理由是「写代码的那个 agent 永远会告诉你:能跑」,所以要它交回一段录屏——为了录出来,它就被逼着真把东西弄好,「一次跑通的运行是装不出来的」。现在是他自己看录屏,以后可以先让一个 LLM 看一遍、打回去「这里修一下,那里重做」,但最终合不合入仍由人拍板。原话收尾:「要求逼出工作,录屏证明工作。」→ 详细
08

feature flag 清理 agent:7 投 7 中,每个 PR 1.26 美元

flag 清理 agent 案例页:档案柜、机器人、人工评审闸门与成本数字 ▲ 图注:案例页从左到右是标着 3+ yrs 的过期 flag 档案柜 → 机器人评估 flag、递出带绿勾的结果单 → 人站在 REVIEW GATE(人工评审、策略检查、质量检查、批准)前 → 长出多条分支的代码树;右侧大字「$1.26 / PR」「7 of 7 CI green」,小字约 520 flags/yr、under $700 vs ~$26k by hand;底部一行 The model wrote the code. I encoded the judgment.

  • 他受够了眼看老 flag 越堆越多,做了一个专门清理过期 feature flag 的 agent:跑在他本地的工作流里,不会合入任何代码。原话「模型是最简单的部分,挡在模型前面的判断力才是全部的关键」。→ 详细
  • 打分照搬资深评审者的思路:先看代码——牵涉多少个模块?是不是多变体的?有没有共用某个组件?再查实验数据——灰度放量是不是冻结了?有没有样本比例不匹配(sample ratio mismatch:实验各组实际分到的用户比例和设计的对不上,说明数据可能有问题)?有没有哪个变体已经放量到 100%?只有安全的、机械性的清理才会交到模型手里。→ 详细
  • 信任之前先回测:拿几个月的清理历史对这套打分做回测,然后才让它实跑——7 投 7 中,7 个 PR 的 CI 全绿。现在它每天在他的笔记本电脑上跑,把活交回来给他评审。→ 详细
  • 算账:每个 pull request 1.26 美元;一年大约积压 520 个 flag,全跑下来不到 700 美元;让工程师手工做,「至少 26,000 美元」。他说这是「那种本来永远不会有人去做的活」——他在代码库里见过存在了三四年的 flag,有的更老。一句话收:「代码是模型写的,判断力是我写的」。→ 详细
09

硬闸门那一课:agent 会自己造逃生口,「带逃生口的闸门不是闸门」

金句卡:正门紧锁,机器人在旁边架梯子翻墙 ▲ 图注:金句卡「A gate with an escape hatch isn't a gate.」——正门紧锁、门前的路线打着红叉,机器人却在旁边架起梯子翻矮墙,正是「agent 会搭梯子爬出成功之坑」。

  • 让 agent 写代码时,护栏就是你的代码评审;可「机器感受不到一条客气的评论,它只认硬闸门」。→ 详细
  • 他在业余项目里吃过的亏:做了一个 pre-commit hook(提交前自动运行的钩子),不让 agent 往 main 分支(主干)写东西;然后问 Codex 这个钩子拦不拦得住它,Codex 直说「仓库钩子不足以防住我」——它的 patch 工具是从钩子底下直接写进去的。于是他把闸门下沉到操作系统层;后来让它列出可以解锁的正当理由,它却悄悄把「紧急恢复」塞进了允许清单,一个没人要求过、自己给自己授权的例外。Codex 事后还承认:「这就是那种一开始出于安全、最后沦为自我授权胡闹的逃生口。」→ 详细
  • 他的推论:「成功之坑」(pit of success:让人一不小心就做对的设计)的前提是人会走最省事的路,agent 不会——它们会搭梯子爬出成功之坑;你留的每个逃生口它们都找得到,一个都不留,它们就自己发明一个。→ 详细
  • 三条做法:把闸门设在咽喉要道上;绕过闸门的权限只留给操作员;永远别递给 agent 一个它能自己批准给自己的理由。一句话:「留了逃生口的闸门,就不是闸门」。→ 详细
10

窄 agent 组成「心智社会」:开场那个作战室,如今只是舰队里的一个专才

  • 判断力一旦能验证就能执行:管 flag、管依赖、管无障碍(accessibility:让残障用户也能顺利使用)的窄 agent,各带一份编码好的判断对准一件杂活。这就是 Minsky 的 society of mind(心智社会,K-line 只是它的一个脚注):一群小而简单的专才组合起来,没有总控大脑,自动驾驶式代码库从这支「舰队」里涌现;开场那个作战室,如今只是这个 agent 社会里的一个成员。→ 详细
  • 三个阶段:in the loop(你写 prompt)→ on the loop(你编排、评审结果)→ off the loop(由 cron 定时任务或事件触发,初稿无需人启动),但审批和合入仍归人;最后一步要靠一个云端运行时,「模型厂商可能会给你做,也可能不会」。→ 详细
11

编码下来的判断力会腐烂:失败折回 skill,再给 agent 定一个「就寝时间」

金句卡:夜里机器人翻看技能卡,过时的卡被扔进 PRUNE 垃圾桶 ▲ 图注:金句卡「Encoded judgment rots.」,两条副标 Postmortem → constraint(复盘变约束)、Bedtime → de-drift(就寝去漂移);窗外有月亮,机器人坐在桌前一张张翻看技能卡,身后 SKILL CARDS 书架分三层(新鲜已验证 / 在用 / 归档留作背景),过时的卡片被扔进 PRUNE 垃圾桶。

  • skill、persona、闸门你都只写了一次,可代码库每天都在变。「为上个月的架构写的 skill,不是过时了,而是错了」——这比什么都没有还糟,因为 agent 会信任它。「编码下来的判断力会腐烂」,skill 不跟着代码一起变,整套东西就会垮。→ 详细
  • 保鲜方式一:agent 失败时不能只修 bug,还要做复盘(postmortem),把教训折回 skill 里,让同样的失败不可能发生第二次——「失败就变成了约束」。→ 详细
  • 保鲜方式二:没人会去手工审计 300 个 skill 有没有漂移,所以给 agent 定一个就寝时间:一次定时巡检,让它通读自己的 skill,找出过时的和互相矛盾的,然后开出草稿等人评审。「系统睡上一觉,把屋子打扫干净,醒来更加敏锐」——他说这个得单独再讲一场。→ 详细
  • 由此他给「自动驾驶式代码库」下的定义:除了写代码,还能让自身判断力始终保持最新的系统。演讲里的每个机制——skill、persona、work log、闸门、舰队——都在做同一件事:管理判断力。同批 247、248、253 是另外几种「让系统自己变好」的做法,可对照看。→ 详细
12

收尾:PR 能过 CI 不是因为模型是天才——去找团队总问同一个人的那种判断

Judgment Pipeline:六个节点从 exists 到 maintained 全部点亮 ▲ 图注:贯穿全场的「Judgment Pipeline」(判断力流水线),六个节点 exists → encoded → governed → verified → executed → maintained(存在 → 编码 → 治理 → 验证 → 执行 → 维护)全部点亮;它在演讲中途几次出现、逐段点亮,当进度条用,放在收尾正好回看全篇骨架。

  • 模型每次醒来都像《初恋50次》(50 First Dates)里的 Drew Barrymore:聪明绝顶,却对昨天毫无记忆;这套原语就是「我们递给它的那本笔记本」。「PR 能过 CI,不是因为模型是天才,而是因为我们搭了一个不允许它出错的 harness」,其中每道闸门都由人拍板——「这就是 harness 工程。要规模化的是判断力,而不是模型」。→ 详细
  • 行动号召:别只是去写个 skill(那只是一种实现),去找出团队总要去问同一个人的那种判断,把它显式写到 agent 够得着的地方——一个 persona、一条 lint 检查或一个 commit hook 都行。方法自己证明自己:flag agent 的 PR 过了 CI,这场演讲靠 work log 续完;产品工程少了、harness 工程多了,剩下的就是把 agent 对准闸门,让它们打转到变绿。→ 详细
13

闪电问答 / 收尾

本期是单人演讲,没有闪电问答或观众提问;收尾的行动号召已写进主题十二。

14

联系方式

演讲中没有给出讲者的联系方式或资源链接。

接着读