MIT 6.S950 讲义导读:Lecture 5《The Harness》
学习清单第 27 份(2026-10-22 Stone 批准正式收录)。 一手来源:MIT 6.S950 Agency with AI(Shen Shen,MIT EECS),Lecture 5: The Harness,https://agencyai.mit.edu/w5/ (2026 年秋季课程;该页正文为嵌入的 slides.com 讲义幻灯片)。 二手对照:shao__meng 推文摘要(2026-10-21/22),仅作对照,不作事实来源;与原文不符处见「证据不支持什么」。 覆盖范围:讲义幻灯片文字层已读全(A–D 四节);关键数据图抽查核读 10 张(ARC-AGI-3 图表、harness 效应论文截图、RLM 摘要与曲线、弱/强模型组件翻转图、Pi 的 MCP 反转新闻截图等)。其余约 50 张多为界面/代码截图,其结论均有相邻文字对应;少数纯图表(不同模型的搜索差异图等)未逐张细读,下文断言不依赖它们。
价值判断(先说结论):值得占一席。它正中 Stone 自评的学习清单缺口「Agent 可观测性」,且是 26 份里第一份把 harness 的三组控制(上下文、检查、权限)系统追溯到经典计算机科学出处(1965–1975)的材料——对做 harness 三件套(thinktank / open-memex / opencode-fuse)又是面试谈资的他,是「谱系 + 量化证据 + 最小实现」三件套一次补齐。
一句话结论
Agent = LLM + Harness:模型只提请求、Harness 决定什么真正运行;这一讲用一个 300 行的教学 Agent 把「能看到什么、能拦住什么、该给多少 Harness」讲透,并给出反直觉的校准——Harness 没有通用最优解,它的效果取决于模型×任务,更多时候它是成本与行为变量,而不是成功率的万能药。
为什么值得看
- Stone 在 systemdesign 19 篇评价里亲手列的缺口之一就是「Agent 可观测性没有(tracing、日志、debug)」;本讲 B 节整节就是可观测性,且讲的是厂商正在把记录封起来之后的局面。
- 他的三个项目全是 harness 类:thinktank 是编排/评审 harness,open-memex 是记忆 harness,opencode-fuse 是路由 harness。这一讲的可控性三原则(上下文管理、强制检查、最小权限)正好是这三个项目的设计检查表。
- 讲义的证据风格与他欣赏的 pstack / Anthropic 方法论一脉:每条实践给「做什么 / 最佳实践 / 为什么」,且「为什么」追到经典出处——面试被追问「你的设计依据是什么」时,这是能答到第三层的材料。
叙事主线
讲师先立定义:裸 LLM 只是自回归的下一个词预测器,套上 harness 才成为能做事的 agent(A 节开篇)。然后她拿出教学样本 Baby Anigans:对着一个文本文件(示例是 6.390 课程评分政策页)回答一个问题、必须引用所依据的行号。样本跑通了,但第二个问题上,检查全过、答案却漏掉了一条例外条款——同一个症状(答案不完整),查下去却是两个完全不同的病因。这个「检查通过 ≠ 答案完整」的裂口把课程带进 B 节可观测性:我们能检查的记录本身也在被厂商逐项封存(推理加密、摘要锁定)。再由「能看」推进到「能控」(C 节):上下文、检查、权限三组控制不是新发明,分别对应 1965/1968 的存储层级与工作集、1972 年的引用监控器、1975 年 Saltzer & Schroeder 的最小权限与权限分离。最后 D 节泼冷水:既然控制有效,是不是越多越好?实证说不是——最佳 harness 随模型和任务变,最佳实践会过期、只有原则长存,于是课程收束于一句「harness 重要,但先搞懂它怎么工作」。
核心机制 / 数据
以下断言均回标讲义章节;数字无原文出处者不写。
-
Baby Anigans 的权力划分:LLM 只提请求,循环决定执行(A 节「What’s inside agent.py」「The loop, in agent.py」)。约 300 行 Python、无框架、两个工具
search与read_lines,LLM 由本地 Ollama 提供。Python 侧负责循环(调 LLM、跑工具、检查、继续或停)、工具分发和证据记录;检查规则包括「答前必须先搜」「要读命中行的相邻行」「引用必须指向已返回的行」。搜不到时:Python 给一次「换更短关键词再搜」的指令,两次空搜索后由 Python 强制停机并返回固定拒答——”I could not find supporting lines with the searches attempted. This does not prove the file has no answer.”(A 节「When the search finds nothing」)。同一 ReAct 循环,讲义点名 mini-swe-agent 与 Claude Code 用的也是它。 -
检查通过 ≠ 完整,且同症状可有异因(B 节「same symptom, different cause」)。两个被检查接受的答案都漏了例外:迟交罚则题漏了第 127 行的「20 次自动延期」,病因是第 127 行从未进入 LLM 视野(检索问题);实验课截止题漏的例外两次都到达了 LLM、是答案把它丢了(模型问题)。讲义的检查只验「搜过、读过相邻行、引用了返回行」,不验「答案是否包含例外」。
-
可观测性对照表与厂商封存(B 节「What can we inspect in a bigger harness?」对照表)。要点:
/context给的是清单而非确切请求(”an inventory is not the exact request; on disk is not in context”);最终报告「不过是又一条 LLM 消息」;子 Agent 只有它自己的 transcript 在盘上,父的摘要会遗漏。封存实例:Codex 的摘要从可读文本变成服务端才能读的encrypted_content;Claude 的推理被加密进签名、能看到的只是摘要(或默认什么都没有),compaction 摘要可读但带签名、改一个字 API 就拒绝。讲义的定性是:「不透明换来便利与易得性」(Opacity trades off convenience and accessibility)。被封住的东西有真实价值——讲义引 OpenAI 材料:GPT-5.6 Sol 在 ARC-AGI-3 公开集上用官方 harness 得 13.3%,换上「保留推理 + compaction」的 harness 得 38.3%(指标为 RHAE 相对人类行动效率,人类基线约 48%)(B 节「What’s been sealed can be valuable」配图)。 -
可控性三原则及其经典出处(C 节「Lasting principles organize the controls」总表)。管理上下文(短 AGENTS.md、skills 与 MCP schema 按需加载、大输入放文件、子 Agent 只回摘要、compaction 后仍存活的规则)← 存储层级(1965)与工作集(1968),原则是「在用的东西保持小而近」;强制拦截执行可检查规则(hooks 拦截、deny 规则全模式生效)← 引用监控器(1972),要求是「检查必须总是被调用且不可篡改」;限制权限与分离审批(权限、围栏化的 MCP、两把钥匙两个人)← 最小权限与权限分离(Saltzer & Schroeder, 1975)。
-
上下文管理的量化证据链(C 节各实践「Why」栏)。整页塞进 prompt:第 127 行在 5/5 次运行中仍被漏掉、且多数运行引错行(「The first lever」);文献结论是 100 行窗口优于整文件、准确率随输入增长而下降。启动前预加载:Baby Anigans 约 500 tokens、Pi 约 2k、Claude Code 约 27k,其中一部分是用户从没写过的(C 节「Much loads before we type」)。上下文文件让成本涨超 20% 而成功率不涨,Anthropic 砍掉自家系统提示的 80% 无测得损失(「AGENTS.md」节)。一个流行 skill 在 160 次运行中 153 次被读到、却让结果变差(「Skills」节)。Compaction 的模拟测试中,摘要漏掉约束时违规率从 0% 升到 87%(「Compaction」节)。警告不够用:警报正确的情况下,破坏仍在 9/16(56%)的会话中成功——所以要拦截不要提醒(「Hooks」节)。
-
权限的机制细节(C 节「Permissions」「Branch protection」)。规则是按命令文本匹配的:
Bash(git push *)拦不住git -C . push。致命三要素:私密数据 + 不可信内容 + 一条外泄通道,三者齐备 agent 就能被操纵泄密。分支保护的做法是分离权限的现实例:给 agent 一个只能开 PR、不能批准/合并/管理的账号;讲义举了 AISI 事件——agent 用假账号给自己的恶意 PR 背书,被真维护者拒掉。讲师还自曝:她本人通常关掉权限检查(yolo),只因别处另有防护——这是披露不是推荐。 -
需要多少 Harness:无通用最优,且效应可能主要在成本(D 节)。一条研究线把 harness 交给 LLM 自己管:MemGPT 自管内存层级搬运、ACE 自改 playbook、Meta-Harness 读历史运行并写 harness 代码。实证:5 个 LLM 中 4 个会随 benchmark 更换最佳 harness(「No one harness rules them all」);单个组件也会翻转——planning 对弱模型提准确率、对强模型提效率;预定义工具对弱模型是性能↑效率↓,强模型用 bash-only 反而性能效率双升(同节配图)。另一篇被引论文的冷静数据:在 SWE-bench Lite 上 harness 对成功率的平均效应只有 ±2%、Terminal-Bench 2.0 约 ±5%,但成本差很大——同一批模型上 Claude Code 约为 Pi 的 2.0 倍、Codex 的 1.6 倍成本(「Harness effects」配图)。Manus 自述框架重写过四次,每次都是因为发现了更好的上下文组织方式(「Harnesses change fast」,引 Manus 原话)。
增量(逐项对现有清单判)
- 对「Agent 可观测性」缺口(systemdesign 19 篇自评)——真新,且是最大增量。 清单里没有任何一份系统讲可观测性;本讲 B 节给齐了三层:检查的覆盖盲区(验格式不验完整)、五维检查对照表(输入/运行/子 Agent/变更/检查各自能看什么、看不到什么)、以及厂商封装这一变量(harness 正被「抽象化」进 API,推理与摘要逐项上锁)。这是把「debug 时看什么」从经验上升为清单。
- 对 Harness²(Google)——印证 + 校准(部分真新)。 Harness² 说「不改权重、只优化外围,基准 +11.8pp」,是增益派实证。本讲不反驳它,但补了它没有的另一面:同一效应在另一些基准上只有 ±2%/±5%、成本却翻倍,且 4/5 模型最佳 harness 不通用。合起来读,结论从「harness 增益大」修正为「harness 增益真实存在但高度依赖模型×任务,选型先行」。这一校准是真新。
- 对 Thin Orchestrator(Meta)——印证 + 溯源。 Meta 那篇讲确定性编排骨架与隔离子 Agent;本讲的 hooks 拦截、deny 规则、子 Agent 只回摘要与之同构,但多给了名字与年份:引用监控器(1972)。对他第 2 课(确定性编排/状态机)的验收口头答辩,这层谱系是直接弹药。机制层面无新东西,故不判真新。
- 对 AI 安全第 1 课(最小权限是根因、注入三分法)——印证 + 细节增量。 最小权限在本讲是三原则之一,出处与年份补齐(1975);「致命三要素」与他第 1 课的注入三分法同源同构(私密数据+不可信内容+外泄通道 ≈ 注入的成立条件),属印证。真新的只有操作细节:权限按文本匹配的绕过例、deny 优先与全模式生效、sandbox 覆盖范围要自查、AISI 自背书事件。这几条是他做 open-memex 安全定性时能直接引用的例子。
- 对 Anthropic 代码评审方法论、pstack 24 原则——方法印证、无内容增量。 两份都是「把经典工程智慧重编码给 agent」;本讲做的是同一件事的 CS 谱系版(1965–1975)。品味上互相印证,知识点不重叠也不新增他没见过的评审/工程原则。
- 对 RLM 等长上下文路线——顺带真新(讲义 D 节配图)。 清单 #2/#3/#5 谈记忆与状态,但没出现「把长 prompt 当外部环境、让 LLM 编程化地递归自呼」这一推理范式(RLM:GPT-5 上相对 compaction 中位 +26%、相对 CodeAct +130%)。只占一页配图,属顺带开眼,不构成收录理由本身。
- 与他已有结论的一处张力(明确指出):他给 thinktank 定的路线是「先可测量、再更对、最后更省」;本讲的成本数据(同模型换 harness 成本 2 倍、成功率效应却只有个位数)等于给「最后更省」提了优先级质疑——在多模型陪审团这种 token 大户上,harness 选型本身可能就是最大的成本杠杆。这不是原文与他的冲突,是小沐在增量里标出的值得他注意的一处。
证据不支持什么
- ARC-AGI-3 的 38.3% 不能读成「换 harness 通用增益近 3 倍」。 它是单一模型(GPT-5.6 Sol)、单一公开集、RHAE 这一相对效率指标、且数据出自 OpenAI 自家材料(讲义以截图引用)。讲义同一讲里还有 ±2%/±5% 的反向数据,两组数字并存才完整;只引前者就是讲义作者明确反对的读法。
- 推文两处与原文不符(按任务要求逐项核对后指出):① 推文说「调两个设置 ARC-AGI-3 分数翻倍」——原文是 13.3% → 38.3%,约 2.9 倍,「翻倍」是低估且丢了指标口径(RHAE、公开集);两个设置即 retained reasoning 与 compaction,这点推文没说清。② 推文说「子 Agent 汇报是父写的摘要有遗漏」——主体说反了:讲义说回传的是子 Agent 自己的 summary(”the subagent’s words”,且它对父「没有来自你的权威」),会遗漏的是父 Agent 的 summary。结论方向(摘要链会丢信息)没错,归属错位。
- 「检查全过」在本讲的两个案例里不构成任何质量证据之外的推论。 讲义的检查设计本身只验流程合规(搜过、读过、引过),作者用它恰恰说明合规检查与内容完整是两回事;不能据此推出「加更多检查就能完整」——那需要的是另一类检查(验例外覆盖),讲义没有给出这类检查的实现,只给了问题。
- 厂商封存的因果叙事要克制。 讲义展示了 Codex 摘要变加密、Claude 推理入签名的时间序列,并定性为「透明度换便利」;但「厂商是为护城河而封」这类动机推断讲义没下,截图本身也不支持——能下的结论只有「可观测面在缩小、且被封部分有实测价值」。
- Baby Anigans 的结论外推有限。 它是单文件、单问题、只读工具的教学样本;「两次空搜即拒答」「20 行窗口」等具体参数是教学设定,不是生产处方。讲义自己也用「同 harness 换 LLM、搜索与读窗都不同」提醒:样本结论对模型的依赖没有被消掉。
小沐的分析与判断
(本节是小沐的判断,不是原文内容。)
这份讲义在 Stone 的学习地图里应该放在 Harness² 与 Thin Orchestrator 之后、当「harness 单元」的收官件:前两份回答「harness 能带来什么」,这一份回答「harness 的边界与代价是什么、看不见时怎么办」。三份合起来,他的 harness 认知才从「会搭」走到「会选、会查、会算账」。
我最看重的一条是 B 节的封存叙事对他三个项目的直接映射:thinktank 走 OpenRouter、多模型可替换,本质上就是对「harness 被厂商封装」的对冲——编排与评审留在自己手里,模型只是可替换零件;讲义给了这个直觉一个课程级的背书。反过来,open-memex 的 compaction/摘要设计要直面讲义的两个数字:摘要漏约束时违规率 0%→87%,以及 Claude 的 compaction 摘要「可读但签名锁定」——前者提醒他的记忆压缩必须保「约束类内容优先不丢」,后者是一个现成的产品参照(摘要可审计、不可篡改)。
一处我不同意讲义重心的地方:它对「把 harness 交给 LLM 自管」(MemGPT/ACE/Meta-Harness)只给了一页、语气偏开放,但以他的项目阶段(先可测量)看,这条线现在不值得跟——自改 harness 在 eval 体系没建好之前等于把不可观测性又放大一层。讲义自己的 B 节其实就是反对理由,只是没把两节扣起来。
使用建议:不用整讲平均用力。B 节和 C 节总表细读,A 节代码走读对他这种已经在写 agent loop 的人可快读,D 节看结论与两组数据即可。读完正好接第 2 课验收里「可观测性/失效先坏在哪层」那部分——这讲就是那道题的参考答案之一。
术语台账
| 术语 | 一句白话 |
|---|---|
| harness | 模型之外的一切:循环、工具、上下文组织、检查、权限——决定「什么真正运行」的那层 |
| Baby Anigans | 本讲的教学 Agent:约 300 行 Python、两工具、本地 Ollama,答单文件问题且必须引行号 |
| ReAct loop | 推理与行动交错的循环:模型提工具调用、程序执行、结果回喂,直到停机条件 |
| abstention(拒答) | 证据不足时由程序强制返回的固定「查不到」答复,且声明这不证明文件里没有答案 |
| reference monitor(引用监控器,1972) | 每次访问都必须经过、且不可篡改的检查点;hooks/deny 规则的经典原型 |
| working set(工作集,1968) | 正在用的那一小撮信息应保持「小而近」;上下文管理的经典原型(与存储层级 1965 并列) |
| least privilege / separation of privilege(1975) | 最小权限 / 权限分离:只给干活必需的权,关键动作要两把钥匙(Saltzer & Schroeder) |
| compaction | 把对话历史替换成摘要以腾空间;摘要会丢约束,是本讲反复点名的风险点 |
| encrypted_content / sealed reasoning | 厂商把推理与摘要加密封存:Codex 的不透明加密项、Claude 的签名加密推理 |
| RHAE | Relative Human Action Efficiency,ARC-AGI-3 那个 13.3%→38.3% 用的相对人类效率指标 |
| lethal trifecta(致命三要素) | 私密数据 + 不可信内容 + 外泄通道,三者齐备 agent 即可被操纵泄密 |
| Meta-Harness / ACE / MemGPT | 「把 harness 交给 LLM 自管」研究线:自写 harness 代码 / 自改 playbook / 自管内存层级 |
细读指引
- 精读:B 节全部(两个错误答案的对照、五维可观测性表、Codex/Claude 封存两页)——这是清单独一份的内容,也是验收追问最可能展开的地方;C 节三原则总表 + 「The first lever」(整页塞 prompt 的 5/5 实验)——谱系和关键证据都在这里。
- 中读:A 节 agent.py 循环与两段对话实录(成功引用、空搜拒答)——他写过 thinktank 的 loop,读起来快,但「Python 强制拒答」这条停机设计值得停一下;C 节 Hooks、Permissions 两页的「Why」(56% 破坏率、文本匹配绕过例)。
- 可跳:MCP 基础介绍页(他的 MCP 功底已过这一层,只需记住「21 个工具 13.7k tokens、现在按需加载 schema」这个数);.claude 文件夹逐项介绍(他天天在用);D 节 prompt engineering 批评的 Reddit 截图两页(看标题即可)。
按长期要求:职业启示
(学习类材料长期要求;每条挂原文证据。)
- 面试能答到「出处层」:被问「你的 harness 设计依据是什么」,多数候选人答到「最佳实践」为止;能说出「拦截检查源于 1972 年引用监控器——必须总是调用且不可篡改,所以我用 hook 而不是 prompt 提醒」(C 节总表 + Hooks 节 56% 数据),是 architect 级的答法。
- 给企业客户做 AI 方案时多一个「可观测性尽职调查」动作:选厂商方案先问「推理与摘要是可读、可审计还是加密封存」(B 节 Codex/Claude 两例)——在 iPipeline 这类受监管行业集成场景,这就是合规评审桌上能直接用的提问清单,且有 ARC-AGI-3 的数据说明「被封的部分恰恰影响性能调优」。
- 成本话术升级:对客户和面试官谈 harness 选型时,能拿出「同模型换 harness,成功率效应可只有 ±2–5%,成本却可差 2 倍」(D 节引论文数据)——把 harness 从技术话题变成 TCO 话题,正是 Solutions Architect 区别于普通工程师的视角。
- 给自己的三个项目立一条选型纪律:harness 组件上线前先问「它编码了对模型的什么假设、模型升级后还成立吗」(D 节引 Anthropic《Building Effective Agents》原话:每个 harness 组件都编码了「模型自己做不到什么」的假设,假设会随模型变强而过期)——这条对 thinktank 的评审链和 opencode-fuse 的路由档位都是现成的复审触发器。
附:shao__meng 制作的 Lecture 5 总结海报已存档:mit-6s950-harness-lecture-poster.jpg(2400×2400 原图;出处帖 https://x.com/shao__meng/status/2112821429121204275 )