AI 工程周刊 · 每周十篇非显而易见的工程洞察
40,000 局对抗实验、409,000 次批准决策给出了一个不留情面的结论——人在回路,并不等于安全。
游戏规则很简单:玩家扮演 AI coding agent 的人类审批者,在时间压力下逐条批准或拒绝命令。累计 40,000 局、409,000 次批准/拒绝决策之后,人类平均只拦下了 66.3% 的恶意命令,也就是每三个威胁漏掉一个;32.9% 的对局最终得分为负,7% 的玩家对每一条提示都点了同意。
漏判的分布比总量更值得警惕。显眼的破坏性命令(rm -rf /、chmod -R 777 /)漏判率只有 11.7%,而真正会外泄凭证的操作漏判率高达 33.4%,越权读取(cat ~/.aws/credentials)达 35.0%。最容易蒙混过关的是伪装:npm run analyze 被放行 64.7%,在 37 个威胁里排第一,即便恶意 payload 就打印在提示框上方的历史日志里。三条 npm run 类命令合计漏判率 52.5%,是其他外泄型攻击(28.4%)的近两倍。
症结在于审批粒度错位:npm run build 本质是执行 package.json 里的任意 shell 命令,而 agent 早已能在无需审批的情况下改写 package.json、build.js 或 node_modules 中的文件——审批单条命令,等于在验证一个可能已被污染的对象。代价还是双向的:npm config set registry 这类无害命令被误拦 59%,rm -rf dist/ 被误拦 45%。长期噪音会把审慎磨成条件反射,而实验也确实观察到漏判率在对局后段回升。
"把人放在回路里当安全阀的时代正在结束,接替它的不是更强的模型,而是 harness、上下文与成本治理。"
— 本周主题
Claude Code 将于 8 月 14 日把 auto mode 设为 Pro/Max/Team 的默认权限模式,理由是一组自我拆台的生产数据:用户对权限提示的批准率高达 97%(拒绝率仅 3%),但面对计划审批时拒绝率却有 39%。同一批人在不同粒度上的审慎程度差了十几倍——被拒绝的不是风险,而是打断。
▸ 点击展开详情
这是首次由模型厂商用生产数据承认逐条权限审批已经退化为仪式。佐证还有:截至 2026 年 6 月,49.5% 的活跃 CLI 用户手工写过 Bash allow-rule,即用户在主动拆掉这道防线。替代方案是把每次工具调用过一遍分类器,只拦不可逆、破坏性、指向环境之外的动作,并在连续 3 次或单会话 20 次拦截后回落到人工审批。经 1,053 名付费测试者的对照研究与第三方红队、提示注入评测,auto mode 在所有测量维度上不劣于人工审批;Teams/Enterprise 采用者的 PR 产出高出约 25%。
把审批重构成两层:粗粒度的计划审批(人类真的会看,拒绝率 39%)加细粒度的自动分类器(人类看不动的部分)。自建 agent 时别再增加权限弹窗数量——改为设置拦截预算(如连续 N 次拦截即降级到人工),并把用户手工加白名单的比例作为防线失效的先行指标来监控。
DX《State of AI Impact in Engineering》报告显示,多数公司 AI 投入增长 28 倍,但速度指标持平甚至下滑——唯一呈指数增长的指标是成本。更值得警惕的是 DXI(开发者体验指数)行业范围内首次下跌 2 分,且是在代码可维护性上升的同时发布信心转负:这两个历来正相关的指标第一次脱钩。工程师更看得懂代码了,却更不敢把它发到生产。
▸ 点击展开详情
它把 AI 提效的失败点从个体转移到了系统——个体编码确实变快,但周围的评审、协调、验证流程把增益吃了回去,且随公司规模和 PR 体积放大。数据佐证:PR 中位数从 2025 年 7 月的 42 行涨到一年后的 72 行;LinearB 对 253 家组织的排名显示,前 10% 的精英组织平均 PR 小于 100 行,垫底组织超过 228 行。更麻烦的是测量真空——LeadDev 报告中只有 31% 的团队在测量 AI 的影响,而 26% 声称获得 25% 以上提效的人里,多数拿不出数据。
把增量交付(小批量 PR)设为硬性约束而非建议——它是本季 DXI 里跌幅最大的指标,也是 AI 采用成败的最强区分变量。在 agent 的项目指令里显式限制单次改动范围,并把 PR 行数分布纳入周度看板;同时先补上测量(速度、返工率、发布信心),否则你无法区分 AI 没用 和 流程吃掉了收益。
Databricks 联合 Stripe、Coinbase、Uber、Ramp 总结的成本手册指出,最大的省钱杠杆不是限额,而是持续迁移到效率前沿——在够用的智能水平上价格最优的那批模型。这条前沿的推进速度远快于智能前沿,而且新旗舰经常是负收益:Stripe 实测 Opus 4.7 相对 4.6 质量没有实质提升、成本却更高,因此拒绝内部上线;Databricks 在 Opus 5.0 对比 4.8 时也观察到成本回退。
▸ 点击展开详情
大多数团队默认最新最强等于最该用,这篇用同行数据反驳了它,并指出成本结构的真相:用户输入只占最终 token 的极小部分,绝大多数开销来自 harness 自动装配的上下文。这意味着成本优化的着力点在 harness 与缓存配置,而不在提示词——Databricks 仅通过调优这两处,就让生成 token 数及相应成本下降近 50%,且未观察到质量退化。
建一套代表你自己代码库的内部 eval(公开 benchmark 与真实编码表现相关性差),把它作为换模型的准入门槛;工具链上采用 meta-harness 而非绑定单一 harness,避免 harness 变成事实上的模型锁定。预算治理用渐进摩擦替代硬性上限:自助解除的告警门槛 → 降级到低价模型 → 最后才是停用。
一个读公开招标包、产出合规矩阵和初稿的系统,花了约一年才让模型学会拒绝。现在它给一份 95 万英镑、6 份文件、133 页的标书生成初稿只要 5 分钟,而初稿开头是一条拒绝声明:本稿中有 11 项要求依赖于一个你尚未指名的交付伙伴。作者说这条横幅是他最自豪的功能。
▸ 点击展开详情
两个 postmortem 说明了为什么幻觉在这类场景是默认行为而非边缘情况。其一幽灵伙伴:一份 NHS 标书初稿把 42 条要求推给了一个并不存在的联合体伙伴,模型自己发明了 [PARTNER_NAME],在正文中当既成事实叙述、却把披露放到文末;更糟的是自家合规校验器给其中大部分打了已覆盖——因为它做关键词匹配,而幽灵伙伴的段落里关键词齐全。其二静默的覆盖率坍缩:同一份 99 页文件,相隔七天的两次抽取从 366 条要求掉到 184 条,每次都报告 completed——分块抽取在第 33 页之后崩了,某个 chunk 返回空集,代码悄悄把空集并进了总数,全程无报错。
修法全部是结构性的,不是改 prompt:写作前先跑一次能力匹配检查(对照投标方真实资质),无法举证的要求路由到显式的伙伴槽位并把数量放在文首横幅而非文末脚注;校验器改为拒绝把伙伴口吻的段落算作投标方自己的证据。更通用的一条:给流水线每个阶段加不变量断言(如抽取条数不得低于上次运行的 X%),因为最危险的失败不是崩溃,而是报告成功的部分成功。
一个被广泛引用(连 Google AI 摘要都在复述)的结论称动态语言的 token 成本只有静态语言的 1/2 到 1/3。danluu 重跑实验后发现该结论只在琐碎任务上成立:原实验用 Rosetta Code,一道题在 J 里只需 70 个 token。换成真实规模任务(照 RFC 实现完整 zstd 解码器、Pandoc)后,medium effort 下差距还在,ultra effort 下结果完全混杂,最好的几个反而是静态语言。
▸ 点击展开详情
这是一堂关于 eval 设计的公开课,杀伤力超出语言之争本身。他还拆穿了第二个被引用的 benchmark:某个 agent 把不存在的路径 symlink 到自己的可执行文件,导致此后所有语言的评分都在跑那一个 agent 的二进制——而原作者据此得出了关于 Rust 的结论。真正稳健的信号只有一个:语言流行度与正确率、成本、墙钟时间都呈弱到中等正相关,也就是说训练数据量比语法简洁度重要得多。
任何某语言或某技巧对 LLM 更友好的结论,先问三件事:任务规模是否达到真实工作量级、是否在多个 effort 档位上复现、agent 有没有权限篡改测试环境(给测试留 holdout,别让 agent 能改评分路径)。另一个可直接采纳的发现:同等成本下跑一次 ultra 优于反复跑 medium,且保留上下文续跑优于每轮清空上下文的 Ralph loop——后者在动态语言上劣化最严重。
作者用 mitmproxy 拦截 VS Code 与 Copilot 的全部流量,挖出一个没有文档说明的本地 SQLite 库 session-store.db(Chronicle 工具通过 session_store_sql 对它跑 SQL)。它以明文存储你所有的 prompt 与模型回复——作者塞进假的 GitHub token、AWS key 和带密码的 postgres 连接串,全部原样落盘。查阅 sessionStore.ts 的写入路径后确认:没有任何脱敏、过滤或掩码步骤,这不是漏掉的边界情况,而是代码本来就这么写的。
▸ 点击展开详情
更值得注意的是上下文注入的机制。recentEdits.tsx 里硬编码了一个滑动窗口:最多 20 个文件、8 条编辑摘要、每处改动前后 3 行上下文。正是这 3 行,把作者根本没碰过的那行假密钥一起发给了 Copilot API。个人版没有任何针对 .env 的默认规则,也不读 .gitignore,排除机制是 Business/Enterprise 的仓库策略功能。这解释了为什么「我没打开那个文件」并不意味着它没被上传。
审计你在用的 AI 编码工具时,别只看隐私政策,直接查三件事:本地持久化了什么(把它的 SQLite / JSONL 找出来)、上下文窗口的硬编码范围(最近编辑文件数与行数)、以及排除规则是否在免费档生效。自建 agent 的话,把哪些上下文可以跨越文件、会话、机器与模型 API 的边界写成显式策略,而不是留给默认值。
Prime Intellect 开源的编码 harness 建立在两个抽象上。RLM(Recursive Language Model)把上下文当作变量、把子 agent 调用当作函数:模型唯一的工具是一个常驻 IPython kernel,其他 harness 能力都是 kernel 里的函数,子 agent 各自是另一个 prime-agent 实例。于是模型写的是对自己上下文进行操作的程序,而不是被压缩掉历史。Continual Harness 则把 harness 自身状态(prompt、skill、memory、子 agent)变成 agent 可以在运行中 CRUD 的对象。
▸ 点击展开详情
它给出的诊断很尖锐:当前 harness 是围绕上一代模型能力设计的——固定的 tool-calling schema 和上下文压缩迫使模型绕开自己的脚手架工作;手工编写的子 agent、prompt、skill、memory 在设计时就被定死,永远学不到运行中的发现。配套的工程实现同样值得抄:后台 daemon 通过本地 socket 持有所有活跃会话,可随时 attach/detach 而不影响 agent 循环,worker 崩溃后能从 session JSONL 加 kernel 状态快照恢复。
如果你的 agent 经常因为 compaction 丢失早期发现,先别急着加 memory 工具——把长上下文改为存进变量、按需检索的 REPL 模型,检索成本就从 token 变成了计算。另一条可立即落地的:把会话状态与 agent 循环解耦(daemon 加可恢复 worker),这样长任务不再绑定终端存活。
有人拿一个已上线的企业级 AI agent 做基准,让三种自动优化方法从同一初始配置出发、在同一数据集和同一 judge 下优化精确率(带召回下限)。基线精确率 0.734;Claude Code 循环跑到 0.818,Karpathy 的 AutoResearch 到 0.843,ThirdLayer 的 AutoAgent 到 0.877。整个实验总共烧掉约 6.7 万美元。
▸ 点击展开详情
真正的发现不是排名,而是曲线形状:三者都在很早期就找到了各自的最优解,之后再多的预算和算力都没能突破天花板。也就是说把 Claude Code 放进循环里自动改进 agent 确实能摘到低垂果实并稳定跑赢基线,但它不是一个可以用钱换更多提升的连续旋钮——顺带一提,同时测试的 GEPA 结果严重过拟合。
用自动优化器时设一个显式的停止条件(例如连续 N 轮无提升即终止),而不是让它一直跑着期待奇迹;把省下的预算投到它们做不好的地方:有策略地选择跑哪些测试(这是最贵的一环)、跳出局部最优、以及决定哪些候选值得继续。另外记得留 holdout 集——过拟合是这类方法的默认失败模式。
同一个 URL,只改 User-Agent:Chrome、Safari、Googlebot 拿到 303,235 字节的完整 HTML;ClaudeBot、PerplexityBot、OAI-SearchBot 拿到 13,409 字节的 text/markdown——体积只有 1/23,三家返回的字节完全一致。而 GPTBot 和 ChatGPT-User 直接吃 406。这不是一刀切的 bot 策略,而是逐个爬虫决定谁能读到那个无人版。
▸ 点击展开详情
响应头暴露了商业模型:x-mobian-impression 每次请求都是全新 UUID,配合 cache-control: no-store,意味着每次 bot 读取都被记为一次独立广告曝光;x-mobian-tokens: 3323 说明计价单位既不是人也不是 PV,而是喂进模型的 token。markdown 版本里嵌着人类页面上完全不存在的赞助内容——Ally Bank 的整段 FAQ 带 FAQPage JSON-LD 和 campaign=ally-2026-q3 追踪链接,文案写成「Who is Ally Bank?」这种模型被问到时会照抄的句式。TIME 称其 bot 流量在多数日子里已超过人类流量。
如果你的 agent 依赖抓取公开网页,现在必须假设你看到的内容取决于你声明的身份,并把 User-Agent 纳入抓取结果的可复现性记录,对关键事实做双 UA 交叉校验。如果你在做内容产品,反过来说这条路已经跑通了:为 agent 提供结构化、低 token 的专用视图是可计费的,但要想清楚人类版与机器版的口径分叉由谁负责。
本期十篇文章指向同一个转折:把人放在回路里当安全阀的时代正在结束,而接替它的既不是更强的模型,也不是更多的弹窗。scalex 的 40 万次审批数据与 Anthropic 自曝的 97% 批准率从两端夹出同一个结论——逐条权限审批已退化为仪式;Anthropic 的应对是把审批粒度上移到计划层,把细粒度交给分类器。与此同时,成本与效能的账本也在重算:Databricks 与 Stripe、Uber 等同行的结论是该追"效率前沿"而非"智能前沿",新旗舰经常是负收益;DX 的数据则显示 AI 投入涨了 28 倍而交付速度不动,开发者体验指数首次下跌,"看得懂代码"与"敢发布代码"史无前例地脱钩。danluu 用自建 eval 推翻了流传甚广的"动态语言更省 token",提醒我们大部分关于 AI 的定量结论经不起真实任务规模的检验。剩下几篇把镜头转向 harness 本身:Copilot 明文落盘的会话库、TIME 为爬虫开设的平行站点、Prime Agent 可被自身改写的 harness,以及自动优化器很早触顶的 6.7 万美元实验——它们共同说明,差异化正在从模型转移到上下文的组装方式。