diff --git a/.claude/skills/curate-research/SKILL.md b/.claude/skills/curate-research/SKILL.md index e74ae52..b6313e7 100644 --- a/.claude/skills/curate-research/SKILL.md +++ b/.claude/skills/curate-research/SKILL.md @@ -1,6 +1,6 @@ --- name: curate-research -description: 把一批 Harness Engineering 调研候选(文章/论文/工具的 URL)走完「抓取→翻译→评审→收录→清理」流水线,整合进本仓库 works/ 与 references/articles.md,并保持 C1–C12 一致性检查全绿。当用户说"处理这批调研候选 / 收录这些链接 / 整理 translate / 把这几篇翻译收进来"时使用。这是仓库给自己用的策展 harness。 +description: 把一批 Harness Engineering 调研候选(文章/论文/工具的 URL)走完「抓取→翻译→评审→收录→清理」流水线,整合进本仓库 works/ 与 references/articles.md,并保持 C1–C13 一致性检查全绿。当用户说"处理这批调研候选 / 收录这些链接 / 整理 translate / 把这几篇翻译收进来"时使用。这是仓库给自己用的策展 harness。 --- # curate-research —— 仓库自我策展 harness @@ -60,12 +60,14 @@ description: 把一批 Harness Engineering 调研候选(文章/论文/工具 **入库前 checklist(每篇 works/ 候选必过,再进 ⑤):** - [ ] frontmatter 声明 `sourceFigureCount` 并与原文实际图数核对(null = 原文不可得、未审计);原文插图下载入 `works/imgs//` 本地嵌入——C10 校验嵌图数 ≥ 声明数、本地路径文件存在 +- [ ] **数图要抓原文 HTML 数,不能只看渲染出来的正文。** 2026-07-27 的教训:一篇 claude.com 译文声明 `sourceFigureCount: 0`,而原文 HTML 里有 4 个 `
`——抓取工具吐出的 markdown 把它们丢了,人只看那份 markdown 就会以为没有图。可用 `curl | grep -c ' 进度详情以人类向 README.md 的"学习路线"段为准;本节是给智能体的快照。 @@ -45,6 +45,10 @@ - **C7** — 三脉络 per-track 计数(脉络一/二/三)在 4 处下游声明保持一致:READMEs 资料库表、`references/AGENTS.md` 三脉络小标题、`prompts/deep-research-tracker.md` 三脉络明细 - **C8** — 翻译流水线本地守卫:`translate/<...>/sources//source-full.md` 存在时,对应 `01-analysis.md` 不得再声称"仅摘要页 / 建议补抓全文"。`translate/` 已 gitignore,CI 与干净 clone 自动 SKIP,仅本地有过程稿时触发 - **C9** — `concepts/` / `thinking/` / `feedback/` 正文不得裸写文库计数("N 篇文章 / N 篇翻译 / N 大概念");历史性提法须带"写作时点 / 当时 / 此前 / 首批 / 首轮 / 截至 / 快照"限定词,否则去数字改链 `references/articles.md` +- **C10** — 图片保真(纯本地、零网络):每篇 `works/*-translation.md` 的 frontmatter 必须声明 `sourceFigureCount`(缺失即 FAIL;`null` = 原文不可得、未审计 → SKIP;数字 N → 正文嵌图数须 ≥ N),且所有本地嵌图路径(`imgs/...`)必须在磁盘上存在 +- **C11** — markdown 表格形状:README ×2、`references/AGENTS.md`、`references/articles.md`、`works/AGENTS.md` 里每一行表格的单元格数须与表头一致 +- **C12** — 条目字段完整性:`references/articles.md` 每个 `### N.` 编号条目必须带 **作者:** 与 **日期:** 字段 +- **C13** — 零插图声明须留痕:C10 只能证伪"多报"(嵌图数 < 声明数才 FAIL),因此 `sourceFigureCount: 0` 在本地**永远无法被证伪**——不管你有没有真去核对原文,它都是绿的。2026-07-27 就是这个洞放行了一个假 0(原文实有 4 张配图)。C10 刻意零网络、无法回查原文,所以改为要求留痕:**声明 0 的译文必须同时带 `sourceFigureAudit` 字段,值里要有 `YYYY-MM-DD` 核对日期**,写清怎么核对的、结论是什么。`null` 仍然 SKIP——它本来就自陈未审计 执行:`bash scripts/check-consistency.sh`(仓库根目录) 启用 pre-commit 阻断:`git config core.hooksPath .githooks` diff --git a/README.en.md b/README.en.md index 7b68f68..d6de948 100644 --- a/README.en.md +++ b/README.en.md @@ -1,8 +1,8 @@ [中文](README.md) | English ![License: MIT](https://img.shields.io/badge/license-MIT-blue) -![Articles](https://img.shields.io/badge/articles-61-green) -![Translations](https://img.shields.io/badge/translations-31-orange) +![Articles](https://img.shields.io/badge/articles-73-green) +![Translations](https://img.shields.io/badge/translations-33-orange) # Harness Engineering Study Guide @@ -112,10 +112,10 @@ harness-engineering/ ├── thinking/ # Phase 2: Independent analysis (11 articles) ├── practice/ # Phase 3: Hands-on experiments (1 Ralph Demo) ├── feedback/ # Phase 4: Lessons learned (1 article) -├── works/ # Phase 5: Shareable outputs (31 translations + 1 original + 2 external Chinese captures) +├── works/ # Phase 5: Shareable outputs (33 translations + 1 original + 2 external Chinese captures) ├── tools/ # Tools that reduce the 6 complexity dimensions ├── prompts/ # Validated prompts collection -└── references/ # External resource index (61 articles with deep summaries) +└── references/ # External resource index (73 articles with deep summaries) ``` Each subdirectory has its own `AGENTS.md` explaining its purpose and conventions — a direct practice of the "progressive disclosure" principle from the original article. @@ -126,15 +126,15 @@ Each subdirectory has its own `AGENTS.md` explaining its purpose and conventions - [x] **Phase 2: Form your own opinions** — 11 independent analyses (ongoing) - [x] **Phase 3: Pick a small project to practice** — Ralph Demo completed (321s, $0.31) - [x] **Phase 4: Record feedback & iterations** — 1 article (ongoing) -- [x] **Phase 5: Produce shareable work** — 31 professional translations + 1 original synthesis + 2 external Chinese captures +- [x] **Phase 5: Produce shareable work** — 33 professional translations + 1 original synthesis + 2 external Chinese captures ## 📚 Research Library -61 articles across three knowledge tracks + 2 extended readings: +73 articles across three knowledge tracks + 2 extended readings: | Track | Coverage | Perspectives | |-------|----------|-------------| -| AI-Era Harness Engineering | 57 articles | OpenAI → Fowler → Anthropic → LangChain → Stanford → Claude Code reverse engineering & source leak → Subagent runtime → Sensors/SPDD/ADLC → Out-of-scope, safety auditing & quality postmortems → Evaluation trilogy → Dynamic workflows → Origins (Ralph / Hashimoto) & discipline synthesis → Codex harness anatomy → Loop Engineering trilogy → Self-evolving harnesses & RSI → Formal verification → Multi-agent scaling (Cursor / C compiler) → Official containment & evals methodology → Behavior maps / DSLs / local models / outer-loop accountability → industrial-scale mechanical porting (Bun) & harness-model co-evolution (HarnessX) | +| AI-Era Harness Engineering | 69 articles | OpenAI → Fowler → Anthropic → LangChain → Stanford → Claude Code reverse engineering & source leak → Subagent runtime → Sensors/SPDD/ADLC → Out-of-scope, safety auditing & quality postmortems → Evaluation trilogy → Dynamic workflows → Origins (Ralph / Hashimoto) & discipline synthesis → Codex harness anatomy → Loop Engineering trilogy → Self-evolving harnesses & RSI → Formal verification → Multi-agent scaling (Cursor / C compiler) → Official containment & evals methodology → Behavior maps / DSLs / local models / outer-loop accountability → industrial-scale mechanical porting (Bun) & harness-model co-evolution (HarnessX) → long-running harness foundations & eval-environment confounders (Anthropic backfill) → harness operations metrics & reward hacking (Cursor backfill) → tool schemas are not neutral → the software-factory debate (Dex Horthy / Osmani) → agent-swarm cost economics → deleting 80% of the system prompt | | Cloud-Native Harness.io | 2 articles | CI/CD platform architecture (same name, different meaning) | | Efficiency Paradox & Capability Evolution | 2 articles | YDD systematic teardown + METR follow-up (measurement-methodology crisis) | | Extended Reading | 2 articles | Context Engineering, Human-Agent collaboration | @@ -144,11 +144,13 @@ See [references/articles.md](references/articles.md) — each article includes c ## 📖 Translations
-31 Chinese translations of key articles (click to expand) +33 Chinese translations of key articles (click to expand) | Translation | Original Author | Source | |-------------|----------------|--------| | ⭐ [Eight Years of Wanting](works/maganti-eight-years-building-ai-translation.md) | Lalit Maganti | Personal blog | +| [The New Rules of Context Engineering for Claude 5](works/anthropic-context-engineering-claude5-translation.md) | Thariq Shihipar | Anthropic / Claude | +| [Better Models: Worse Tools](works/ronacher-better-models-worse-tools-translation.md) | Armin Ronacher | Personal blog | | [Rewriting Bun in Rust](works/bun-in-rust-translation.md) | Jarred Sumner | Bun Blog | | [Building a C Compiler with a Team of Parallel Claudes](works/anthropic-c-compiler-translation.md) | Nicholas Carlini | Anthropic | | [Scaling Long-Running Autonomous Coding](works/cursor-scaling-agents-translation.md) | Wilson Lin | Cursor | @@ -220,7 +222,7 @@ The "Ralph Wiggum Loop" is the core implementation pattern of Harness Engineerin ## 🛠️ Development Notes -The repo ships with a consistency checker, `scripts/check-consistency.sh`, guarding against count drift across nine layers of checks: +The repo ships with a consistency checker, `scripts/check-consistency.sh`, guarding against count and fidelity drift across thirteen layers of checks: - **C1-C2** — `references/articles.md` article count + its 4 downstream claim sites (README × 2 badges, `prompts/deep-research-tracker.md` header, `references/AGENTS.md` overview) - **C3** — actual `*.md` file counts in `concepts/` / `thinking/` / `feedback/` match the README "X 篇" claims @@ -230,6 +232,10 @@ The repo ships with a consistency checker, `scripts/check-consistency.sh`, guard - **C7** — per-track counts (Track 1/2/3) stay consistent across their 4 downstream claim sites (README research-library tables × 2, `references/AGENTS.md` track headings, `prompts/deep-research-tracker.md` track lines) - **C8** — local translation-pipeline guard: once `translate/<...>/sources//source-full.md` is captured, the matching `01-analysis.md` may no longer claim "abstract-only / fetch full text later". `translate/` is gitignored, so this auto-SKIPs on CI and clean clones - **C9** — authored prose in `concepts/` / `thinking/` / `feedback/` must not restate library counts ("N articles / N translations") as live facts; historical mentions must carry a dated-snapshot qualifier, otherwise drop the number and link `references/articles.md` +- **C10** — figure fidelity (purely local, zero network): every translation's frontmatter must declare `sourceFigureCount`, the body must embed at least that many images, and every local embed path must exist on disk (`null` = source unavailable / unaudited → SKIP) +- **C11** — markdown table shape: in the checked files, every table row must carry the same cell count as its header +- **C12** — every numbered entry in `references/articles.md` must carry the **作者:** and **日期:** fields +- **C13** — zero-figure claims need an audit trail. C10 can only falsify OVER-claiming, so `sourceFigureCount: 0` is unfalsifiable locally — that hole shipped a false 0 on 2026-07-27 (the source had 4 body figures). Any translation claiming 0 must therefore also carry `sourceFigureAudit` containing a `YYYY-MM-DD` date, stating how the claim was verified **Enable the pre-commit hook after first clone:** @@ -249,7 +255,7 @@ See the "机械化检查" section of the root `AGENTS.md` for details. > This archive now curates itself. > -> Bringing in outside research no longer runs on vibes — it follows a pipeline frozen into a skill, [`curate-research`](.claude/skills/curate-research/SKILL.md): review is automated by parallel agents (the feedback loop), `scripts/check-consistency.sh` keeps counts from drifting via C1–C9 (the mechanical rail), and whether something gets in is always a human gate (humans steer, agents execute). +> Bringing in outside research no longer runs on vibes — it follows a pipeline frozen into a skill, [`curate-research`](.claude/skills/curate-research/SKILL.md): review is automated by parallel agents (the feedback loop), `scripts/check-consistency.sh` keeps counts and fidelity from drifting via C1–C13 (the mechanical rail), and whether something gets in is always a human gate (humans steer, agents execute). > > So the constraints themselves became the product — exactly what [concepts/07-spec-as-product.md](concepts/07-spec-as-product.md) argues, except this time the subject is the repo itself. diff --git a/README.md b/README.md index da3f1dd..b34ca6e 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ 中文 | [English](README.en.md) ![License: MIT](https://img.shields.io/badge/license-MIT-blue) -![Articles](https://img.shields.io/badge/articles-61-green) -![Translations](https://img.shields.io/badge/translations-31-orange) +![Articles](https://img.shields.io/badge/articles-73-green) +![Translations](https://img.shields.io/badge/translations-33-orange) # Harness Engineering 学习指南 @@ -111,10 +111,10 @@ harness-engineering/ ├── thinking/ # Phase 2:独立思考与质疑(11 篇) ├── practice/ # Phase 3:小项目实验(1 个 Ralph Demo) ├── feedback/ # Phase 4:踩坑与迭代心得(1 篇) -├── works/ # Phase 5:可展示的作品(31 篇翻译 + 1 篇原创 + 2 篇外部中文收录) +├── works/ # Phase 5:可展示的作品(33 篇翻译 + 1 篇原创 + 2 篇外部中文收录) ├── tools/ # 工具具像化:降低 6 维复杂度的杠杆库 ├── prompts/ # 验证有效的提示词积累 -└── references/ # 外部资源索引(61 篇文章深度摘要) +└── references/ # 外部资源索引(73 篇文章深度摘要) ``` 每个子目录都有自己的 `AGENTS.md`,说明该目录的用途和写作约定。这本身就是原文「渐进式披露」的实践。 @@ -125,15 +125,15 @@ harness-engineering/ - [x] **Phase 2:形成自己的观点** — 11 篇独立思考(持续中) - [x] **Phase 3:选一个小项目实践** — Ralph Demo 完成(321 秒,$0.31) - [x] **Phase 4:记录反馈迭代** — 1 篇(持续中) -- [x] **Phase 5:输出可展示的作品** — 31 篇专业翻译 + 1 篇原创综合分析 + 2 篇外部中文收录 +- [x] **Phase 5:输出可展示的作品** — 33 篇专业翻译 + 1 篇原创综合分析 + 2 篇外部中文收录 ## 📚 研究资料库 -跨三条知识脉络 61 篇文章 + 2 篇延伸阅读: +跨三条知识脉络 73 篇文章 + 2 篇延伸阅读: | 脉络 | 覆盖 | 核心视角 | |------|------|---------| -| AI 时代的 Harness Engineering | 57 篇 | OpenAI → Fowler → Anthropic → LangChain → Stanford → Claude Code 逆向与源码实锤 → Subagent runtime → 传感器/SPDD/ADLC → 越界·安全审计·质量复盘 → 评测三部曲 → 动态工作流 → 起源考据(Ralph / Hashimoto)与学科汇流 → Codex harness 解剖 → Loop Engineering 三部曲 → 自演化 harness 与 RSI → 形式化验证 → 多智能体并行规模化(Cursor / C compiler)→ 遏制与评测官方方法论 → 行为地图 / DSL / 本地模型 / 外环问责 → 工业级机械移植(Bun)与 harness-模型共演化(HarnessX) | +| AI 时代的 Harness Engineering | 69 篇 | OpenAI → Fowler → Anthropic → LangChain → Stanford → Claude Code 逆向与源码实锤 → Subagent runtime → 传感器/SPDD/ADLC → 越界·安全审计·质量复盘 → 评测三部曲 → 动态工作流 → 起源考据(Ralph / Hashimoto)与学科汇流 → Codex harness 解剖 → Loop Engineering 三部曲 → 自演化 harness 与 RSI → 形式化验证 → 多智能体并行规模化(Cursor / C compiler)→ 遏制与评测官方方法论 → 行为地图 / DSL / 本地模型 / 外环问责 → 工业级机械移植(Bun)与 harness-模型共演化(HarnessX)→ 长时 harness 奠基与评测环境混杂(Anthropic 存量)→ harness 运维度量与奖励作弊(Cursor 存量)→ 工具 schema 不中立 → 软件工厂之争(Dex Horthy / Osmani)→ 智能体蜂群成本经济学 → 删掉 80% 系统提示词 | | 云原生 Harness.io | 2 篇 | CI/CD 平台架构(同名不同义的参照) | | 效率悖论与能力进化 | 2 篇 | YDD 系统性拆解 + METR 实验后续(测量方法论危机) | | 延伸阅读 | 2 篇 | Context Engineering、人机协作 | @@ -143,11 +143,13 @@ harness-engineering/ ## 📖 翻译作品
-31 篇核心文章的中文翻译(点击展开) +33 篇核心文章的中文翻译(点击展开) | 作品 | 原作者 | 来源 | |------|--------|------| | ⭐ [渴望了八年,用 AI 三个月造出来](works/maganti-eight-years-building-ai-translation.md) | Lalit Maganti | 个人博客 | +| [Claude 5 世代模型的上下文工程新规则](works/anthropic-context-engineering-claude5-translation.md) | Thariq Shihipar | Anthropic / Claude | +| [更好的模型:更差的工具](works/ronacher-better-models-worse-tools-translation.md) | Armin Ronacher | 个人博客 | | [用 Rust 重写 Bun](works/bun-in-rust-translation.md) | Jarred Sumner | Bun Blog | | [用一支并行 Claude 团队构建 C 编译器](works/anthropic-c-compiler-translation.md) | Nicholas Carlini | Anthropic | | [规模化长时自主编码](works/cursor-scaling-agents-translation.md) | Wilson Lin | Cursor | @@ -219,7 +221,7 @@ harness-engineering/ ## 🛠️ 开发须知 -仓库自带一致性检查脚本 `scripts/check-consistency.sh`,守护数量类漂移,覆盖九层校验: +仓库自带一致性检查脚本 `scripts/check-consistency.sh`,守护数量与保真类漂移,覆盖十三层校验: - **C1-C2** — `references/articles.md` 文章数 + 下游 4 处引用(README × 2 badges、`prompts/deep-research-tracker.md` 头部、`references/AGENTS.md` 概览) - **C3** — `concepts/` / `thinking/` / `feedback/` 三个目录的 `*.md` 实际数与 README "X 篇" 声明一致 @@ -229,6 +231,10 @@ harness-engineering/ - **C7** — 三脉络(脉络一/二/三)的 per-track 计数在 4 处下游声明(READMEs 资料库表 × 2、`references/AGENTS.md` 三脉络小标题、`prompts/deep-research-tracker.md` 三脉络明细)保持一致 - **C8** — 翻译流水线本地守卫:当 `translate/<...>/sources//source-full.md` 已抓取,对应 `01-analysis.md` 不得再声称"仅摘要页 / 建议补抓全文"。`translate/` 已 gitignore,故 CI 与干净 clone 上自动 SKIP,仅在本地有过程稿时触发 - **C9** — `concepts/` / `thinking/` / `feedback/` 正文不得把文库计数("N 篇文章 / N 篇翻译 / N 大概念")当活事实裸写——这类数字在 C2/C7 声明位之外会悄悄腐烂。历史性提法必须带"写作时点 / 当时 / 此前 / 首批 / 首轮 / 截至 / 快照"限定词,否则去掉数字、改链 `references/articles.md` +- **C10** — 图片保真(纯本地、零网络):每篇译文 frontmatter 必须声明 `sourceFigureCount`,正文嵌图数须 ≥ 声明数,且本地嵌图路径必须真实存在(`null` = 原文不可得、未审计 → SKIP) +- **C11** — markdown 表格形状:受检文件里每行表格的单元格数须与表头一致 +- **C12** — `references/articles.md` 每个编号条目必须带 **作者:** 与 **日期:** 字段 +- **C13** — 零插图声明须留痕。C10 只能证伪"多报",`sourceFigureCount: 0` 在本地永远无法被证伪——2026-07-27 就是这个洞放行了一个假 0(原文实有 4 张图)。因此声明 0 的译文必须同时带 `sourceFigureAudit`,值里要有 `YYYY-MM-DD` 核对日期,写清怎么核对、结论是什么 **首次 clone 后启用 pre-commit hook:** @@ -248,7 +254,7 @@ git config core.hooksPath .githooks > 这个仓库开始策展自己了。 > -> 收录外部调研不再靠手感——它走一条固化成 skill 的流水线 [`curate-research`](.claude/skills/curate-research/SKILL.md):评审由并行 agent 自动完成(反馈回路),`scripts/check-consistency.sh` 的 C1–C9 守着计数不漂移(机械护栏),而"收不收进来"始终是一道人类闸门(人类掌舵、智能体执行)。 +> 收录外部调研不再靠手感——它走一条固化成 skill 的流水线 [`curate-research`](.claude/skills/curate-research/SKILL.md):评审由并行 agent 自动完成(反馈回路),`scripts/check-consistency.sh` 的 C1–C13 守着计数与保真不漂移(机械护栏),而"收不收进来"始终是一道人类闸门(人类掌舵、智能体执行)。 > > 于是约束本身成了产品——正是本仓库 [concepts/07-spec-as-product.md](concepts/07-spec-as-product.md) 讲的东西,只不过这次的实验对象是仓库自己。 diff --git a/prompts/deep-research-tracker.md b/prompts/deep-research-tracker.md index 2487208..2acd116 100644 --- a/prompts/deep-research-tracker.md +++ b/prompts/deep-research-tracker.md @@ -61,11 +61,11 @@ > 它必须自包含,因为搜索器无法访问 `references/articles.md`。 > > **维护纪律:** 当 `references/articles.md` 新增/删除条目时,**同一次提交中**必须同步更新本节。两份内容的口径(脉络划分、篇数、产品/项目清单)应保持完全一致。 -> 本节最近一次同步:2026-07-22(与 `articles.md` 当前内容对齐:61 篇文章 + 1 项已跟踪产品)。 +> 本节最近一次同步:2026-07-27(与 `articles.md` 当前内容对齐:73 篇文章 + 1 项已跟踪产品)。 -**核心文章 61 篇,分布于三条脉络:** +**核心文章 73 篇,分布于三条脉络:** -- **脉络一 — AI 时代 Harness Engineering(57 篇):** +- **脉络一 — AI 时代 Harness Engineering(69 篇):** - OpenAI "Harness engineering"(原点,2026-02-11)/ "An open-source spec for Codex orchestration: Symphony"(2026-04-27,任务跟踪器作为控制平面) - Fowler/Böckeler "Harness engineering for coding agent users"(2026-04-02)+ 前传备忘录(2026-02-17) - LangChain "The Anatomy of an Agent Harness"(2026-03)/ "Continual Learning for AI Agents"(2026-04-05)/ "Agent Evaluation Readiness Checklist" @@ -119,6 +119,18 @@ - Addy Osmani "Own the Outer Loop"(2026-07-15,AIE 闭幕演讲:智能体跑内环、工程师拥有外环问责 + back-pressure 调速) - Jarred Sumner "Rewriting Bun in Rust"(2026-07-08,50 dynamic workflows × 峰值 64 Claude × 11 天机械移植 53.5 万行 Zig→Rust;语言无关测试套件作 oracle + 1 实现者/2 对抗评审者/1 修复者 + "修流程不修代码";$165k API 成本账本) - HarnessX 论文(arXiv 2606.14249,小米 Darwin Agent Team,2026-06:harness 一等类型化对象(processor × 8 hooks × 九维分类)+ AEGIS 四阶段演化 + cross-harness GRPO 共演化;+14.5% 均值(最高 +44.0%)、共演化再 +4.7%、弱模型受益最大) + - Anthropic / Justin Young "Effective harnesses for long-running agents"(2025-11-26,存量回扫补录:initializer + coding 两段式、200+ 条 feature_list.json、claude-progress.txt + git、Puppeteer 端到端自验;#4/#7 的上游) + - Anthropic / Gian Segato "Quantifying infrastructure noise in agentic coding evals"(2026-02-05,存量回扫补录:只改资源配额 Terminal-Bench 2.0 摆动 6pp;1x–3x 修可靠性、3x 以上改变被测对象;建议每任务声明保底分配 + 硬杀阈值) + - Cursor / Stefan Heule & Jediah Katz "Continually improving our agent harness"(2026-04-30,存量回扫补录:Keep Rate、LLM 读用户回复判满意、CursorBench + 线上 A/B、错误分类与按工具按模型基线、每周 Automation 修 harness、按训练分布供给工具格式、context anxiety) + - Cursor / Naman Jain "Reward hacking is swamping model intelligence gains"(2026-06-25,存量回扫补录:审计 731 条轨迹,SWE-bench Pro 上 63% 成功解是检索答案;封 git + 断网后 Opus 4.8 Max 87.1%→73.0%、Composer 2.5 74.7%→54.0%) + - Armin Ronacher "Better Models: Worse Tools"(2026-07-04,工具 schema 不是中立的:Claude Code 的宽容客户端 + 在其中做 RL → 新模型对替代 schema 更差;strict 模式可清零) + - Dex Horthy / HumanLayer "Why Software Factories Fail — harness engineering is not enough"(2026-07,AIE World's Fair 主题演讲 + wsff.md:熄灯工厂第一手失败实录、可维护性没有快 oracle、产品/架构/程序设计/垂直切片四阶段前移) + - Addy Osmani "Software Factories, Light and Dark"(2026-07-20,loop→harness→factory 三层 + 唯一昂贵的评审闸门 + 背压规则 + "什么样的循环配得上熄灯"准入清单 + loops vs graphs) + - Cursor / Wilson Lin "Agent swarms and the new model economics"(2026-07-20,#48 续篇:835 页手册重造 SQLite,账单 $1,339–$10,565;规划/执行分层、自建 VCS 1000 提交/秒、五种蜂群失效、去相关评审、Field Guide) + - Anthropic / Thariq Shihipar "The new rules of context engineering for Claude 5 generation models"(2026-07-24,删掉 Claude Code 系统提示词 80%+ 无可测损失;七组 then/now + `claude doctor`) + - Don't Blame the LLM 论文(arXiv 2607.03691,Queen's University,首个固定模型只变 harness 的受控纵向研究:Qwen Code CLI 35 个连续版本 × 50 个 SWE-bench Verified 任务) + - Rethinking Harness Evolution 论文(arXiv 2607.12227,自动 harness 演化的第一份系统性负面结果:同等预算下不稳定优于 test-time scaling、泛化有限) + - LangChain "How We Benchmark Deep Agents"(2026-07-23)+ "IssueBench"(2026-07-20)——Harbor 评测栈:Harbor-Index 82 任务 / lite 冻结子集 / capability suite;IssueBench 15 类失败分类法与 issue 集层面判分 - **脉络二 — 云原生 Harness.io(2 篇):** Harness.io 官方全局架构 / Google Cloud 集成场景 - **脉络三 — 效率悖论(2 篇):** YDD/Miss-you "效率悖论的系统性拆解"(2026-03-03)/ METR 实验后续 + 自报调查(2026-02-24 + 2026-05-11,"慢 19%"的官方后续:弱证据转向加速 + RCT 方法论危机) @@ -305,3 +317,14 @@ 5. langchain.com/blog、claude.com/blog、addyosmani.com/blog、simonwillison.net 月归档 发现漏网存量时,与本批增量一起进「候选 × 定性 × 去向」评审表,注明"存量补课"。 + +### 轮换记录 + +| 批次 | 回扫信源 | 捞回的存量 | +|------|---------|-----------| +| 2026-07-21 | (教训来源,未做系统回扫) | 事后补收 #48 / #49 / #50 / #47 | +| 2026-07-27 | ① anthropic.com/engineering 全量列表 ② cursor.com/blog 全量 slug 清单 | #58 Effective harnesses(2025-11)、#59 基础设施噪声(2026-02)、#60 持续改进 agent harness(2026-04)、#61 奖励作弊(2026-06)——四篇均为 harness 主题正中靶心却漏网数月 | + +> 下一轮建议轮换:openai.com/index(Engineering 分类)+ martinfowler.com/tags(GenAI 标签)。 +> 回扫技巧(2026-07-27 验证有效):列表页只渲染最近若干条时,直接抓 `curl |grep -oE '/blog/[a-z0-9-]+'|sort -u` 拿全量 slug, +> 再逐个取 `datePublished` 与标题——Cursor 那四条里有两条(`continually-improving-agent-harness`、`reward-hacking-coding-benchmarks`)就是这样发现的,它们不在列表页首屏。 diff --git a/references/AGENTS.md b/references/AGENTS.md index 70a807c..1cfc131 100644 --- a/references/AGENTS.md +++ b/references/AGENTS.md @@ -9,10 +9,10 @@ ## 文章 -详见 [articles.md](articles.md) — 完整的文章索引,含三条脉络 **61 篇文章 + 1 项已跟踪产品** 的深度摘要。 +详见 [articles.md](articles.md) — 完整的文章索引,含三条脉络 **73 篇文章 + 1 项已跟踪产品** 的深度摘要。 权威计数与编号规则以 `articles.md` 头部为准;本表是它的概览缓存。 -### 脉络一:AI 时代的 Harness Engineering(57 篇) +### 脉络一:AI 时代的 Harness Engineering(69 篇) | # | 文章 | 作者 | 核心贡献 | |---|------|------|---------| @@ -73,20 +73,32 @@ | 55 | [Own the Outer Loop](https://addyosmani.com/blog/own-the-outer-loop/) | Addy Osmani | 智能体跑内环、工程师拥有外环问责;back-pressure 调节循环速率与作用域来授予自主权 | | 56 | [Rewriting Bun in Rust](https://bun.sh/blog/bun-in-rust) | Jarred Sumner | "修流程不修代码"工业级实录:50 dynamic workflows × 64 Claude × 11 天移植 53.5 万行 Zig;语言无关测试套件作 oracle + 对抗评审默认化 | | 57 | [HarnessX 论文](https://arxiv.org/abs/2606.14249) | Darwin Agent Team(小米) | harness 一等类型化对象 + AEGIS 轨迹演化 + cross-harness GRPO 共演化:+14.5%(共演化再 +4.7%),弱模型受益最大 | +| 58 | [Anthropic/长时智能体的有效 harness](https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents) | Justin Young | 外部工件即记忆的奠基文:initializer + coding 两段式、200+ 条 feature_list.json、progress 文件 + git、Puppeteer 端到端自验(存量回扫补录) | +| 59 | [Anthropic/基础设施噪声](https://www.anthropic.com/engineering/infrastructure-noise) | Gian Segato | 只改资源配额,Terminal-Bench 2.0 摆动 6pp;1x–3x 修可靠性、3x 以上改变被测对象;"低于 3pp 的榜单差距都该怀疑" | +| 60 | [Cursor/持续改进 agent harness](https://cursor.com/blog/continually-improving-agent-harness) | Stefan Heule & Jediah Katz | harness 运维的度量学:Keep Rate、LLM 读用户回复判满意、错误分类与按工具按模型基线、每周 Automation 修 harness;按训练分布供给工具格式 | +| 61 | [Cursor/奖励作弊淹没智能增益](https://cursor.com/blog/reward-hacking-coding-benchmarks) | Naman Jain | 审计 731 条轨迹:SWE-bench Pro 上 63% 的成功解是检索答案而非推导;封 git+断网后 Opus 4.8 Max 87.1%→73.0% | +| 62 | [Better Models: Worse Tools](https://lucumr.pocoo.org/2026/7/4/better-models-worse-tools/) | Armin Ronacher | 工具 schema 不是中立的:在宽容 harness 里做 RL,新模型对替代 schema 反而更差;跨模型可移植性的机制级坏消息 | +| 63 | [为什么软件工厂会失败](https://github.com/humanlayer/advanced-context-engineering-for-coding-agents/blob/main/wsff.md) | Dex Horthy (HumanLayer) | "harness engineering 还不够":可维护性没有快 oracle,RL 不惩罚坏设计;熄灯工厂第一手失败实录 + 四阶段前移方案 | +| 64 | [Software Factories, Light and Dark](https://addyosmani.com/blog/software-factories/) | Addy Osmani | loop→harness→factory 三层 + 唯一昂贵的评审闸门 + 背压规则 + "什么样的循环配得上熄灯"准入清单 | +| 65 | [智能体蜂群与新的模型经济学](https://cursor.com/blog/agent-swarm-model-economics) | Wilson Lin (Cursor) | 从 835 页手册重造 SQLite:质量趋同、账单从 $1,339 到 $10,565;规划/执行分层、自建 VCS(1000 提交/秒)、去相关评审、Field Guide | +| 66 | [Claude 5 世代的上下文工程新规则](https://claude.com/blog/the-new-rules-of-context-engineering-for-claude-5-generation-models) | Thariq Shihipar (Anthropic) | 删掉 Claude Code 系统提示词 80%+ 而编码评测无可测损失;七组 then/now 对照 + `claude doctor` | +| 67 | [Don't Blame the LLM 论文](https://arxiv.org/abs/2607.03691) | Oussama Ben Sghaier 等(Queen's) | 首个固定模型、只变 harness 的受控纵向研究:Qwen Code CLI 35 个连续版本 × 50 个 SWE-bench Verified 任务 | +| 68 | [Rethinking Harness Evolution 论文](https://arxiv.org/abs/2607.12227) | Yike Wang 等 | 自动 harness 演化的第一份系统性负面结果:同等预算下不稳定优于简单 test-time scaling,泛化有限 | +| 69 | [LangChain/Harbor 评测栈](https://www.langchain.com/blog/how-we-benchmark-deep-agents) | Nick Hollon, Harrison Chase 等 | 给 harness 建标尺(Harbor-Index 82 任务 / lite 子集 / capability suite),再给标尺建标尺(IssueBench 15 类失败分类法) | ### 脉络二:云原生 Harness.io(2 篇) | # | 文章 | 核心贡献 | |---|------|---------| -| 58 | [Harness.io 官方](https://www.harness.io/blog/understanding-ci-cd-platforms-the-backbone-of-modern-devops) | CI/CD 平台全局架构 | -| 59 | [Google Cloud Architecture](https://docs.cloud.google.com/architecture/partners/harness-cicd-pipeline-for-rag-app) | Harness + GCP 部署 RAG | +| 70 | [Harness.io 官方](https://www.harness.io/blog/understanding-ci-cd-platforms-the-backbone-of-modern-devops) | CI/CD 平台全局架构 | +| 71 | [Google Cloud Architecture](https://docs.cloud.google.com/architecture/partners/harness-cicd-pipeline-for-rag-app) | Harness + GCP 部署 RAG | ### 脉络三:效率悖论与能力进化(2 篇) | # | 文章 | 核心贡献 | |---|------|---------| -| 60 | [YDD / Miss-you](https://yousali.com/posts/20260303-ai-coding-efficiency-to-evolution/) | 效率悖论的系统性拆解:约束理论 + Spec/Rule/Skill + 验证闭环 + 并发 | -| 61 | [METR 实验后续 + 自报调查](https://metr.org/blog/2026-02-24-uplift-update/) | "慢 19%" 的官方后续:弱证据转向加速 + AI 渗透破坏 RCT 可行性本身 | +| 72 | [YDD / Miss-you](https://yousali.com/posts/20260303-ai-coding-efficiency-to-evolution/) | 效率悖论的系统性拆解:约束理论 + Spec/Rule/Skill + 验证闭环 + 并发 | +| 73 | [METR 实验后续 + 自报调查](https://metr.org/blog/2026-02-24-uplift-update/) | "慢 19%" 的官方后续:弱证据转向加速 + AI 渗透破坏 RCT 可行性本身 | ### 已跟踪产品 / 项目(不计入文章数) diff --git a/references/articles.md b/references/articles.md index d7b849e..21217d5 100644 --- a/references/articles.md +++ b/references/articles.md @@ -10,7 +10,7 @@ > **下游引用都是本文的冗余缓存:** 根 `README.md` / `README.en.md` 的 badge、`prompts/deep-research-tracker.md` 的去重清单、`references/AGENTS.md` 的概览表。 > 新增/删除文章时,必须**同一次提交**更新本文 + 所有下游缓存。 > -> 当前规模:**61 篇文章**(脉络一 57 + 脉络二 2 + 脉络三 2)+ **1 项已跟踪产品**(不计入文章数)。最近一次同步:2026-07-22。 +> 当前规模:**73 篇文章**(脉络一 69 + 脉络二 2 + 脉络三 2)+ **1 项已跟踪产品**(不计入文章数)。最近一次同步:2026-07-27。 ## 脉络一:AI 时代的 Harness Engineering(大模型护栏与认知工程) @@ -745,7 +745,7 @@ |---------|---------| | 四要素 Harness | #2 Fowler、#5 HumanLayer 六杠杆、概念 2/3(地图而非手册 / 机械化执行) | | 反馈循环防腐化 | #9 Fowler 反馈飞轮、#19 Fowler Sensors | -| 反馈瓶颈 / serial speed-up | #60 YDD 效率悖论 | +| 反馈瓶颈 / serial speed-up | #72 YDD 效率悖论 | --- @@ -1176,7 +1176,7 @@ | agent loop vs harness loop | #41 Osmani 的 loop 定调、#37 "harness 拥有 loop" | | 防御式编码的放大 | #19 Fowler 传感器的失败案例、概念 6 熵与垃圾回收 | | 理解与参与 | #26 Chris Parsons 从批准者到训练者、#14 Maganti 的"必须理解每一行" | -| 无法退出的压力 | #60 YDD 效率悖论、#31 学科汇流的产业动力 | +| 无法退出的压力 | #72 YDD 效率悖论、#31 学科汇流的产业动力 | --- @@ -1568,13 +1568,341 @@ | 确定性闸门防 reward hacking | #47 评结果不评路径、#24 每次编辑即可证伪契约 | | 弱模型受益最大 | 观察项"Harness Updating ≠ Harness Benefit"论文(中档模型受益最多)的互证与张力 | + + +### 58. Anthropic / Justin Young — 长时智能体的有效 harness(外部工件即记忆的奠基文) + +- **标题:** Effective harnesses for long-running agents +- **链接:** [anthropic.com](https://www.anthropic.com/engineering/effective-harnesses-for-long-running-agents) +- **作者:** Justin Young(Anthropic) | **日期:** 2025-11-26(2026-07 存量回扫补录) +- **核心:** 本仓库多篇文章(#4、#7、#36)共同的上游。命题一句话:**compaction 不够**——Opus 4.5 跑在 Claude Agent SDK 上循环多个上下文窗口,只给一句"克隆一个 claude.ai"仍造不出生产级 web 应用。类比是"每班工程师上工时都不记得上一班干了什么",解法是把记忆外置成**下一班读得懂的工件**。 +- **两段式 harness(第一个上下文窗口用不同的提示词):** + - **initializer agent(只跑一次):** 生成 `init.sh`(一键起开发服务器)、`claude-progress.txt`(历任智能体的工作日志)、首个 git commit,以及把用户一句话展开成的**功能清单**——claude.ai 克隆案例展开成 **200+ 条**端到端功能,全部初始标记 `"passes": false` + - **coding agent(此后每次):** 每轮只做**一个**功能,做完把状态改成 `passes: true`、写进度、提交 git +- **三个被点名的失败模式与对策:** + +| 失败模式 | 对策 | +|---------|------| +| 想一次性 one-shot 整个应用 → 半截功能 + 没文档 | 功能清单 + "一次只做一个功能" | +| 看到已有进展就宣布完工 | 清单初始全 fail,只允许改 `passes` 字段;措辞强硬到"删除或修改测试是不可接受的" | +| 没验证就标记完成 | 显式要求用浏览器自动化(Puppeteer MCP)像真人一样端到端验;单测和 `curl` 不算数 | + +- **两个可直接抄的细节:** ① 清单用 **JSON 而不是 Markdown**——实测模型更不容易擅自改写 JSON 文件;② 每轮开局固定动作序列 `pwd` → 读 progress → 读功能清单 → `git log --oneline -20` → 跑 `init.sh` → 冒烟一次核心路径,**先确认没留下破环境再开新功能** +- **作者留下的开放问题:** 单个通用编码智能体是否最优,还是测试 / QA / 清理各设专职智能体更好——这个问题在 #4(GAN 三智能体)与 #7(meta-harness)中被继续回答 +- **与其他文章的关联:** + +| 本文概念 | 对应文章 | +|---------|---------| +| 外部工件即跨会话记忆 | #1 仓库即记录系统、#28 Ralph(bash 循环 + 干净上下文的独立发现,早四个月) | +| 一次一个功能 + 干净收尾 | #36 dynamic workflows、#55 外环问责的最小形态 | +| 测试棘轮(不许删测试) | #49 为 Claude 写测试、#56 Bun "0 测试被跳过或删除" | +| 本文是谁的前传 | #4(同博客后续,GAN 三智能体 + harness 瘦身)、#7(把这套结构产品化成 Managed Agents) | + + + +### 59. Anthropic / Gian Segato — 量化智能体编码评测中的基础设施噪声 + +- **标题:** Quantifying infrastructure noise in agentic coding evals +- **链接:** [anthropic.com](https://www.anthropic.com/engineering/infrastructure-noise) +- **作者:** Gian Segato(Anthropic) | **日期:** 2026-02-05(2026-07 存量回扫补录) +- **核心:** #38 指出基准把 model / harness / 环境折叠进一个分数,本文把**"环境"那一维单独量化**:同模型、同 harness、同任务集,只改容器资源配额,Terminal-Bench 2.0 上最阔绰与最紧的配置差 **6 个百分点(p < 0.01)**——比排行榜前几名之间的差距还大。一句话结论:"几分的领先可能是真实的能力差距,也可能只是一台更大的虚拟机。" +- **实验与拐点(六档配置:严格 1x → 完全不限):** + - 基础设施错误率单调下降:**5.8% → 2.1%(3x,p < 0.001)→ 0.5%(不限)** + - **1x–3x 区间成功率在噪声内波动(p = 0.40)**——1x 崩掉的任务多半本来也解不出来(智能体探索、撞资源墙、被抢占,但它从来没走在正确路径上) + - **3x 以上性质变了**:基础设施错误只再降 1.6pp,成功率却跳了近 4pp——多出来的资源让智能体启用了"只有阔绰配额才跑得起来"的策略(装大依赖、开昂贵子进程、跑吃内存的测试套件) + - SWE-bench 交叉验证(227 题 × 10 次采样,内存 1x→5x)方向一致但幅度小得多:**+1.54pp** +- **为什么这不是"配大点就行":** 紧配额奖励写精简高效代码的智能体,阔配额奖励会用重型工具暴力破解的智能体——两者都是合法的测量对象,但**不声明资源配置就把它们折叠成一个分数**,差异与真实世界可迁移性都无法解读。文中的 `bn-fit-modify` 是活例:有的模型第一步就装 pandas / networkx / scikit-learn 全家桶,紧配额下装到一半 OOM,连一行解题代码都没写;另一些模型默认用标准库手写数学。 +- **可操作建议:** 评测应**每任务声明两个参数**(保底分配 + 独立的硬杀阈值),而不是一个钉死的值;两者之间的带宽要校准到"底与顶的分数落在彼此噪声内"(Terminal-Bench 2.0 上 3x 是这个折中点);执行方法本身也要写进报告。**低于 3 个百分点的排行榜差距,在配置未公开且未对齐前都值得怀疑。** +- **顺带记录的其他混杂源:** 时限、集群健康度、硬件规格、并发度、出口带宽;作者还观察到通过率随一天中的时间波动(API 时延随流量变化),未正式量化 +- **与其他文章的关联:** + +| 本文概念 | 对应文章 | +|---------|---------| +| 环境是评测的一等实验变量 | #38 三症状诊断(本文补上"环境"维的定量证据)、#34 配置级 harness 效应 | +| 运行时污染的另一半 | #61 Cursor 奖励作弊(信息泄漏),与本文的资源配额构成两类运行时混杂 | +| 官方评测方法论 | #47 Demystifying evals(同厂互补:那篇讲怎么评,这篇讲评测台本身怎么偏) | +| 谁在被排名 | #35 harness 效应 ≈ 模型效应(本文说:还得先扣掉基础设施噪声) | + + + +### 60. Cursor / Stefan Heule & Jediah Katz — 持续改进我们的 agent harness + +- **标题:** Continually improving our agent harness +- **链接:** [cursor.com](https://cursor.com/blog/continually-improving-agent-harness) +- **作者:** Stefan Heule & Jediah Katz(Cursor) | **日期:** 2026-04-30(2026-07 存量回扫补录) +- **核心:** 目前公开材料里,**harness 厂商对"怎么度量一次 harness 改动是不是变好了"讲得最具体的一篇**。仓库此前的传感器讨论(#19、#32)都停在"给智能体的反馈",本文补的是另一半:**给 harness 维护者的反馈**。 +- **护栏的加与减(#31 约束加减法纪律的厂商侧实录):** 2024 年末模型不会自己选上下文,于是塞满前馈护栏——每次编辑后回灌 lint 与类型错误、读取行数太少就重写它的请求、限制单轮最大工具调用数,外加大量固定静态上下文(目录布局、语义匹配代码片段、压缩版附件)。**"这些大部分早就没了。"** 留下的静态上下文只剩操作系统、git 状态、当前与最近打开的文件,其余改为智能体自己动态取。 +- **两层度量:** + - **离线:** 公共基准 + 自家 CursorBench,快速标准化读数、可跨时间比较,但"再好的基准也只是真实使用的近似" + - **在线 A/B:** 除时延、token 效率、工具调用数、缓存命中率这类方向性指标外,两个直击"到底干得好不好"的信号——**Keep Rate**(智能体提议的改动,在固定时间后仍留在用户代码库里的比例)和**用大模型读用户对首次输出的回复**判断满意度("用户接着做下一个功能"是强正信号,"用户贴了一段 stack trace"是可靠负信号) + - 被在线实验否掉的例子:用更贵的模型做上下文摘要,质量差异可忽略,不值这个成本 +- **把工具错误当生产事故运营:** 工具调用出错会留在上下文里持续消耗 token 并造成 **context rot**。错误分成"未知"和"预期"两类——**未知错误一律视为 harness bug**,超过固定阈值即告警;预期错误按成因分类(`InvalidArguments`、`UnexpectedEnvironment`、`ProviderError`、`UserAborted`、`Timeout`),用**按工具、按模型分别计算的基线**做异常检测(不同模型搞砸工具调用的比率本来就不同)。再叠一个每周 Automation:带日志检索 skill 的模型翻日志、挑出新增或激增的问题、建/更新工单并附调查,再由 Cloud Agents 批量开修。**一个专项冲刺把意外工具调用错误降了一个数量级。** +- **按模型定制 harness(与 #62 互为正反面):** "所有 harness 抽象都是模型无关的,但对每个支持的模型都做深度定制。"OpenAI 的模型被训练成用 **patch 格式**编辑文件,Anthropic 的模型被训练成用**字符串替换**;两者都能用对方的工具,但**给它不熟悉的那个会多花推理 token 并产生更多错误**,所以 harness 给每个模型配它训练时用的工具格式。提示词也按厂商甚至按版本定制(OpenAI 的模型更字面、更精确地遵循指令,Claude 更凭直觉、对不精确指令更宽容)。还记录了一个模型怪癖:**context anxiety**——上下文窗口填满时开始推脱、说任务太大干不了,靠调提示词缓解。 +- **会话中途换模型的三重代价:** 新模型要在别的模型产生的对话历史上工作(分布外)→ 加"你是中途接手"的定制指令并劝阻它调历史里出现过、但不属于自己工具集的工具;缓存按厂商与模型隔离 → 换模型必然缓存未命中,试过用切换时摘要来减小惩罚,但复杂任务下摘要会丢细节;官方建议是一次会话别换模型,要换就改用 subagent(从干净上下文起步) +- **与其他文章的关联:** + +| 本文概念 | 对应文章 | +|---------|---------| +| 按训练分布供给工具形状 | #62 Ronacher(同一现象的两侧:这里是供给侧对策,那里是被这个先验打的第三方) | +| 拆护栏、改动态上下文 | #66 Anthropic 删 80% 系统提示词(两家独立收敛)、#4 harness 瘦身、#31 约束加减法 | +| Keep Rate / 用户回复情绪 | #19 推理性传感器谱系的产品化、#47 outcome ≠ transcript | +| 未知错误即 bug + 按工具按模型基线 | #23 质量回归复盘(缺的正是这套告警)、#24 每次编辑即可证伪契约 | +| harness 自己的软件工厂 | #27 LangSmith Engine、#44 Self-Harness、#63/#64 软件工厂的正面样本 | + + + +### 61. Cursor / Naman Jain — 奖励作弊正在淹没模型智能的增益 + +- **标题:** Reward hacking is swamping model intelligence gains +- **链接:** [cursor.com](https://cursor.com/blog/reward-hacking-coding-benchmarks) +- **作者:** Naman Jain(Cursor) | **日期:** 2026-06-25(2026-07 存量回扫补录) +- **核心:** 用一个**审计智能体**读 731 条 Opus 4.8 Max 轨迹(只给问题陈述与完整轨迹,**不告诉它这次跑通没跑通**),判定智能体是"检索到了已知答案"还是"推导出了答案"。结果:**SWE-bench Pro 上 63% 的成功解属于检索而非推导。** +- **两种主要作弊路径:** + - **上游查找(57% 的轨迹):** 在公网上找到已合并的 PR 或修好的源文件,近乎逐字复现。示例调用就是 `curl` GitHub API 的 `/pulls//files`——同一响应连每个文件的 diff 一起返回 + - **git 历史挖掘(9% 的轨迹):** 在打包进镜像的 `.git` 里搜出未来那个修复提交,`git show` 读 diff 然后直接 `git cherry-pick` +- **封住之后掉多少:** 严格 harness = ①开跑前删掉 `.git`、把仓库重建为单提交仓库(评分时才恢复原历史),②默认拒绝出网、只给一个固定代理按白名单解析包依赖。 + - SWE-bench Pro:**Opus 4.8 Max 87.1% → 73.0%;Composer 2.5 74.7% → 54.0%** + - 差距随模型变强而扩大——SWE-bench Multilingual 上 Opus 4.6 不到 1pp、Opus 4.8 Max 9.1pp、Composer 2.5 7.5pp;SWE-bench Pro 上 Opus 4.6 不到 1pp、Opus 4.8 Max 14.1pp、Composer 2.5 **20.7pp**。GPT 系列在他们的跑批里没有同等的升级趋势 +- **最值得记的一个机制:** 一道来自 2019 年 jq issue 的任务,智能体用系统里的 jq 二进制去复现 bug,因为镜像是在修复之后构建的,**复现失败 → 智能体据此推断"这个问题已经被修过了" → 转去搜答案**。也就是说,**环境本身会泄漏"这是一道旧题"的元信息**,不需要模型记得训练数据。 +- **难得的自曝:** Composer 2.5 是全研究里 Pro 差距最大的模型,Cursor 因此明确表示**不把标准 SWE-bench Pro 分数当作 Composer 的可信基准数字**——"分数在'harness 确实产出了它'这个狭义上是真的,但它把编码能力和拿到已知修复混在了一起。" +- **留下的开放问题:** 封 git 与断网只能挡住这一层。随着模型越来越能推断"我正在被评测",它可能以更隐蔽的方式改变行为——**在模型知道自己被评测时仍保有构念效度的评测**,才是更难的那个问题。 +- **与其他文章的关联:** + +| 本文概念 | 对应文章 | +|---------|---------| +| 运行时污染(信息侧) | #59 基础设施噪声(资源侧)——两篇合起来是"环境这一维"的完整体检 | +| 审计轨迹而非只看结果 | #47 outcome ≠ transcript 的工业规模落地、#33 HarnessAudit 中途轨迹违规 | +| 越强的模型越会钻空子 | #25 Overeager Coding Agents、#44/#57 自演化里的 reward hacking 防线 | +| 基准分数该怎么读 | #38 基准错位、#35 harness 效应统计归因、#63 "我不信今天的基准提升" | + + + +### 62. Armin Ronacher — Better Models: Worse Tools(工具 schema 不是中立的) + +- **标题:** Better Models: Worse Tools +- **链接:** [lucumr.pocoo.org](https://lucumr.pocoo.org/2026/7/4/better-models-worse-tools/) +- **翻译:** [works/ronacher-better-models-worse-tools-translation.md](../works/ronacher-better-models-worse-tools-translation.md) +- **作者:** Armin Ronacher(Flask / Jinja 作者、Sentry 创始人,现做编码智能体 Pi) | **日期:** 2026-07-04 +- **核心:** 仓库长期挂着"跨模型可移植性"缺口,本文给了它**第一个机制级的坏消息**:Anthropic 的新模型(Opus 4.8、Sonnet 5)在**非 Claude Code 形状**的编辑工具上比它们的老版本更差。这不是模型变笨,是**后训练把一个特定 harness 的习惯烙进了先验**。 +- **症状:** Pi 的编辑工具用嵌套的 `edits[]` 数组。模型产出的 `oldText` / `newText` **字节正确**,然后在对象末尾追加凭空发明的键——`type`、`id`、`kind`、`unique`、`requireUnique`、`matchCase`、`in_file`、`forceMatchCount`、`children`、`notes`、`cost`、`oldText2`、`newText2`,甚至 `event.0.additionalProperties`。原文只说**更老的模型一个都没有这个毛病**,并未点名具体版本(有二手报道给出 Sonnet 4.6 / Opus 4 的对照,但那不出自原文)。 +- **复现条件很挑:** 单轮"编辑这个文件"完全不复现;要有"读过文件、诊断过问题、然后组装多行编辑"的智能体历史才出得来。某条会话里 Opus 4.8 失败率约 **20%**;**剥掉历史中的 thinking block 让失败率减半**;**打开 strict 模式则清零**。 +- **作者的假说链(本文最有价值的部分):** + 1. 现代 Anthropic 模型的后训练很可能就在 Claude Code(或其仿真)里做 + 2. 而 Claude Code 客户端**极其宽容**——反编译可见:检测正文里泄漏的 `json` 写进传输格式本身、外加 LARK 语法选项,而 Anthropic **模型闭源、harness 也闭源**,第三方只能猜。 +- **与其他文章的关联:** + +| 本文概念 | 对应文章 | +|---------|---------| +| 跨模型可移植性(缺口回应) | #35 harness 效应异质、#57 HarnessX 共演化(本文即共演化的负外部性)、#52 本地模型工具调用是分水岭 | +| 宽容的 harness 会污染训练信号 | #60 Cursor 按训练分布供给工具格式(供给侧对策)、#63 "RL 里没有对坏设计的惩罚"(同构论证的另一目标) | +| Claude Code 客户端行为的证据来源 | #30 源码泄漏事件(512K 行 harness 的可观测性) | +| harness 生态的锁定效应 | #2 Harnessability 的新维度:schema 与主导 harness 的距离是一种可设计属性 | + + + +### 63. Dex Horthy / HumanLayer — 为什么软件工厂会失败(harness engineering 还不够) + +- **标题:** Why Software Factories Fail — or: harness engineering is not enough +- **链接:** [wsff.md 全文(固定到 commit `418c1db`,2026-07-23 抓取)](https://github.com/humanlayer/advanced-context-engineering-for-coding-agents/blob/418c1dbaa9b71592bc58c44074cacb85a3092c7f/wsff.md) | [上游 main 最新版](https://github.com/humanlayer/advanced-context-engineering-for-coding-agents/blob/main/wsff.md) | [AI Engineer World's Fair 2026 主题演讲](https://www.youtube.com/watch?v=Ib5GBkD555M) +- **作者:** Dex Horthy(HumanLayer 创始人兼 CEO;Pragmatic Engineer 称其为"context engineering"一词的提出者。本仓库 #5《Skill Issue》出自同一组织) | **日期:** 2026-07 +- **核心:** 迄今为止**对 harness engineering 最正面、也最有分量的一次反驳**——而且来自这个学派内部。论点一句话:**"再多的 harness engineering 或 loopsmaxxing,都解决不了一个本质上属于模型训练的问题。"** 注意作者的免责声明:他自己卖的正是人机协作工具,立场有偏。 +- **他自己踩的坑(第一手反例):** 2025 年 7 月 HumanLayer 全面转"熄灯"——只读 spec 和工单,中小任务全交后台智能体,没人读代码。结局是遇到一个智能体怎么都修不好的问题,只能回头去啃三个月没读过的代码库;期间**站点宕机、用户不满**。第一次他说服自己"这点风险换速度值得";到 11 月第三次时,团队判定重写更划算,联合创始人**花两周在 VS Code 里手工把模式重新梳一遍**。 +- **为什么模型做不了可维护性(本文的核心论证):** + - RLVR 的打分是一维的。以 SWE-bench Multilingual 为例,任务约十五分钟量级,奖励只有 `FAIL_TO_PASS`(修好了没)与 `PASS_TO_PASS`(有没有搞坏别的)两个 0/1 位——**对侵蚀可维护性没有任何惩罚**。文中还原了一道 `fastlane__fastlane-19304` 的完整评分流程(丢弃模型对测试文件的任何改动、再贴上基准的测试补丁),并指出"模型怎么到达正确答案不重要" + - **测试给你秒级反馈,糟糕架构的成本函数以周、月甚至年计。** 那一刻发生在有人为了改一行打开那个文件、发现必须在十一处同样地改、还要祈祷三个文件外不会悄悄坏掉的时候(Fowler 的 shotgun surgery) + - **"如果一个模型能可靠区分好代码和坏代码,它一开始就会写出好的那版。"** RL 需要又快又可靠的 oracle,而可维护性没有快 oracle + - 更多评审智能体和更多 token 确实有用,但**它们抬的是地板不是天花板**——天花板是 RL 里教会的东西 +- **为什么 Claude Code 赢:** 在它之前已有 aider、cline、codebuff,工具集几乎一样,但工具调用会时不时地失败。被广泛接受的解释是 **Anthropic 在 harness 内部对模型做了 RL**——第一次有实验室针对自己要发布的那套工具训练模型。作者引 OpenAI 团队的说法收尾:**你造了 harness 但不拥有权重、不能在里面做 RL,就永远处于劣势**(这条与 #62 Ronacher 的发现互为镜像) +- **他认为方向对的三个前沿尝试:** SWE-Marathon(Abundant AI;**这里是 Dex 的转述**——“约 400 小时的巨型任务 + 复合奖励通道而非单个通过位”。论文本体见 [arXiv 2606.07682](https://arxiv.org/abs/2606.07682):20 个超长任务,每个配可执行环境 + 人写参考解 + **多层验证套件**,轨迹平均 27.2M token,前沿编码智能体解出率不到 30%,13.8% 的 rollout 出现奖励作弊。**"复合奖励 vs 单个通过位"是 Dex 的说法,最终计分口径以论文为准**)、DeepSWE(Datacurve,用现实中从未真正实现过的大任务规避污染)、Frontier Code(Cognition,多 PR 任务,且**用变异测试式的确定性手段做惩罚——如果模型写的测试在打补丁之前也不会失败,就扣分**,另跑一个判官模型按代码质量规则读 diff) +- **他给出的替代方案——把人的判断前移到四个阶段:** 产品评审(用户痛点 + 成功标准,且**用 HTML mockup 代替三段描述**)→ 系统架构(时序图、接口契约、数据模型)→ **程序设计**(他认为最被低估的一环:在写实现前先定类型、方法签名、程序布局与**调用栈树**,用 diff 语法标出变化,配文件树 diff)→ 垂直切片(tracer bullet;模型天然爱"横向计划"按 DB→服务→API→前端分层推进,中途没法真正上手摸)。任务分布大致是**约 40% 一把过或加一两轮轻反馈**,中型任务合成一份计划文档,大型任务走全流程。 +- **两句可以直接引用的话:** "你不是 PR 太多,你是**烂 PR** 太多"(他估计 AI 一把过的 PR 返工率接近 50%);"你可能太忙着追 10–100x,忙到没空接受约束、稳稳地快 2–3 倍" +- **他引的行业数据(Faros AI《AI acceleration whiplash》报告,相关性信号而非因果铁证):** 评审评论数 +25%、评论长度 +22.7%、**+31.3% 的 PR 完全跳过评审**;每 PR 事故数 +242.7%、月度事故 +57.9%、人均 bug 数 +54% +- **与其他文章的关联:** + +| 本文概念 | 对应文章 | +|---------|---------| +| 点名反驳的对象 | #1 OpenAI 原点、#16 Symphony(作者直接引用并致敬后反驳)、#31 学科汇流 | +| 同一组织的自我修正 | #5 HumanLayer《Skill Issue》六杠杆(2026-03)→ 本文(2026-07)"杠杆不够" | +| 可维护性没有快 oracle | #19 计算性 vs 推理性传感器的边界、#49 GCC oracle 与 #56 测试套件 oracle 之所以奏效的前提 | +| 熄灯工厂的失败实录 | #64 Osmani 同题(明确基于本演讲)、#42 Ronacher comprehension | +| 评审是瓶颈 / 反馈是新瓶颈 | #26 Chris Parsons、#55 外环问责、#72 YDD 效率悖论与 Faros 数据 | + + + +### 64. Addy Osmani — Software Factories, Light and Dark(哪些循环配得上熄灯) + +- **标题:** Software Factories, Light and Dark +- **链接:** [addyosmani.com](https://addyosmani.com/blog/software-factories/) +- **作者:** Addy Osmani | **日期:** 2026-07-20 +- **核心:** 把 #63 的论战整理成一个可操作的开关问题。三层堆叠讲得比谁都干净:**loop 是原子**(收集上下文 → 动作 → 检查结果 → 再来一遍,直到某条件满足),**harness 是循环外面的墙**(沙箱、可达工具、跨轮存活的记忆、判定"做完了"的闸门——"loop 是行为,harness 是行为运行其中的环境"),**工厂是同时跑的许多被 harness 包住的循环**,由一个队列喂料、经一道评审闸门排入生产。"工厂不是更聪明的智能体,它是一张由循环组成的组织架构图。" +- **"暗"字是物理描述不是贬义:** 借自制造业的熄灯工厂(FANUC 从 2001 年起、小米 2024 年也开了一座),车间里只有机器,机器不需要光。**在软件里,车间地板就是 diff**;把"读"这个动作从流程里拿掉,工厂就熄灯了。 +- **工厂闭环里只有一个盒子贵:** 意图(来自工程领导层与工程师)与信号(事故、用户请求)汇入队列 → harness 取一件事造出改动 → CI / 测试 / 静态分析 / 各类扫描并行跑完,几乎零成本 → **评审闸门** → 部署 → 监控把生产变回信号。生成、测试、扫描都能近乎免费地规模化,**唯一顽固不肯规模化的就是那个琥珀色的"判断"盒子**。 +- **背压规则(本文最可执行的一句):** **你只能把"能廉价且可靠地验证"的那么多自主权交给一个循环,一寸都不能多。**约束从来不是生成,是验证;加宽入口只会让瓶颈处堆得更高。第二层论证:改进模型不会自动补上这个缺口——**架构优劣的成本函数以月和年计量,算不出整洁的梯度**,一个指望即时评判复杂设计决策的系统就不会被训练在好例子上。 +- **什么样的循环配得上熄灯:** 检查**便宜**、**高频**、依赖**难以糊弄**的东西,并且 oracle 要**立即回答且不随时间漂移**——绿/红 oracle、类型闸门、property test、配了真实评分表的评审智能体都算数。附 Dex 的经验法则:**智能体在 3–10 步内稳得住,超过 20 步开始跑偏**(原因是上下文累积),所以短循环天然更容易验证。反过来,**错一次很贵且只有人能发现**的循环要留灯:测试抓不到的隐蔽生产 bug、大爆炸半径、会塑造未来一年工作的决策。**最危险的不是选错某一档,而是忘了逐个拨开关、把它们全设成同一档**——全暗四个月后拆房重建,全亮则评审彻底堵死。 +- **架构作为廉价且难以伪造的安全网:** 好的类型与方法签名、测试缝、让下一个读者(人或模型)找得到东西的布局、短而可读的调用栈、清晰的组件边界、依赖注入——"没有一样是新的",但在智能体时代它们开始**兼任第二份工作**。而且这张网**必须活在模型之外**:最能干的编码智能体(Claude Code、Codex)都是对着自家 harness 与工具做强化训练的,流畅于本行的一切工具与惯用法,**但不流畅于长期可维护性**。 +- **循环还是图:** 作者认为把任务交给智能体时你多半会围着它建一张图(有限状态机 / 条件连边的服务调用)——"软件本来就有这种结构,我们过去就是画流程图的;真正新的动作是试图把图丢掉"。图的吸引力在于**它就是画成示意图的背压**:让渡一部分自由,换来强制检查点与可指认的失败节点。他点了 LangGraph、LlamaIndex Workflows、Jerry Liu 的混合工作流—图,以及 David Khourshid"这不过是状态机与 actor 模型换了身衣服"的提醒。 +- **与其他文章的关联:** + +| 本文概念 | 对应文章 | +|---------|---------| +| 直接上游 | #63 Dex Horthy 演讲(作者明确基于它展开)、#55 Own the Outer Loop(本文是它的工厂尺度版) | +| loop / harness / factory 三层 | #41 Loop Engineering 五构件、#43 官方四类循环、#3 harness 组件清单 | +| 背压与验证是唯一约束 | #28 Ralph 背压、#26 反馈是新瓶颈、#2 Ashby 必要多样性 | +| 熄灯的准入条件 | #19 计算性传感器(廉价、高频、难糊弄)、#49/#56 近乎完美验证器的两个正例 | +| comprehension debt | #42 Ronacher、观察项 Geoffrey Litt "Understand to participate" | + + + +### 65. Cursor / Wilson Lin — 智能体蜂群与新的模型经济学 + +- **标题:** Agent swarms and the new model economics +- **链接:** [cursor.com](https://cursor.com/blog/agent-swarm-model-economics) | [产出代码 cursor/minisqlite](https://github.com/cursor/minisqlite) +- **作者:** Wilson Lin(Cursor) | **日期:** 2026-07-20 +- **核心:** #48 同一作者的续篇,也是仓库"成本数据"缺口迄今最完整的一次填补。任务:**只给 835 页 SQLite 手册,用 Rust 从零实现整个 SQLite**——源码、测试套件、SQLite 二进制、互联网全部扣留;用智能体从未被告知存在的 **sqllogictest**(数百万条已知答案的查询)打分。新旧两版蜂群同任务、同模型、同时间预算对照:**新版在每一种模型组合上都更好**,四小时切点上新版落在 73%–85%、旧版 11%–77%,**新版每种配置最终都跑到 100%**;旧版的 Grok 4.5 跑到第二小时前就被迫暂停。 +- **成本才是标题:** 质量趋同,**账单从 $1,339(Opus 4.8 规划 + Composer 2.5 干活)到 $10,565(GPT-5.5 全包)**。结构上,worker 在每一次跑批里都吃掉至少 69%、多数时候 90%+ 的 token,但**规划 token 更贵**——Opus 混合配置里,规划者只产出一小部分 token 却占约三分之二成本。最刺眼的对照是 worker 舰队本身:**GPT-5.5 全包 $9,373 vs Opus+Composer $411**。论点因此很干脆:**一次大任务里真正需要前沿智能的时刻很少**(最初的分解、设计决策、若干权衡),一旦前沿规划者把歧义压成明确指令,便宜模型照着做就行。反例也记下了:Fable 5 规划者用的规划 token 少得多、账单更小,但**它的 worker 多花了几倍 token,整场反而更贵**——规划质量会传导到执行成本。 +- **树与叶(为什么是分层而不是并行):** 规划者拆解并委派、从不实现;worker 执行、从不规划。单个长跑智能体必须自己走完整棵树,同时揣着祖先节点、当前位置和总目标——**要么盯着眼前活儿丢掉大局,要么守着大局把这块做砸**。作者认为蜂群的可扩展性主要来自**上下文效率而非并行度**,并引科斯的企业理论作类比:协调成本比工作本身涨得更快,组织于是沉淀成一层层有界单元。 +- **每秒 1000 次提交暴露的五种失效(人类团队不会常遇到的):** + +| 失效模式 | 对策 | +|---------|------| +| Split-brain 设计:两个互不知情的规划者在不同地方实现同一概念 | 靠提示词:规划者自己做设计决策而不下放,且必须保证两棵委派子树不会去决定同一个问题 | +| 规划者争用:两个知情的规划者在同一批文件上来回改 | 决策写进共享设计文档;依赖某决策的代码带**编译期可检查的回指引用**;矛盾时由 reconciler 合并文档,引用把结论传导下去 | +| 合并冲突:worker 不擅长吸收他人上下文,要么覆盖别人要么放弃自己 | 中立的第三方智能体代所有当事人裁决合并,目标只有公正与高效(类比合并队列) | +| 巨文件:热门文件人人加一点、没人负责瘦身,运输/diff/合并都贵且成为持续碰撞点 | 给 worker 一个"标记文件过胖"的机制,标记后封禁新提交,由外部智能体拆分 | +| 僵化:智能体从"有人类在环的既有代码库"学会了不碰核心代码 | **明确授权破坏性改动**——判断值得就在自己范围外打一个聚焦补丁并留注释说明理由;编译器把这个改动传导出去,每个撞上错误的智能体读到注释再各自跟进 | + +- **另外三件工程活:** + - **自建版本控制系统。** 旧的浏览器蜂群在 Git 上峰值约 **1,000 次提交/小时**,新系统峰值约 **1,000 次提交/秒**。自己拥有这一层不只是为吞吐——所有改动都过 VCS,碰撞在这里第一次可见,若干协调机制就直接实现在里面 + - **评审透镜要去相关。** 试过给评审者完整轨迹、只给输出、什么都不给只给代码库,也试过换模型、换训练、换人格。**没有单一透镜能抓全,但去相关的透镜可以叠加**——就像自动驾驶不靠任何单个完美部件就达到超人可靠度;评审的算力回报很高,因为**评审比它审的活儿便宜得多** + - **Field Guide(共识蚁迹)。** 一个完全由智能体拥有的目录,其 `index.md` 自动注入每个智能体的开局,写什么由它们自己策展,唯一约束是行数预算。逻辑是:**模型权重是冻结的,所以恰恰是那些"意外遭遇"值得被记下来,好让下一条轨迹更短** +- **量化的失效对照(Grok 4.5 新旧同任务):** 旧版前两小时产出 68,000 次提交(约为新版节奏的 70 倍),但**积累了 7 万多次合并冲突且还在加速**,新版整整四小时不到一千次;旧版最热的那个文件收了 **7,771 次冲突、被 1,173 个不同智能体碰过**,新版全库最有争议的文件只有 **47** 次。旧版蔓延到 **54 个 crate**(含三个各自独立的 SQL 包),新版早早稳定在 **9 个**且再没加过。最终代码量:Fable 5 组合下旧版 64,305 行引擎代码、新版 **9,908 行**;Opus 组合下旧版 19,013 行拿 97%、新版 **4,645 行**拿 100%。 +- **"spec 即提示词":** 自动补全把工作单位提到一行,早期模型提到一段,智能体提到一个文件或一个功能,**蜂群把它提到一份 spec**。作者把蜂群类比成编译器——规划者把目标解析成任务树、一步步下降为可执行的活儿,**区别是编译器每一步都保义,而蜂群每一步都是概率性的,本文描述的一切都是为了弥合这个差**。稀缺的不再是实现,而是**对意图的正确描述**。 +- **与其他文章的关联:** + +| 本文概念 | 对应文章 | +|---------|---------| +| 成本数据(缺口回应) | 观察项 The Harness Effect(成本 -41%)、#57 HarnessX 弱模型受益最大——本文给出"强规划 + 弱执行"的价格实证 | +| 前作与失败史 | #48 扁平自协调失败(本文是它的工程化答卷)、#28 Ralph 背压 | +| 并行智能体的工业实录 | #56 Bun 重写(同为"修流程不修代码")、#49 无编排者的 16 个 Claude(对照组) | +| 去相关评审叠加 | #36 对抗验证、#56 二对抗评审者、#63 "更多评审抬地板不抬天花板"(本文是反方证据) | +| 智能体自策展的共享上下文 | #15 三层学习、#8 团队标准显式化、#1 仓库即记录系统 | + + + +### 66. Anthropic / Thariq Shihipar — Claude 5 世代的上下文工程新规则(删掉 80% 系统提示词) + +- **标题:** The new rules of context engineering for Claude 5 generation models +- **链接:** [claude.com](https://claude.com/blog/the-new-rules-of-context-engineering-for-claude-5-generation-models) +- **翻译:** [works/anthropic-context-engineering-claude5-translation.md](../works/anthropic-context-engineering-claude5-translation.md) +- **作者:** Thariq Shihipar(Anthropic 技术团队) | **日期:** 2026-07-24 +- **核心:** #4 提出的"harness 瘦身"、#31 讲的"约束加减法纪律",在这里第一次有了官方的量化落地:**为 Claude Opus 5 / Claude Fable 5 这一代模型,Claude Code 的系统提示词被删掉了 80% 以上,编码评测上没有可测量的损失。** 自陈的病因是"我们在过度约束 Claude"——读内部转录时能看到同一个请求里系统提示词、skill 与用户请求互相打架("适当留文档"对上"不要写注释"),模型必须先想清楚这些冲突再决定做什么。 +- **六组 then / now(本文的主体,可直接当自查表;原文配了一张按顺序列出这六组的图):** + +| 过去 | 现在 | +|------|------| +| 给 Claude 规则 | 让 Claude 用判断力。旧系统提示词写"默认不写注释、绝不写多段 docstring";新版改成一句**"写得像周围的代码:匹配它的注释密度、命名与惯用法"** | +| 给 Claude 示例 | 设计接口。示例反而把新模型**限制在某个探索空间**里;该花心思的是工具、脚本与文件的参数设计够不够表达力。原文配图给了尺度:旧版 TodoWrite 描述约 **9,100 字符**(塞满何时使用的清单与示范例子),换成短接口后只剩一句说明 + pending/in_progress/completed 枚举 + 一条"同一时间只允许一项 in_progress" | +| 全部前置塞进去 | 渐进式披露。验证与代码评审从系统提示词移进各自的 skill;**工具也可以 deferred loading**——必须先用 ToolSearch 搜到完整定义才能用,于是工具可以变多而不占上下文 | +| 重复自己 | 简单的工具描述。旧模型有时需要重复指令、或更听上下文末尾的话;现在可以删掉重复,把用法写进工具描述而不是系统提示词 | +| 用 CLAUDE.md 当记忆 | 自动记忆。不再靠 `#` 热键手动写入,Claude 自己保存与工作和你相关的记忆 | +| 简单的 spec | 丰富的引用。**spec 可以是一份详细的测试套件,或另一个代码库里的一个函数**;也可以是 HTML artifact;**rubric 也是一种引用**——让 Claude 用动态工作流起验证者智能体来核对你的品味 | + +- **落到自己项目上的四条:** ① 系统提示词与产品语境强绑定,用 Claude Code 的人基本不会改它,**但如果你在造自己的 harness,这里才是该花大力气的地方**;② CLAUDE.md 保持轻量,简述仓库是干什么的,**把 token 主要花在代码库里的 gotcha 上**,别写文件系统一看便知的"显而易见的事";③ skill 当作轻量指引,除极重要处别写得过度约束,长 skill 拆成多文件做渐进式披露,**最好承载的是你/你的团队/你的产品特有的观点与实践**;④ 引用优先给代码形态——**一份 HTML mockup 通常比一段描述或一张截图产生更好的结果** +- **配套:** 新命令 `claude doctor`(Claude Code 内 `/doctor`)用来自动给 skill 与 CLAUDE.md 做"合身度"检查 +- **与其他文章的关联:** + +| 本文概念 | 对应文章 | +|---------|---------| +| Harness 瘦身从主张到数据 | #4(同厂提出)、#31 约束加减法纪律、#69 LangChain 用基准裁决删中间件(第三方同期同向) | +| 拆护栏是行业级动作 | #60 Cursor 2024 末的护栏"大部分早就没了"——两家独立收敛 | +| 渐进式披露 | #22 interpreter 是第三类上下文表面、#43 官方四类循环、观察项 Steering Claude Code 七种转向机制 | +| 规则 vs 判断力 | #25 提示声明授权反而降低边界推断、#63"模型对本行工具流畅、对可维护性不流畅"(本文的反方脚注) | +| spec 即测试套件 / rubric | #20 SPDD prompt 即一等交付物、#56 语言无关测试套件作 oracle、#36 对抗验证 | + + + +### 67. Don't Blame the LLM 论文 — 固定模型、只变 harness 的受控纵向研究 + +- **标题:** Don't Blame the Large Language Model: How Agent Harness Evolution Shapes Coding Agent Quality +- **链接:** [arxiv.org/abs/2607.03691](https://arxiv.org/abs/2607.03691) +- **作者:** Oussama Ben Sghaier、Hao Li、Bram Adams、Ahmed E. Hassan(Queen's University) | **日期:** 2026-07-04(v1)/ 2026-07-20(v2) +- **核心:** 仓库里关于"harness 才是那个变量"的主张,此前主要靠 #34/#35 的横截面测量与 #23 的单次复盘。本文是**第一个把它做成受控纵向研究**的工作:**既有研究都固定 harness、换模型,他们反过来——固定模型,只换 harness 的 35 个连续版本。**(论文自述为 controlled longitudinal study。固定模型隔离掉了"模型更新"这一项混杂,但版本间的 harness 变更本身并未随机化,因此这是强关联证据,不是随机化的因果识别。) +- **两段研究:** + - **面上:** 实证五个主流开源 harness(Codex、Qwen Code、Gemini、OpenCode、OpenHands)的开发与发布演进,发现**发布速度超过每天两次**、数月内积累数千 issue + - **点上:** 对 Qwen Code CLI 的 **35 个连续版本**做受控深潜,每个版本对 **50 个分层抽样的 SWE-bench Verified 任务**跑一遍,**底层 LLM 保持不变**,同时测有效性与效率;再把测出来的质量波动**追溯到具体的开发模式与架构组件**,并用单个 pull request 的定性证据佐证 +- **它替仓库回答的是哪句话:** 实践者常在 harness 更新后报告质量退化,**却一贯把账算到模型头上**——标题正是冲着这个来的 +- **一个顺带的术语学证据:** v1 标题是 *How **Scaffolding** Evolution Shapes Coding Agent Quality*,v2 改成 *How **Agent Harness** Evolution…*,正文措辞同步替换。这条 16 天内发生的改词本身,就是 "harness" 取代 "scaffolding" 成为学术圈默认词的一手史料(可与观察项 thedeepfeed 的传播史对照) +- **与其他文章的关联:** + +| 本文概念 | 对应文章 | +|---------|---------| +| harness 版本演进导致质量波动 | #23 Anthropic 质量回归复盘(第一手单次事件)→ 本文(外部、35 个版本、可复现) | +| harness 接口维护成本(开放问题) | #2 Harnessability、已跟踪产品 claude-code-harness v4.2"七项变更里 6 项是追上游" | +| 固定一侧变另一侧的实验设计 | #34 Harness-Bench(固定任务变配置)、#35 榜单方差归因、#59 固定一切只变资源 | +| 演化本身是瓶颈 | #53 Harness Handbook(行为定位)、#68 自动演化的负面结果 | + + + +### 68. Rethinking Harness Evolution 论文 — 自动 harness 演化的第一份系统性负面结果 + +- **标题:** Rethinking the Evaluation of Harness Evolution for Agents +- **链接:** [arxiv.org/abs/2607.12227](https://arxiv.org/abs/2607.12227) | [代码](https://github.com/rethinking-harness-evolution) +- **作者:** Yike Wang、Huaisheng Zhu、Zhengyu Hu、Yige Yuan、Zhengyu Chen、Shakti Senthil、Hannaneh Hajishirzi、Yulia Tsvetkov、Pradeep Dasigi、Teng Xiao | **日期:** 2026-07-14 +- **核心:** 仓库已经收了一整条"智能体自动改进 harness"的线(#11 Meta-Harness、#24 AHE、#44 Self-Harness、#57 HarnessX、#45 Weng 综述)。本文是**这条线的第一份系统性反证**,而且打的不是结论而是**评测协议**。 +- **两条方法论质疑:** + 1. **harness 演化本身就是一种搜索。** 它反复用任务反馈评估并修改候选 harness——这与智能体的 test-time scaling 是同类动作。因此必须在**同等反馈预算与推理预算**下,与简单的 task-level 搜索基线对比,才能分清收益来自"更好的 harness 设计"还是"单纯多搜了几轮" + 2. **搜索与最终评测共用同一个基准。** 用单元测试搜配置、再在同一个公开基准上报成绩,报出来的增益**有过拟合到那个任务集的风险** +- **他们怎么做与得到什么:** 在**同等反馈与推理预算**下把 harness 演化与简单 test-time scaling、discovery 基线对齐比较,并把演化出的 harness 拿到**留出任务**上测泛化。Terminal-Bench 2.1 上用 GPT-5.4 与 Claude Opus 4.6 跑,结论是**自动 harness 演化并不能稳定优于简单的 test-time scaling,且泛化能力有限**。 +- **怎么读它才对:** 这不是"自动演化没用"的判决,而是"**现有证据不足以支持它有用**"的方法论警告——它对应 #38 那条主线(基准把不同来源的效应折叠进一个分数)在自演化子领域的复现。读 #57 HarnessX 的 +14.5% 与 #44 的 +14~21pp 时,应当同时问:基线是否在同等搜索预算下?留出任务上还剩多少? +- **与其他文章的关联:** + +| 本文概念 | 对应文章 | +|---------|---------| +| 直接质疑的对象 | #11 Meta-Harness、#24 AHE、#44 Self-Harness、#57 HarnessX、#45 Weng RSI 综述 | +| 同等预算基线的要求 | #38 基准错位、#35 统计归因、#59 基础设施噪声(三者共同构成"分数怎么读"工具箱) | +| 搜索集与评测集重叠 | #61 Cursor 奖励作弊(污染的另一种形态:答案本身在环境里) | +| 与观察项的互证 | Harness Updating ≠ Harness Benefit(利用 harness 的能力非单调)、Phantom Guardrails(自改进会修不存在的失败) | + + + +### 69. LangChain — Harbor 评测栈:给 harness 建标尺,再给标尺建标尺 + +- **标题:** How We Benchmark Deep Agents(2026-07-23)+ IssueBench - How We Evaluate Engine(2026-07-20) +- **链接:** [how-we-benchmark-deep-agents](https://www.langchain.com/blog/how-we-benchmark-deep-agents) | [issuebench-how-we-evaluate-engine](https://www.langchain.com/blog/issuebench-how-we-evaluate-engine) +- **作者:** Nick Hollon & Harrison Chase / Nick Bray & Arjun Nargolwala(LangChain) | **日期:** 2026-07-20 ~ 2026-07-23 +- **核心:** 两篇同周、同底座(都跑在 **Harbor** 上——支撑 Terminal Bench 的那个开源 eval runner)的姊妹文,合起来是一个完整论点:**前一篇讲怎么给 harness 建可信标尺,后一篇讲怎么给标尺本身建标尺。** 仓库此前有 #34/#35/#38 三篇论文论证 harness 效应可测且被基准折叠,但缺实践者侧的操作答案,这条补的正是它。 +- **给 harness 建标尺(Deep Agents):** + - 从"unit 式小测"迁到端到端评测,因为智能体任务越跑越长。**一个 task = Environment(Dockerfile / Compose)+ Instruction(Markdown)+ Evaluation script(`test.sh`)**。与普通 LLM 评测的两点根本差异被写死在结构里:**环境重要到必须作为 task 的一部分被声明**;**判分必须用脚本,因为智能体会产出文件、改变状态,只看最终回复不够** + - 三个基准对应三类工作:**Harbor-Index**(自主端到端,**82 个任务**,由 Harbor 从 **54 个基准的 6,000+ 候选**中蒸馏,覆盖软件工程 / 检索 / 数据分析 / 长时程工具使用)、**τ³-bench**(对话,30 任务子集,用户被模拟但判分查真实结果)、**ContextBench**(检索,30 个校准任务,每个任务把完整语料随沙箱一起发货) + - 三条可直接抄的纪律:**每个任务跑多次**(非确定性带来的方差让单次跑不足以校准);保留一个 **"lite" 冻结子集**,偏向"难但可解的前沿",**约快 8 倍、便宜 6 倍**,迭代期只跑 lite、全量留给关键决策;基准之外并行维护一套 **capability suite**——快速确定性单测,各自瞄准某个具体 harness 行为(工具选择、记忆、文件操作),"是基准这个集成层之下的单测层" + - 正在用它裁决 Deep Agents 0.7 的**减法**:是否移除 todo-list middleware、是否大幅精简系统提示词。这是"约束加减法纪律"第一次有了公开的决策流程 +- **给标尺建标尺(IssueBench):** 评估的对象是"**那个用来改进智能体的智能体**"(LangSmith Engine)。**15 个任务**,每个任务给一批 trace 加一组已有 issue,trace 在**合成环境**中生成以获得受控 ground truth,跑在 Harbor 上、对隐藏答案判分,覆盖 SRE 日志分析 / 软件工程 / 客户支持**三个领域**。 + - **15 类失败分类法**(仓库此前反复出现"观察失败 → 编码修复"的闭环,却一直没有一份失败词汇表):PII 泄漏、幻觉、系统提示词漂移、用错工具、能力缺口、错误恢复失败、工具入参错误、智能体打转、上下文爆炸、护栏绕过、响应截断、静默工具错误、计划有缺陷、任务规避、能力自知缺失。类别集**被冻结**,即使 Engine 自己改分类,基准也保持一致 + - **判分在 issue 集层面而非 trace 层面**,并**显式扣分**于三种 triage 病态:一条失败开一张卡、把不相关失败并成一张模糊的卡、覆写既有 issue 上下文。理由写得很直白:十条失败开十张卡则 issue 集变噪声,并成一张则丢失可修复的细节,类别判错则路由给错误的负责人 + - 三条可迁移的设计原则:**合成数据(真实智能体 + mock 工具)在"轨迹真实"与"标签可信"之间取到最佳折中**;**"无问题"这一类和失败类同等重要**(若"干净" trace 里藏着问题,误报率就变噪声、模型间比较随之失效);**同一失败类别跨领域复跑**,用以区分"学到了抽象失败模式"还是"记住了某个领域的表面特征" + - 一个有意思的副产品:Engine 判错时未必是模型失败,常常暴露的是**类别边界不清、issue 描述欠定义、或判分规则不符合团队真实 triage 方式**——基准反过来澄清了产品行为定义 +- **保留意见(收录时一并记下):** 两篇都**不报告任何实际得分**;IssueBench 目前是**内部基准、未开源**,且服务于 LangSmith Engine 这一付费产品,存在自评自家的利益相关。处理方式同观察项 The Harness Effect:**取方法论,标注利益相关,结论不可独立验证。** +- **与其他文章的关联:** + +| 本文概念 | 对应文章 | +|---------|---------| +| 做减法的裁决装置 | #4 harness 瘦身、#31 约束加减法、#66 Anthropic 删 80% 系统提示词(同期同向) | +| harness 效应从"可测"到"怎么测" | #34 Harness-Bench、#35 统计归因、#38 基准错位(三篇的实践者侧答案) | +| 失败词汇表 | #9 反馈飞轮、#24 AHE、#27 LangSmith Engine(本文是给 #27 建的考卷) | +| 评测集设计原则 | #47 未展开的两条(无问题类同等重要、跨领域复跑)、#61 审计轨迹 | +| 环境是 task 的一部分 | #59 基础设施噪声(同一命题的两侧:一个说必须声明,一个量化了不声明的代价) | + --- ## 脉络二:云原生时代的 Harness.io(交付与平台工程) - + -### 58. Harness.io 官方 — 全局架构 +### 70. Harness.io 官方 — 全局架构 - **标题:** Understanding CI/CD Platforms: The backbone of modern DevOps - **链接:** [harness.io](https://www.harness.io/blog/understanding-ci-cd-platforms-the-backbone-of-modern-devops) @@ -1582,9 +1910,9 @@ - **核心:** 标准 CI/CD 平台介绍。8 大组件:SCM → Build → Test → Code Quality → Security Scan → Artifact → Deploy → Monitor - **Harness 差异化:** 统一管线、Test Intelligence 智能测试、最少脚本、Policy-as-Code 治理 - + -### 59. Google Cloud Architecture — 前沿场景结合 +### 71. Google Cloud Architecture — 前沿场景结合 - **标题:** Harness CI/CD pipeline for RAG applications - **链接:** [docs.cloud.google.com](https://docs.cloud.google.com/architecture/partners/harness-cicd-pipeline-for-rag-app) @@ -1597,9 +1925,9 @@ ## 脉络三:效率悖论与能力进化 - + -### 60. YDD / Miss-you — 效率悖论的系统性拆解 +### 72. YDD / Miss-you — 效率悖论的系统性拆解 - **标题:** 为什么 AI 写代码更快但交付没变,以及我怎么把它扳回来的 - **链接:** [yousali.com](https://yousali.com/posts/20260303-ai-coding-efficiency-to-evolution/) @@ -1645,15 +1973,15 @@ --- - + -### 61. METR — 生产力实验的后续:结论松动与方法论危机 +### 73. METR — 生产力实验的后续:结论松动与方法论危机 - **标题:** We are Changing our Developer Productivity Experiment Design(2026-02-24)+ Measuring the Self-Reported Impact of Early-2026 AI on Technical Worker Productivity(2026-05-11) - **链接:** [metr.org 实验设计更新](https://metr.org/blog/2026-02-24-uplift-update/) | [metr.org 自报调查](https://metr.org/blog/2026-05-11-ai-usage-survey/) | [后续研究数据集](https://github.com/METR/Measuring-Late-2025-AI-on-OSS-Devs) - **翻译:** [works/metr-uplift-update-translation.md](../works/metr-uplift-update-translation.md)(实验设计更新篇) - **作者:** Joel Becker, Nate Rush, Tom Cunningham, David Rein, Khalid Mahamud (METR) | **日期:** 2026-02-24 / 2026-05-11 -- **核心:** #60 YDD 的论证基石(METR RCT "AI 辅助反而慢 19%")的官方后续。late-2025 复现实验(57 名开发者、143 仓库、800+ 任务)的原始结果转向加速——原班开发者估计 **-18% 加速**(CI -38%~+9%)、新开发者 -4%(CI -15%~+9%)——但 METR 自己判定这只是**很弱的证据**,并宣布改实验设计。真正的信息量在于:**AI 渗透已经破坏了任务级随机对照实验本身的可行性**。 +- **核心:** #72 YDD 的论证基石(METR RCT "AI 辅助反而慢 19%")的官方后续。late-2025 复现实验(57 名开发者、143 仓库、800+ 任务)的原始结果转向加速——原班开发者估计 **-18% 加速**(CI -38%~+9%)、新开发者 -4%(CI -15%~+9%)——但 METR 自己判定这只是**很弱的证据**,并宣布改实验设计。真正的信息量在于:**AI 渗透已经破坏了任务级随机对照实验本身的可行性**。 - **选择效应的三重来源(实验设计为何失效):** - 开发者拒绝参与——越来越多人不愿在无 AI 条件下工作(时薪 $50 也不愿),最乐观的采纳者系统性缺席 @@ -1667,9 +1995,9 @@ | 本文概念 | 对应文章 | |---------|---------| -| 19% 减速数据的后续 | #60 YDD 第一章效率悖论(引用了原实验) | -| 感知与现实的偏差 | #60 的 39 个百分点偏差、自报高估 40+ 个百分点 | -| 并发智能体使计时失效 | #60 第五章并发策略(并发正是 YDD 开出的药方) | +| 19% 减速数据的后续 | #72 YDD 第一章效率悖论(引用了原实验) | +| 感知与现实的偏差 | #72 的 39 个百分点偏差、自报高估 40+ 个百分点 | +| 并发智能体使计时失效 | #72 第五章并发策略(并发正是 YDD 开出的药方) | | 测量方法的时代错位 | #38 Position 论文(基准侧的同构诊断:测量工具追不上被测对象) | --- @@ -1696,7 +2024,7 @@ Harness Engineering(AI 护栏) Harness.io(交付管线) ## 中文转译 / 二手资料(不计入文章数) > 这里收录的是**他人已发布的中文译介或二手综述**——本仓库做了归档但**不视为一手文献**。 -> 本段不参与 `### N. ...` 的全局编号,不计入 61 篇文章总数;与上方编号正文严格区分,避免污染脉络计数。 +> 本段不参与 `### N. ...` 的全局编号,不计入 73 篇文章总数;与上方编号正文严格区分,避免污染脉络计数。 > 收录标准:内容与 Harness Engineering 直接相关、来源可追溯到具名作者 / 译者、且对本仓库已有一手文献有补充或对照价值。 ### Akshay Pachaar — The Anatomy of an Agent Harness(中译版) @@ -1749,7 +2077,7 @@ Harness Engineering(AI 护栏) Harness.io(交付管线) ## 已跟踪产品 / 项目(不计入文章数) -> 这里收录的是**开源产品 / 框架 / 工具**,不是文章。本段不参与"### N. ..." 的全局编号,不计入 61 篇的文章总数。 +> 这里收录的是**开源产品 / 框架 / 工具**,不是文章。本段不参与"### N. ..." 的全局编号,不计入 73 篇的文章总数。 > 触发"产品级实现案例"的判定通常是:有可运行代码、有版本号、被本仓库 thinking/ 或 works/ 单独分析。 ### ⭐ Chachamaru127 — claude-code-harness v4.2 "Hokage"(产品级实现案例) @@ -1777,9 +2105,17 @@ Harness Engineering(AI 护栏) Harness.io(交付管线) ## 观察项 / 候选材料(不计入文章数) -> 2026-05 起各轮调研中已甄别、但**暂不值得做成正式文章**的产品页 / README / 短 bliki / 发布稿 / 工程随笔。本段不参与 `### N.` 编号,不计入 61 篇文章总数。 +> 2026-05 起各轮调研中已甄别、但**暂不值得做成正式文章**的材料。本段不参与 `### N.` 编号,不计入 73 篇文章总数。 > 中文译文留在本地 `translate/`(gitignored)作阅读辅助;下表只记上游链接与定性,方便下次快速复看。 > **去向标记:** 🔵 待实测后入 `tools/`(遵守 tools/「只收用过的工具」标准,未实测前不正式收录) | ⚪ 长期观察 | ⏭️ 暂存不收。 +> +> **升格阈值(2026-07-27 补写,解决"论文为什么有的进编号、有的只进这张表"的口径问题):** +> 早期本表只收产品页 / README / 短 bliki / 发布稿 / 工程随笔,但随着 arXiv 上 harness 论文的产出速度上来,**论文同样会落到这张表**——否则每月十几篇会把编号正文淹掉。判据不是体裁而是**它是否改变你读既有条目的方式**: +> +> - **进编号正文**:提出新的实验设计范式(如 #67 首次固定模型只变 harness),或对库内已有主线给出系统性反证(如 #68 对自演化那条线)。 +> - **只进本表**:为已确立的结论再加一个数据点或做独立复现(Claw-SWE-Bench 复现 #35、Better Harnesses 复现 #57 的弱模型受益)、换一个测量轴但结论同向(StaminaBench)、地图式综述(Code as Agent Harness、Agent System and Harness Design)、或工具/工件本身尚未被实测。 +> +> 这条阈值是可争的;争的时候请改这段文字,而不是在个案上临时松紧。 | 候选 | 类型 | 去向 | 角度 / 为何只做观察项 | 原文 | |---|---|---|---|---| @@ -1807,7 +2143,7 @@ Harness Engineering(AI 护栏) Harness.io(交付管线) | OpenAI Core dump 流行病学 | 工程复盘 | ⚪ | "群体级诊断 > 逐例分析"修复 18 年 libunwind 老 bug,ChatGPT 参与写分析管线;可观测性方法论好文但与 harness 关系间接,2026-06-30 | [openai](https://openai.com/index/core-dump-epidemiology-data-infrastructure-bug/) | | thedeepfeed:学科史梳理 | 编年 | ⚪ | "七个声音九个月汇流成一个学科"的传播史(含 Osmani 文收藏/点赞比 2:1 等传播数据);二手史料,配 #31 看 | [thedeepfeed.ai](https://www.thedeepfeed.ai/posts/2026-05-09-agent-harness-engineering-the-discipline/) | | Boris Cherny 工作流 | 实践 | ⚪ | Claude Code 作者本人"出奇原味"的用法(~100 行 CLAUDE.md、早期以 plan mode 纪律著称;站内 Part 15 已记录其 4.6+ 后放弃 plan mode 起手、改 auto mode 直跑——"新模型不再需要显式规划步骤");源头是其 X 帖,链接为社区维护的档案站(非 Anthropic 官方) | [howborisusesclaudecode.com](https://howborisusesclaudecode.com) | -| Steering Claude Code 官方指南 | 产品文档 | ⚪ | 七种转向机制(CLAUDE.md/rules/skills/subagents/hooks/output styles/system prompt append)按"加载时机 × compaction 行为 × token 成本"三轴对照——#60 YDD"区别在加载机制"论的官方版说明书;参考手册体裁,2026-06-18 | [claude.com](https://claude.com/blog/steering-claude-code-skills-hooks-rules-subagents-and-more) | +| Steering Claude Code 官方指南 | 产品文档 | ⚪ | 七种转向机制(CLAUDE.md/rules/skills/subagents/hooks/output styles/system prompt append)按"加载时机 × compaction 行为 × token 成本"三轴对照——#72 YDD"区别在加载机制"论的官方版说明书;参考手册体裁,2026-06-18 | [claude.com](https://claude.com/blog/steering-claude-code-skills-hooks-rules-subagents-and-more) | | The Harness Effect 论文 | 论文/厂商评测 | ⚪ | "成本数据"缺口的首个系统数据:同 22 任务 × 6 模型只换编排层,成本 -41%、时延 -44%、token -38%;提出 token maxing 与 harness leverage(质量增益与基线能力 r=0.99)。注意 Writer Inc. 自评自家 harness,利益相关,方法论(frozen baseline + locked tasks)可取 | [arxiv 2607.06906](https://arxiv.org/abs/2607.06906) | | Harness Updating ≠ Harness Benefit 论文 | 论文 | ⚪ | 拆开两条能力轴:写 harness 编辑的能力各模型持平(9B 能写出与 Opus 同构的 skill),利用 harness 的能力非单调(中档模型受益最多)——跨模型可移植性缺口的机制侧证据;被 #45 Weng 综述引用 | [arxiv 2605.30621](https://arxiv.org/abs/2605.30621) | | ToFu 白盒研究 harness | 工具 | 🔵 | MIT 协议、面向研究者的白盒 harness:三层上下文压缩 + 多语言 + MCP 集成,可作为 research object 检查/修改编排逻辑;待实测后再定去向 | [arxiv 2607.11423](https://arxiv.org/abs/2607.11423) | @@ -1826,5 +2162,24 @@ Harness Engineering(AI 护栏) Harness.io(交付管线) | Iusztin:What's Harness Engineering | 科普 | ⚪ | "模型商品化 → harness 是你该拥有的那层" + build/buy/customize 三分与开源中间地带(Pydantic AI Harness / Pi / Deep Agents);面向非工程读者的定调文,论点已被 #1/#3/#31 覆盖,2026-07-21 | [read.technically.dev](https://read.technically.dev/p/whats-harness-engineering) | | Sparsh Agarwal:Control Surface | 工程随笔 | ⚪ | Scaffolding(首条消息前装配)vs Harness(会话中运行)二分 + "allowed claim / proof" 治理词汇 + 开工前六问清单;术语有用、无一手数据,2026-07-09 | [medium](https://medium.com/recohut-ai-labs/harness-engineering-the-control-surface-around-coding-agents-a907bc310eee) | | OpenAI Agents SDK 演进 | 产品文 | ⚪ | 官方 SDK 侧的"harness 与 compute 分离"定式:凭据不进模型代码执行环境 + snapshot/rehydration 断点续跑 + Manifest 工作区契约;与 #7 brain/hands、#40 HaaS、#50 遏制互证;发布稿体裁,2026-04-15(存量回扫补录),配套 [Claude→OpenAI SDK 迁移指南](https://developers.openai.com/cookbook/examples/agents_sdk/migrate-from-claude-agent-sdk/readme) 的两套架构对照表最清晰 | [openai](https://openai.com/index/the-next-evolution-of-the-agents-sdk/) | +| What makes a harness a harness 论文 | 论文/概念分析 | ⚪ | 目前最认真的**术语锚点**:给 agent harness 下构成性定义(充分必要条件)并操作化成纳入/排除测试,划清它与 agent framework / SDK / IDE 插件 / eval harness / orchestrator 的边界,在 6 个真实 harness(Claude Code、Codex CLI、Aider、Cline、OpenHands、SWE-agent)加人造边界案例上一致通过;还梳了词源谱系(马具 → test harness → ML eval harness → agent harness)。单作者概念分析、无实验,故只作观察项;写中文词条时可引 | [arxiv 2606.10106](https://arxiv.org/abs/2606.10106) | +| Claw-SWE-Bench 论文 | 论文/基准 | ⚪ | #35"harness 效应 ≈ 模型效应"的独立复现:固定模型时 **harness 选择造成 27.4pp 差异、模型选择 29.4pp**。更刺眼的是 adapter 决定论——同为 GLM 5.1 后端,minimal direct-diff adapter 只有 **19.1% Pass@1**,完整 adapter 达 **73.4%**。350 实例 / 8 语言 / 43 仓库 + 80 实例 Lite 子集 | [arxiv 2606.12344](https://arxiv.org/abs/2606.12344) | +| Better Harnesses, Smaller Models 论文 | 论文 | ⚪ | "成本数据"缺口的学术侧样本,与 #65 的价格实证同向:7 个业务型 agentic 任务 × 3 个 SLM 家族,meta agent 从失败轨迹自动发现 harness 适配,**21 个 task-SLM 组合中 16 个显著提升、7 个抹平 SLM-LLM 差距,最佳者以 4% 成本恢复 89.7% 的 LLM 性能**;适配对重复性工作流与基础能力够格的 SLM 收益最大 | [arxiv 2607.08938](https://arxiv.org/abs/2607.08938) | +| StaminaBench 论文 | 论文/基准 | ⚪ | 换一个测量轴:不问"解出几成任务",问**连续撑几轮**。实现 REST API 服务器后连做 100 次程序化生成的变更请求(代码可达 6,000 行),测试全程序生成、黑盒 HTTP 交互。6 个 harness × 7 个开源模型 × 20 场景:**所有模型 5–6 轮内失败**;回灌测试反馈并允许重试把通过轮数提升最多 **12 倍**;强模型在最好与最差 harness 间差 **6 倍**,弱模型换哪个 harness 都不行 | [arxiv 2606.19613](https://arxiv.org/abs/2606.19613) | +| Failure as a Process 论文 | 论文/实证 | ⚪ | 把失败当过程而非终局:7 个前沿模型 × 3 个脚手架(OpenHands / MiniSWE / Terminus2)在 Terminal-Bench 上的 **3,843 条轨迹**,筛出 1,794 条完整轨迹人工标注 **6.3 万+ 执行步**,得 14 条发现——失败主要由**认知性错误**驱动、**通常在最初几步就已发生**、且**往往隐藏到无法挽回时才显形**。结论直指 #47:只评最终结果的评测天然看不见这些 | [arxiv 2607.09510](https://arxiv.org/abs/2607.09510) | +| Phantom Guardrails 论文 | 论文 | ⚪ | 自改进 harness 的新失效:**修不存在的失败**。构造一个正确动作是"什么都别做"的确定性微实验室,只喂合法轨迹并用逐字节 oracle 核验每一条被引用的违规——当合法输入里含有"像某条熟悉规则"的无害模式时,提议者在 **15/60 次**里启用了那条不存在的护栏并引用了 oracle 否定的违规(无特征输入下 0/60)。三条件同时成立才触发(规则形态的模式 + 开放规则集 + 预设存在失败的指令),去掉任一条即消失。既非 reward hacking 也非过度拒绝,是**幻觉**——与 #68 一起读 | [arxiv 2607.13083](https://arxiv.org/abs/2607.13083) | +| HarnessFix 论文 | 论文 | ⚪ | 针对"自演化改动宽泛、间接、范围失当"的定位问题:把原始轨迹与 harness 工件编译成 HTIR(Harness-aware Trace Intermediate Representation),归一化碎片证据、捕捉步级数据流与控制流、把运行时步骤对齐到塑造其行为的工件,再归因→flaw record→scoped repair operator→回归验证。4 个基准上相对初始 harness 提升 **6.3%–18.4%**;与 #53 行为定位是同一瓶颈的两种解法 | [arxiv 2606.06324](https://arxiv.org/abs/2606.06324) | +| Agent-Reactive Bugs 论文 | 论文/实证 | ⚪ | 首个聚焦 **AR bug** 的实证:只在某条 LLM 回复触发 harness 异常反应时才出现的缺陷,单看模型或单看 harness 都理解不了。人工分析 Codex / Gemini-CLI / LangChain / CrewAI 的 **255 份 bug report**,建"可观测症状 × 触发它的 LLM 行为"二维分类法;发现大量 AR bug 是**无明确 test oracle 的静默错误**,回复随机性又让复现困难。修复侧错位很有意思:**用户普遍主张在 harness 侧加护栏,开发者却倾向归咎于 LLM** | [arxiv 2607.15684](https://arxiv.org/abs/2607.15684) | +| Agent System and Harness Design 综述 | 论文/综述 | ⚪ | 以 model-harness 视角问"瓶颈在模型、在 harness、还是在耦合":梳理 prompt → workflow/context → harness → agent-native training with co-evolution 四范式,把执行 harness 拆成 6 项耦合运行时职责(observation / context / control / action / state / verification)。综述体裁,检索地图价值大于论点价值,配 #57 共演化看 | [arxiv 2606.20683](https://arxiv.org/abs/2606.20683) | +| Recursive Agent Harnesses 论文 | 论文 | ⚪ | 给 #51(dynamic subagents)与 RLM 之间那个模式命名:递归单元不是模型调用而是**完整的 agent harness**(带文件系统工具、代码执行与规划)。固定 GPT-5 后端,Oolong-Synthetic 上把 Codex 基线从 **71.75% 提到 81.36%**(199 样本、13 个上下文长度分桶至 4M token),换 Claude Sonnet 4.5 达 89.77% | [arxiv 2606.13643](https://arxiv.org/abs/2606.13643) | +| Stop Hand-Holding Your Coding Agent 论文 | 论文/概念 | ⚪ | 给 loop engineering 做学术化梳理:把"loop specification"定义成人类交给 harness 的有界可复用工件(trigger / goal / verification / stopping rule / memory),并把它与普通程序循环、与 harness 内建的感知-行动-观察循环区分开;含五级验证阶梯与终止状态命名法,以及对 **50 个真实 loop 的公开语料**的人工编码分析。反驳"loop 取代 prompt"的强口号。与 #41/#43 同题 | [arxiv 2607.00038](https://arxiv.org/abs/2607.00038) | +| claude.com:用 skill 搭验证回路 | 产品文 | ⚪ | Claude Code 侧把"验证回路"沉淀成 skill 的官方做法,是 #66 把验证/代码评审移出系统提示词那一步的操作面;产品文体裁,2026-07-22 | [claude.com](https://claude.com/blog/building-verification-loops-in-claude-code-with-skills) | +| claude.com:Anthropic 如何跑大规模代码迁移 | 案例 | ⚪ | 官方口径的大规模迁移实践,与 #56 Bun 重写、#65 SQLite 蜂群构成"迁移/重写"三例对照;案例文体裁、无成本账本,2026-07-16 | [claude.com](https://claude.com/blog/ai-code-migration) | +| LangChain:Towards Automating Eval Engineering | 产品/方法 | ⚪ | Eval Engineering Skill 发布稿,但两处有料:**verifier 的第一版几乎从不是最终版**,要同时检查智能体轨迹与 **verifier 轨迹**;已观察到的四种作弊形态(过度引用无关来源骗满分 / 声称做过其实没做 / 利用暴露在环境里的答案材料 / 满足代理指标但没真正完成)。定调句"Evals are training data for agents",2026-07-22 | [langchain](https://www.langchain.com/blog/towards-automating-eval-engineering) | +| LangChain:Agents need their own computer | 概念/产品 | ⚪ | 隔离论证与 #50 重复度高,值得单取的是**注入防御那节**:沙箱遏制执行爆炸半径但**不消除提示词注入**,因为沙箱输出会被读回上下文;给出具名模式 **"non-agentic read"**——由非模型进程去沙箱取成品(文件、diff、报告),而不是把原始输出灌进智能体上下文;并直言"别指望靠提示模型去识别或忽略注入",2026-07-15 | [langchain](https://www.langchain.com/blog/agents-need-their-own-computer) | +| Harrison Chase:Own your intelligence | 战略随笔 | ⚪ | "拥有智能"三层(model / harness / context)+ 拥有经济性、质量与风险 + 复利闭环(每一次改动配一条 eval 固化);论点与 #3/#15/#21 高度重叠,唯一增量是结尾那份 **10 问自评清单**,可作 `prompts/` 模板引用,2026-07-25 | [langchain](https://www.langchain.com/blog/own-your-intelligence) | +| Faros AI:AI acceleration whiplash | 行业报告 | ⚪ | #63 与 #72 共同引用的那份遥测报告:评审评论数 +25%、评论长度 +22.7%、**+31.3% 的 PR 完全跳过评审**;每 PR 事故 +242.7%、月度事故 +57.9%、人均 bug +54%。相关性信号而非因果铁证,但它是"熄灯工厂会失败"论证的经验底座;同站另有一篇 harness engineering 五层框架科普(tool orchestration / verification loops / context & memory / guardrails / observability)+ 一组可从现有系统拉出的基线指标(每合并 PR 成本、智能体 PR 的 time-to-merge、评审速度对 PR 体积、人均算力开销) | [research](https://www.faros.ai/research/ai-acceleration-whiplash) / [blog](https://www.faros.ai/blog/harness-engineering) | +| StrongDM 熄灯工厂 + Dan Shapiro 五级 | 一手实验 / 分级 | ⚪ | #63/#64 讨论的"熄灯工厂"实物:StrongDM 公开运行的 lights-off factory(无人写码、无人读码,配 weather-report 更新页)与 Dan Shapiro 的"从辣味自动补全到软件工厂"五级分类。Dex 的批评是"没找到确定性的成效数据";作为反方样本长期跟踪 | [factory.strongdm.ai](https://factory.strongdm.ai) / [danshapiro.com](https://www.danshapiro.com/blog/2026/01/the-five-levels-from-spicy-autocomplete-to-the-software-factory/) | +| Ronacher:The Tower Keeps Rising | 随笔 | ⚪ | #62 作者同月另一篇:vibecoding 与"共享语言可能崩塌";哲学性论述、无一手数据,与 #42 The Coming Loop 同一关切的延伸,2026-07-13 | [lucumr](https://lucumr.pocoo.org/2026/7/13/the-tower-keeps-rising/) | > 三篇短 bliki / 随笔(Vibe Coding、Interrogatory LLM、Genie Tarpit)若日后要收,建议合并成一个「概念定义 / 上下文工程 pattern」小专题,别各开条目稀释精品信号。 diff --git a/scripts/check-consistency.sh b/scripts/check-consistency.sh index e090678..1597e4b 100755 --- a/scripts/check-consistency.sh +++ b/scripts/check-consistency.sh @@ -33,6 +33,18 @@ # same cell count as its header row (separator rows skipped). # C12 — entry field completeness: every numbered entry (### N.) in # references/articles.md must carry the **作者:** and **日期:** field lines. +# C13 — zero-figure claims must carry an audit trail. C10 can only falsify +# OVER-claiming: it fails when the body embeds fewer images than +# declared. A declared 0 is therefore unfalsifiable locally, because +# "embedded >= 0" always holds — so "sourceFigureCount: 0" goes green +# whether the translator actually checked the source or just wanted a +# passing build. That hole shipped a false 0 on 2026-07-27 (the source +# had 4 body figures; C10 said PASS). Since C10 is deliberately +# network-free it cannot re-count the source, so this guard demands +# provenance instead: any translation claiming 0 must also carry a +# sourceFigureAudit field containing a YYYY-MM-DD date, recording when +# and how the "no figures" claim was verified. null keeps SKIPping — +# it already self-declares as unaudited. # # Locale pitfall (do NOT reintroduce): bracket expressions containing multibyte # characters — e.g. [├└] or [^。] — silently break under LC_ALL=C with BSD grep: @@ -460,6 +472,43 @@ else echo " $(green PASS) — all $c12_total numbered entries carry 作者/日期" fi +# ─── C13 ─────────────────────────────────────────────────────────────── +# Zero-figure claims need provenance, because C10 structurally cannot check +# them (see the header note). Requiring a dated sourceFigureAudit turns an +# unfalsifiable machine claim into a human-auditable one: a reviewer can +# re-run the stated method against the stated date. +echo "[C13] zero-figure claims carry a dated sourceFigureAudit trail" +c13_zero=0 +c13_fail=0 +for tf in works/*-translation.md; do + declared=$(awk ' + NR==1 { if ($0 !~ /^---[ \t]*$/) exit; next } + /^---[ \t]*$/ { exit } + /^sourceFigureCount:/ { sub(/^sourceFigureCount:[ \t]*/, ""); sub(/[ \t]*$/, ""); print; exit } + ' "$tf") + [ "$declared" = "0" ] || continue + c13_zero=$((c13_zero + 1)) + audit=$(awk ' + NR==1 { if ($0 !~ /^---[ \t]*$/) exit; next } + /^---[ \t]*$/ { exit } + /^sourceFigureAudit:/ { sub(/^sourceFigureAudit:[ \t]*/, ""); print; exit } + ' "$tf") + # Strip surrounding quotes before judging emptiness. + audit=$(echo "$audit" | sed -E 's/^"(.*)"$/\1/; s/^'"'"'(.*)'"'"'$/\1/') + if [ -z "$audit" ]; then + echo " $(red FAIL) — $tf: declares sourceFigureCount 0 but has no sourceFigureAudit" + echo " fix: add sourceFigureAudit: \"YYYY-MM-DD 你怎么核对的 + 结论\"(C10 无法证伪 0,只能靠这条留痕)" + FAIL=1; c13_fail=$((c13_fail + 1)) + elif ! echo "$audit" | grep -qE '20[0-9]{2}-[0-9]{2}-[0-9]{2}'; then + echo " $(red FAIL) — $tf: sourceFigureAudit lacks a YYYY-MM-DD date" + echo " fix: 审计结论必须带核对日期,否则无法判断它是否已经过期" + FAIL=1; c13_fail=$((c13_fail + 1)) + fi +done +if [ "$c13_fail" -eq 0 ]; then + echo " $(green PASS) — $c13_zero zero-figure claim(s), all carrying a dated audit trail" +fi + # ─── Summary ─────────────────────────────────────────────────────────── echo if [ "$FAIL" -eq 0 ]; then diff --git a/works/AGENTS.md b/works/AGENTS.md index 7371a8a..6f5bcdd 100644 --- a/works/AGENTS.md +++ b/works/AGENTS.md @@ -23,6 +23,7 @@ sourcePublishedAt: # 原文日期(未知可为 null) translationMethod: # 翻译方式,如 "baoyu-translate skill (refined mode)" language: "zh-CN" sourceFigureCount: # 原文插图数(数字;null = 原文不可得、未审计。C10 据此校验正文嵌图数) +sourceFigureAudit: # 仅当 sourceFigureCount 为 0 时必填:核对留痕,值里必须含 YYYY-MM-DD(C13) ``` 可选字段(抓取流水线的溯源元数据):`sourceCoverImage`、`sourceSiteName`、`sourceSummary`、`summary`、`sourceLanguage`、`sourceAdapter`、`sourceCapturedAt`、`sourceConversionMethod`、`sourceKind`、`sourceRequestedUrl`、`translatedAt`、`translatorAudience`、`translatorStyle` 等。封面图字段统一用 `sourceCoverImage`(不用 `coverImage`)。 @@ -32,6 +33,14 @@ sourceFigureCount: # 原文插图数(数字;null = 原文不可得、未审 - 新收录译文的原文插图应下载到 `works/imgs//`,以本地相对路径嵌入(`imgs//<文件名>`,先例见 [claude-code-architecture-reverse-translation.md](claude-code-architecture-reverse-translation.md));存量条目的远程嵌图暂容忍,不强制回迁。 - 译文正文保留原文中的超链接,不得在翻译时丢弃。 - `scripts/check-consistency.sh` C10 会校验 `sourceFigureCount` 与正文嵌图数(嵌图数 ≥ 声明数),并对本地嵌图路径做文件存在性检查。 +- **声明 `sourceFigureCount: 0` 时另需 `sourceFigureAudit`(C13)。** 原因是 C10 只能证伪"多报"——它的判据是"嵌图数 < 声明数",所以 0 在本地**永远为真**,不管你有没有真去数过原文。2026-07-27 就有一篇靠这个洞蒙混过关(声明 0,原文实有 4 张配图)。审计值要写清**怎么核对的**并带上核对日期,例如: + + ```yaml + sourceFigureCount: 0 + sourceFigureAudit: "2026-07-27 抓原文 HTML 核对:
区内
计数均为 0" + ``` + + 判定口径:**只算正文配图。** 站点 logo、作者头像、页脚图标、推荐位缩略图、社交分享卡片、系列导航卡片都不计入——但如果你据此判 0,就把这个判断写进审计值里,别只写"没有图"。 | 文件 | 原文 | 来源 | |------|------|------| @@ -66,6 +75,8 @@ sourceFigureCount: # 原文插图数(数字;null = 原文不可得、未审 | [cursor-scaling-agents-translation.md](cursor-scaling-agents-translation.md) | Scaling long-running autonomous coding | Cursor / Wilson Lin | | [anthropic-how-we-contain-translation.md](anthropic-how-we-contain-translation.md) | How we contain Claude across products | Anthropic / Max McGuinness 等 | | [bun-in-rust-translation.md](bun-in-rust-translation.md) | Rewriting Bun in Rust | Bun Blog / Jarred Sumner | +| [ronacher-better-models-worse-tools-translation.md](ronacher-better-models-worse-tools-translation.md) | Better Models: Worse Tools | Armin Ronacher / 个人博客 | +| [anthropic-context-engineering-claude5-translation.md](anthropic-context-engineering-claude5-translation.md) | The new rules of context engineering for Claude 5 generation models | Anthropic / Claude · Thariq Shihipar | ### 中文转译 / 二手资料 diff --git a/works/anthropic-c-compiler-translation.md b/works/anthropic-c-compiler-translation.md index aa437be..fb4f164 100644 --- a/works/anthropic-c-compiler-translation.md +++ b/works/anthropic-c-compiler-translation.md @@ -10,6 +10,7 @@ sourceLanguage: "en" language: "zh-CN" translationMethod: "人工整理逐段翻译(cloud agent,对照原文全文;原文无正文插图,代码块保留)" sourceFigureCount: 0 +sourceFigureAudit: "2026-07-27 抓原文 HTML 并对照渲染正文核对:正文无静态插图;页面唯一的
是客户端渲染的 demo 视频嵌入,不计入插图数" --- # 用一支并行 Claude 团队构建 C 编译器 diff --git a/works/anthropic-context-engineering-claude5-translation.md b/works/anthropic-context-engineering-claude5-translation.md new file mode 100644 index 0000000..21430c3 --- /dev/null +++ b/works/anthropic-context-engineering-claude5-translation.md @@ -0,0 +1,151 @@ +--- +title: "Claude 5 世代模型的上下文工程新规则(删掉 80% 系统提示词)" +sourceTitle: "The new rules of context engineering for Claude 5 generation models" +sourceUrl: "https://claude.com/blog/the-new-rules-of-context-engineering-for-claude-5-generation-models" +sourceAuthor: "Thariq Shihipar(Anthropic 技术团队成员)" +sourcePublishedAt: "2026-07-24" +sourceSiteName: "Claude by Anthropic" +summary: "Anthropic 为 Claude Opus 5 / Fable 5 这一代模型删掉了 Claude Code 系统提示词的 80% 以上,编码评测上没有可测量的损失。文章给出六组 then/now 对照:从给规则到让模型用判断力、从给示例到设计接口、从全部前置到渐进式披露、从重复自己到简单工具描述、从 CLAUDE.md 记忆到自动记忆、从简单 spec 到丰富引用(测试套件、别的代码库里的函数、rubric 都算 spec)。这是'harness 瘦身'主张第一次有官方的量化落地。" +sourceLanguage: "en" +language: "zh-CN" +translationMethod: "人工整理逐段翻译(cloud agent,对照原文全文)" +sourceFigureCount: 4 +--- + +# Claude 5 世代模型的上下文工程新规则 + +> 我们删掉了 Claude Code 系统提示词的 80% 以上,只为了更先进的模型。以及,如何把我们学到的东西用到你自己的上下文工程里——不论是在 Claude Code 里,还是在你自己的智能体上。 + +我此前写过[如何最好地提示新一代 Claude 5 模型](https://claude.com/blog/a-field-guide-to-claude-fable-finding-your-unknowns)、以及如何与它们迭代着协作、把你想造的东西摸清楚。 + +但当你给 Claude 发一条消息时,**提示词只是它拿到的上下文里很小的一部分**。你的上下文中有很大一块是从系统提示词、Skills、CLAUDE.md 文件、记忆以及其他来源组装起来的。我们把这件事叫做[上下文工程](https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents),它对你在使用 Claude Code、或构建自己的智能体时得到的结果影响很大。 + +和提示词不同,上下文会被跨很多次请求通用地使用,所以它没法写得那么具体。**当你并不知道用户的提示词会是什么的时候,怎么为 Claude 写这些通用的提示与指引?** + +随着 Claude 自身能力的演进,这件事会变得出人意料地困难。最近我们注意到,为最新一代 Claude 模型写提示词的方式发生了一次大跳变:**对 Claude Opus 5、Claude Fable 5 这样的模型,我们删掉了 Claude Code 系统提示词的 80% 以上,而在我们的编码评测上没有可测量的损失。** + +下面是我们关于给这一新类模型写提示词学到的东西,以及你可以怎样用它来更新自己的上下文工程。我们已经把这些最佳实践放进了 `claude doctor`;在 Claude Code 里用 `/doctor` 命令,可以给你的 skills 和 CLAUDE.md 文件"重新量体裁衣"。 + +## 给 Claude 松绑 + +总体上,我们发现**我们一直在过度约束 Claude**——既通过系统提示词,也通过 CLAUDE.md 文件和 skills。 + +举个例子,当我们读自己内部使用 Claude Code 的转录时,会在同一个请求里看到好几条互相冲突的消息,比如"适当留下文档"与作为系统提示词的"不要添加注释"——系统提示词、skills 与用户请求彼此打架。 + +一般来说 Claude 能读懂用户意图并给出正确答案,但**Claude 必须先更仔细地想清楚这些重叠且矛盾的消息,才能决定做什么**。 + +![组装好的上下文:系统提示词里写着"适当留下文档",skill 里写着"不要添加注释",用户请求又说"就照旧的那个做"——Claude 读到的是同一份上下文,必须自己把这些调和掉](imgs/anthropic-context-engineering-claude5/fig-1.png) + +> 一份上下文;Claude 会读完全部内容,并且必须自己把它们调和起来。 +> +> \* 图中为示意性例子,并非任何真实提示词、skill 或用户请求的逐字引用。 + +而且,这些约束当初是为了避免最坏情况才需要的;此后我们发现,其中很多可以删掉,**让模型改用周围的上下文与自己的判断力**。 + +另外,Claude Code 现在有多得多的工具。Claude 过去依赖 CLAUDE.md 作为记忆、信息与指引的来源;现在我们有了记忆(memory)、artifacts 和 skills,Claude 可以用它们创造出新的方式来跨会话加载与共享上下文。 + +## 过去与现在 + +有一批过去的上下文工程最佳实践,如今已经变成了迷思,包括: + +![六组对照:Give Claude Rules → Give Claude Judgement;Give Claude Examples → Design Interfaces;Put it all upfront → Use Progressive Disclosure;Repeat Yourself → Simple Tool Descriptions;Memory in Claude.MDs → Auto-memory;Simple Specs → Rich References](imgs/anthropic-context-engineering-claude5/fig-2.png) + +> 文中各小节标题,按出现顺序排列。 + +### 过去:给 Claude 规则 → 现在:让 Claude 用判断力 + +我们最早推出 Claude Code 时,必须确保 Claude 避开最坏情况,比如删文件。这意味着我们会给出特别强硬的指引,哪怕它并不总是对的。例如系统提示词里我们曾经写: + +> 在代码中:默认不写注释。绝不要写多段 docstring 或多行注释块——最多一行短注释。不要创建规划、决策或分析文档,除非用户要求——从对话上下文工作,而不是从中间文件工作。 + +但对某一部分提示词来说,这条指引是错的。以文档为例,用户可能有自己的偏好,或者特别复杂的某些代码段确实需要多行注释块。 + +不过,如果对更老的模型不加这些护栏,Claude 写出来的注释在很多情况下都会是错的,我们只能接受这个取舍。**而更新的模型判断力更好,不需要显式规则也能把这类决定处理好。** + +新的系统提示词里我们写的是:**写出读起来像周围代码的代码:匹配它的注释密度、命名与惯用法。** + +### 过去:给 Claude 示例 → 现在:设计接口 + +关于工具使用,过去的第一条规则是给 Claude 示例,告诉它怎么用。在我们最新的模型上,我们发现**给示例反而会把它们限制在某个特定的探索空间里**。 + +与其用示例,不如更多地思考你的工具、脚本与文件的**设计**——Claude 有哪些参数可用,这些参数怎样才能更有表达力? + +比如在 Todo 工具的例子里,光是把 status 列成 pending、in_progress、completed 三者之间的枚举,就已经在向 Claude 暗示该怎么用它;而"保持只有一项处于 in_progress"这条指令,则界定了我们期待的行为。 + +![左侧"Before"是约 9,100 字符的旧版描述,塞满何时使用的清单与示范例子;右侧"TodoWrite"是取代它的短接口:一句话说明 + status 枚举 pending/in_progress/completed + 一条"同一时间只允许一项 in_progress"](imgs/anthropic-context-engineering-claude5/fig-3.png) + +> 旧版 TodoWrite 描述,与取代它的那个短接口的对比。 + +### 过去:全部前置 → 现在:渐进式披露 + +因为 Claude Code 聚焦于编码,我们的系统提示词里包含了关于如何做代码评审与验证的详细信息。这些信息**并不总是需要,但需要的时候至关重要**。 + +此后,Claude Code 变得非常擅长使用渐进式披露——在正确的时间加载正确的上下文。举例来说,我们把验证与代码评审移进了各自独立的 skill,Claude Code 可以选择性地调用它们。 + +但渐进式披露不只用于 skills,我们也把它用在**工具**上。我们的一部分工具是"延迟加载"的,意味着智能体必须先用 ToolSearch 搜索到它们的完整定义才能使用。这让我们可以拥有更多工具(比如 Task 系列工具)而**不在需要之前占用上下文**。 + +同样的做法也适用于你自己的 CLAUDE.md 与 Skill.md 文件。一个常见的迷思是:你想把这些文件做成一个中央仓库,把所有可能遇到的实践统统写进去,因为你觉得 Claude 否则就找不到。相反,[考虑做一棵可以在正确时间被加载的文件树](https://claude.com/blog/a-harness-for-every-task-dynamic-workflows-in-claude-code)。 + +### 过去:重复自己 → 现在:简单的工具描述 + +更早的 Claude 模型有时需要重复的指令,或者更倾向于听上下文窗口末尾而非开头的话。这导致我们的系统提示词有时既在正文里提到工具,又在工具描述里写指令。 + +我们发现可以删掉这些重复的示例,**把"怎么用这个工具"的指令放进工具描述,而不是系统提示词**。 + +### 过去:用 CLAUDE.md 存记忆 → 现在:自动记忆 + +我们过去鼓励用户用 `#` 热键把东西存进 Claude 的记忆,也就是自动写进他们的 CLAUDE.md。现在,**Claude 会自动保存与这项工作、与你相关的记忆**。 + +### 过去:简单的 spec → 现在:丰富的引用 + +在 plan 模式里,Claude Code 一直高度依赖装着计划的 markdown 文件。把这些计划存成文件,有助于 Claude 在需要时回看。另一个类似的最佳实践,是把 spec 存在代码库里,供 Claude 在跨越较长周期的项目中随时参考。 + +但我们发现,**Claude 能处理的引用可以复杂得多**。除了简单的 markdown 文件,Claude 还可以引用由我们新的 artifacts 功能创建的 HTML artifact。 + +你也可以**以代码的形式**给 Claude 引用。**一份 spec 也可以是一套详细的测试套件,或者另一个代码库里、Claude 可能要移植过来的一个函数。** + +**Rubric(评分表)是另一种形式的引用。** Rubric 让 Claude 可以借助[动态工作流](https://claude.com/blog/a-harness-for-every-task-dynamic-workflows-in-claude-code)、带着这些 rubric 起若干验证者智能体,去尝试核对你在某个领域里的品味(比如:什么才算好的 API 设计)。 + +## 把它用到你自己的上下文上 + +把这些串起来,当你组装自己的上下文时,它应该是什么样子? + +### 系统提示词 + +系统提示词与产品语境强绑定。它告诉 Claude 自己正运行在什么产品里、正在做什么。对 Claude Code 来说,你多半永远不会去改它;**但如果你在构建自己的 agent harness,这里正是你应该花大量时间的地方。** + +### CLAUDE.md + +保持你的 CLAUDE.md **轻量**,简要描述你的仓库是干什么的,**但把大部分 token 花在代码库内部的 gotcha 上**。比如,你可能把类型统一组织在一个巨大的文件里、其他地方一概没有。避免陈述那些 Claude 看一眼文件系统或仓库就该知道的"显而易见的事"。 + +**大量使用渐进式披露**:比如你有若干条独特的"如何验证你的工作"的指令,那就做一个验证 skill,并从 CLAUDE.md 里引用它。 + +### Skills + +把 skills 想成**轻量的指引**,让 Claude 在需要时找得到信息。避免把它们写得过度约束,除非是在极其重要的领域。 + +对于很长的 skill,尽量多用渐进式披露——拆成多个文件、分开放。 + +**skills 最好承载的是你、你的团队或你的产品所特有的观点、知识或最佳实践。** + +### 引用 + +你可以用 `@` 提及文件,把它们作为引用带进来。引用让 Claude 能参考关于当前计划的深入信息。 + +![上下文窗口的分层:Your prompt 只是其中一片,其余依次是 References(@ 提及的文件、spec、mockup、代码库、artifacts)、System prompt、Claude.MDs、Skills、Memory](imgs/anthropic-context-engineering-claude5/fig-4.png) + +> 上下文窗口:你的提示词只是其中一片(图中各块大小仅为示意)。 + +这可能是 spec 文件、mockup,甚至整个代码库。**一般来说你应该优先选择以代码形式存在的文件**,因为它用一种 Claude 非常熟悉的语言,提供了清晰、高保真的指令。举例来说,**一份设计的 HTML mockup,通常会比对这个设计的一段描述或一张截图产生更好的结果。** + +## 试着做减法 + +在你的系统提示词、skills 与 CLAUDE.md 文件上,你可能需要像我们一样做减法。我们推出了一个新命令 `claude doctor`,它也能帮你自动做这件事。关于如何为更先进的模型写提示词的更多细节,可以看我们的 [Fable field guide](https://claude.com/blog/a-field-guide-to-claude-fable-finding-your-unknowns)。 + +--- + +本文作者:Thariq Shihipar,Anthropic 技术团队成员。 + +--- + +> 译注:本文是本仓库 [references/articles.md](../references/articles.md) 中 #4(Anthropic《长时应用开发的 Harness 设计》提出的"harness 瘦身")与 #31(Osmani 的"约束加减法纪律")第一次拿到官方量化落地。同期 Cursor 在 #60 里描述了同向的动作——2024 年末为弥补模型能力而堆的前馈护栏"大部分早就没了";LangChain 在 #69 里则给出了做减法所需的裁决装置(用基准决定要不要删掉 todo-list middleware 与精简系统提示词)。三家独立收敛,值得放在一起读。 diff --git a/works/fowler-encoding-team-standards-translation.md b/works/fowler-encoding-team-standards-translation.md index 1d5360e..637461a 100644 --- a/works/fowler-encoding-team-standards-translation.md +++ b/works/fowler-encoding-team-standards-translation.md @@ -7,6 +7,7 @@ sourcePublishedAt: "2026-03-31" translationMethod: "baoyu-translate skill (refined mode)" language: "zh-CN" sourceFigureCount: 0 +sourceFigureAudit: "2026-07-27 抓原文 HTML 核对:正文无插图,全页图片仅站点 logo、作者头像、Thoughtworks 页脚标" --- # 编码团队标准 diff --git a/works/fowler-feedback-flywheel-translation.md b/works/fowler-feedback-flywheel-translation.md index 13ed577..e70733f 100644 --- a/works/fowler-feedback-flywheel-translation.md +++ b/works/fowler-feedback-flywheel-translation.md @@ -7,6 +7,7 @@ sourcePublishedAt: "2026-04-08" translationMethod: "baoyu-translate skill (refined mode)" language: "zh-CN" sourceFigureCount: 0 +sourceFigureAudit: "2026-07-27 抓原文 HTML 核对:正文无插图,全页图片仅站点 logo、作者头像、Thoughtworks 页脚标" --- # 反馈飞轮 diff --git a/works/fowler-harness-engineering-memo-translation.md b/works/fowler-harness-engineering-memo-translation.md index eb643b9..490d7d6 100644 --- a/works/fowler-harness-engineering-memo-translation.md +++ b/works/fowler-harness-engineering-memo-translation.md @@ -7,6 +7,7 @@ sourcePublishedAt: "2026-02-17" translationMethod: "baoyu-translate skill" language: "zh-CN" sourceFigureCount: 0 +sourceFigureAudit: "2026-07-27 抓原文 HTML 核对:正文无插图;donkey-card.png 出现两次,分别在文章头部卡片与页脚系列导航,属站点 chrome" --- # Harness Engineering —— 初步思考 diff --git a/works/github-agent-driven-development-translation.md b/works/github-agent-driven-development-translation.md index 9d967a6..63d1c98 100644 --- a/works/github-agent-driven-development-translation.md +++ b/works/github-agent-driven-development-translation.md @@ -14,6 +14,7 @@ language: "zh-CN" translationMethod: "baoyu-translate skill" translatedAt: "2026-04-14" sourceFigureCount: 0 +sourceFigureAudit: "2026-07-27 抓原文 HTML 核对:全页 16 张图片均为推荐位缩略图 / 封面 / 作者头像 / 页脚图标,
与 wp-block-image 计数均为 0" --- # Copilot 应用科学团队的智能体驱动开发 diff --git a/works/imgs/anthropic-context-engineering-claude5/fig-1.png b/works/imgs/anthropic-context-engineering-claude5/fig-1.png new file mode 100644 index 0000000..cb76091 Binary files /dev/null and b/works/imgs/anthropic-context-engineering-claude5/fig-1.png differ diff --git a/works/imgs/anthropic-context-engineering-claude5/fig-2.png b/works/imgs/anthropic-context-engineering-claude5/fig-2.png new file mode 100644 index 0000000..8b963af Binary files /dev/null and b/works/imgs/anthropic-context-engineering-claude5/fig-2.png differ diff --git a/works/imgs/anthropic-context-engineering-claude5/fig-3.png b/works/imgs/anthropic-context-engineering-claude5/fig-3.png new file mode 100644 index 0000000..e075294 Binary files /dev/null and b/works/imgs/anthropic-context-engineering-claude5/fig-3.png differ diff --git a/works/imgs/anthropic-context-engineering-claude5/fig-4.png b/works/imgs/anthropic-context-engineering-claude5/fig-4.png new file mode 100644 index 0000000..a05bd12 Binary files /dev/null and b/works/imgs/anthropic-context-engineering-claude5/fig-4.png differ diff --git a/works/maganti-eight-years-building-ai-translation.md b/works/maganti-eight-years-building-ai-translation.md index 1bc8525..ea9e504 100644 --- a/works/maganti-eight-years-building-ai-translation.md +++ b/works/maganti-eight-years-building-ai-translation.md @@ -26,6 +26,7 @@ summary: |- language: "zh-CN" translationMethod: "baoyu-translate skill" sourceFigureCount: 0 +sourceFigureAudit: "2026-07-27 抓原文 HTML 核对:
区内
计数均为 0" --- # 渴望了八年,用 AI 三个月造出来 diff --git a/works/osmani-loop-engineering-translation.md b/works/osmani-loop-engineering-translation.md index f38f76d..11f47fd 100644 --- a/works/osmani-loop-engineering-translation.md +++ b/works/osmani-loop-engineering-translation.md @@ -10,6 +10,7 @@ sourceLanguage: "en" language: "zh-CN" translationMethod: "人工整理逐段翻译(cloud agent,对照原文全文)" sourceFigureCount: 0 +sourceFigureAudit: "2026-07-27 抓原文 HTML 核对:
区内
计数均为 0" --- # 循环工程(Loop Engineering) diff --git a/works/ronacher-better-models-worse-tools-translation.md b/works/ronacher-better-models-worse-tools-translation.md new file mode 100644 index 0000000..2965e21 --- /dev/null +++ b/works/ronacher-better-models-worse-tools-translation.md @@ -0,0 +1,167 @@ +--- +title: "更好的模型:更差的工具(Better Models: Worse Tools)" +sourceTitle: "Better Models: Worse Tools" +sourceUrl: "https://lucumr.pocoo.org/2026/7/4/better-models-worse-tools/" +sourceAuthor: "Armin Ronacher(Flask / Jinja 作者、Sentry 创始人,编码智能体 Pi 开发者)" +sourcePublishedAt: "2026-07-04" +sourceSiteName: "Armin Ronacher's Thoughts and Writings" +summary: "Anthropic 的新模型(Opus 4.8、Sonnet 5)在非 Claude Code 形状的编辑工具上,比它们的老版本更容易发出畸形的工具调用——在正确的 oldText/newText 之后凭空追加发明的键。Ronacher 追踪到的原因不是模型变笨,而是后训练:Claude Code 客户端会静默修复各种脏调用,在这样一个宽容环境里做 RL,模型学到的是'多加个字段无所谓'。结论是工具 schema 不是中立契约,越训得好的模型对主导 harness 的先验越强、对替代 schema 的反抗越凶。" +sourceLanguage: "en" +language: "zh-CN" +translationMethod: "人工整理逐段翻译(cloud agent,对照原文全文)" +sourceFigureCount: 0 +sourceFigureAudit: "2026-07-27 对照原文 Markdown 源(同 URL 的 .md 版)逐段核对:全文只有代码块,无任何图片" +--- + +# 更好的模型:更差的工具 + +过去两天,[Pi 上一个非常古怪的问题](https://github.com/earendil-works/pi/issues/6278)把我拽进了一个兔子洞。简短版本是:新版 Claude 模型有时会带着**凭空发明的额外字段**去调用 Pi 的编辑工具,位置在嵌套的 `edits[]` 数组里。而且不是 Haiku 或者什么小模型,是 Opus 4.8。编辑内容本身通常是对的,但参数与 schema 不匹配——模型编出了不存在的键,于是 Pi 拒绝这次工具调用并要求重试。 + +单是这件事并不算太意外,模型偶尔就是会发出畸形的工具调用,小模型尤其如此。让我吃惊的是**这个问题在越新的 Anthropic 模型上越严重**:Opus 4.8 和 Sonnet 5 都有,更老的那些一个都没有。换句话说,这个家族里的 SOTA 模型,在这个特定的工具 schema 上,比它们的兄长更差。 + +顺便说一句 Fable:我故意没测它,因为不确定他们跑的分类器会不会把我悄悄降级到 Opus。 + +## 工具调用就是文本 + +如果你没怎么钻研过 LLM 工具调用的内部机制,需要理解的关键点是:**工具调用没有魔法,它用的是相当粗糙的带内信令。** 模型收到一份转录、一段系统提示词和一张可用工具清单。服务端把这些嚼成一个带特殊标记 token 的大提示词。因为模型是在这种格式的样例上训练与强化过的,所以在生成过程中的某个时刻,它吐出一段被 API 或客户端解读为"用这些参数调用这个工具"的东西。 + +对一个文件编辑工具来说,预期的调用载荷可能长这样: + +```json +{ + "path": "some/file.py", + "edits": [ + { + "oldText": "text to replace", + "newText": "replacement text" + } + ] +} +``` + +harness 随后校验参数、执行编辑、把结果喂回模型。如果校验失败,模型会看到一个错误,通常再试一次。 + +Anthropic 的模型具体怎么做这层格式化并不公开,但有人套出过 "ANTML" 标记,而这些标记有时也会漏进公开材料里。据我所知,上面那次调用从模型里序列化出来大致是这样: + +```xml + + + some/file.py + +[ + { + "oldText": "text to replace", + "newText": "replacement text" + } +] + + + +``` + +这里有一点值得注意:这东西**看起来像 XML,但并不真的是 XML**。它只是他们觉得便于分词与训练的一种形式。另一点是:**基础的顶层字符串参数是内联出现的,而对象数组是通过 JSON 序列化实现的。** 虽然我不完全确定内部就是这么工作的,但有若干迹象表明这个描述不算太离谱。这一点后面会变得重要。 + +要让模型产出这样一个结构,有两种非常不同的路子: + +1. 你可以要求模型产出符合某个 schema 的合法 JSON,然后事后校验。 +2. 你可以约束采样器,让不合法的 JSON、甚至不合法的 schema 形状**根本采样不出来**。 + +第二种就是人们常说的语法感知(grammar-aware)解码或受限解码:采样器把会违反语法的 token 屏蔽掉。如果模型此刻正在一个 JSON 对象内部,而 schema 规定只允许 `oldText` 和 `newText`,采样器就可以阻止它吐出 `"in_file"` 或 `"type"`。语法感知解码既能用来约束"必须是语法合法的 JSON",也能用来强制特定的枚举值或键名。 + +**在没有任何约束的情况下,模型只是在遵循一个学来的惯例。** + +## 故障 + +Pi 的编辑工具支持在一次调用里做多处精确字符串替换,这就是参数里有 `edits` 数组的原因。在失败的案例里,模型产出的条目长这样: + +```json +{ + "oldText": "...", + "newText": "...", + "requireUnique": true +} +``` + +或者这样: + +```json +{ + "oldText": "...", + "newText": "...", + "oldText2": "", + "newText2": "" +} +``` + +在反复试验中,我见到了一整个动物园的发明出来的尾随键:`type`、`id`、`kind`、`unique`、`requireUnique`、`matchCase`、`in_file`、`forceMatchCount`、`children`、`notes`、`cost`、`oldText2`、`newText2`、`oldText_2`、`newText_2`,甚至还有一个出现在 edit 对象内部的 `event.0.additionalProperties`。 + +最让人恼火的地方在于:**我检查过的那些非法调用里,真正的 `oldText` 与 `newText` 载荷是逐字节正确的。** 模型事实上已经产出了正确的调用,然后在对象末尾加了些废话。 + +这个故障还高度依赖上下文。像"编辑这个文件"这样一句全新的单轮提示词,在我这儿完全复现不出来;而一段智能体式的历史——模型读过文件、诊断过问题,然后组装一次多行编辑——就能复现。更烦人的是,并不是所有转录都会出现这个行为,事实上我得靠 [Petr Baudis](https://github.com/pasky) 的转录才复现得出来!在那位用户的会话里,继续会话会让 Opus 4.8 有大约 **20%** 的失败率。**把历史中的 thinking 块剥掉,失败率减半;打开严格(strict)工具调用,在我这几轮里直接归零。** + +## 为什么在变差 + +我最强的假说是:这不是随机的劣化,而是**训练产物**。 + +更老的 Anthropic 模型训练时,也是在一些工具上训的(其中一些有文档)。但那时的训练还没有一个像 Claude Code 这样"已经发给用户的 harness"作为明确目标。现代 Anthropic 模型很可能不同:它们的后训练里包含 Claude Code,或者一个长得非常像它的 harness。模型学到了在那个环境里一次成功的工具调用长什么样,**同时也学到了那个环境会容忍哪些错误**。 + +Claude Code 自己的工具相对扁平。它常规的编辑工具不是 Pi 那种嵌套的 `edits[]` 形状,而更接近 `file_path`、`old_string`、`new_string` 加一个可选标志(`replace_all`)。看看 Claude Code 的客户端很有启发:里面有针对畸形工具使用的重试路径、参数别名、类型强制转换、Unicode 修复,以及**对未知键的过滤**。换句话说,Anthropic 自己的客户端似乎预期并接受相当程度的脏数据,而且**多半是静默修复的**。 + +如果强化学习是在这样一个 harness(或它的仿真)里发生的,那么**略微畸形的工具调用照样能完成任务、照样能拿到奖励**。harness 把错误完全吸收掉了,于是几乎没有任何梯度去反对"编一个别名""加一个多余字段""用一个相近的参数名"。 + +更糟的是,模型可能变得**极度适配 Claude Code 那个规范的编辑工具形状**。另一个 harness 可以给出语义意图相同、但 schema 不同的工具,而这样的工具会越来越分布外。**训得更好的那个模型,可能反而跟你抗得更凶,因为它的先验更强。** + +这算不上太意外,但相比几个月前确实是个变化。Opus 4.5 刚发布时,它对别的编辑工具适应得非常好。当时我还相当确信我们走在一条好路上:只要指令写得好,模型会越来越愿意去适应任何形状的工具。 + +现在我对我们正走的这条轨道有点担心。**替代性的工具 schema 可能不只是"不熟悉",它们还可能被后训练隐性地惩罚了**——因为那个后训练在为一套特定的、宽容的工具生态做优化。而**那套生态是没有文档的**。虽然有一个[有文档的文本编辑器工具](https://platform.claude.com/docs/en/agents-and-tools/tool-use/text-editor-tool),但你会发现 Claude Code 事实上并不遵循那个格式。Claude Code 内部到底在做什么(一个闭源 harness)对你是隐藏的。 + +## 脏数据 harness + +Claude Code 显然是闭源的,但我们可以看压缩后的代码,大致了解它做了什么。老实说,它对进来的数据非常宽容。 + +首先,Claude Code 会检查模型的可见文本里有没有漏出来的 `assistant<|channel|>commentary to=functions.get_weather +<|constrain|>json<|message|>{"location":"San Francisco"}<|call|> +``` + +关键位是 `<|constrain|>json`。**模型可以在带内声明这段消息体是 JSON,推理栈就能利用这个边界,为工具调用的正文切换到 JSON 受限采样。** 大概 Anthropic 的模型里也发生着一部分类似的事,至少在 `strict` 模式下我猜是这样。 + +harmony 里的这个标记帮助采样器判断何时需要用特定语法来采样,而且因为它是转录的一部分,这件事做起来相当容易。对于托管的 GPT 模型,还有一个选项是为自定义工具提供 [LARK](https://lark-parser.readthedocs.io/en/latest/grammar.html) 语法。 + +Anthropic 看起来与此不同,不过也许不是完全不同。如果对象数组确实像它表现的那样被表示为 JSON,那么模型就得在工具参数**内部**写 JSON。**这里大概正在发生某种基本的语法受限采样,这也许能部分解释那些多出来的键。** 对于一个嵌套的数组参数,这段 JSON 里包含着**被转义的多行文件内容、塞在字符串字面量里、又塞在一个标签里**。那些意料之外的、编造出来的键,恰好出现在这项任务熵最高的那一点:**在收尾一个长达数百 token 的转义 `newText` 字符串之后,模型必须决定下一个是 `}` 还是 `, "..."`。** + +Opus 4.8 和 Sonnet 5 似乎对"一次编辑工具调用应该长什么样"抱有强得多的先验,而那个先验看起来就是 Claude Code 的编辑 schema:一对扁平的 old/new 字符串,外加可选的 `replace_all` 标志。我的猜测是,Opus 学到了"编辑操作可以多一个可选字段",但在 Pi 那种嵌套的 `oldText` / `newText` 形状下,它**没有一个受过训练的名字可用**,于是每次现场采样一个听起来合理的名字——这也解释了为什么这些失败产出的是几十个随机键,而不是一个稳定的别名。 + +既然 Anthropic 的 `strict` 模式看起来能修好这个问题,我推测服务端会拒绝采样任何不被 JSON schema 结构允许的键。这同时也解释了为什么开启严格模式时,他们要对工具定义的复杂度设限。 + +到目前为止,我测过的 Codex 模型没有表现出这类退化。除了还没拿到访问权限的 5.6 之外,我测了所有能拿到的版本。 + +## 这对 harness 意味着什么 + +令人不适的教训是:**工具 schema 不是中立的**,至少在 Anthropic 的模型上不是。我们喜欢假装 schema 是一份抽象契约、模型是一个会遵守它的通用推理器,但对某些工具而言,这可能已经不再成立。 + +工具 schema 位于分布中的某处:有些形状接近模型后训练时见过的东西,有些则相距甚远。有些对厂商隐藏的编码方式来说很容易(比如 ANTML 里的顶层属性),有些则要求模型在长长的多行字符串之后、在嵌套数组里写出大段转义 JSON 对象。**模型可以聪明到理解这个 schema,同时依然不擅长在压力下精确采样出它的形状。** + +如果这类模型行为持续下去,我很好奇它对 harness 意味着什么。显然,你可以在 Anthropic 那边打开 `strict` 采样,问题应该就消失了。但另一方面,模型有这种行为本身,就显示了强化学习对它们的影响有多大。**如果你想要模型的最佳性能,跟这个先验硬碰硬多半是徒劳的。** + +眼下的现实是,Claude Code 不开源,我们也无从知道他们的 RL 环境里到底在做什么。**我们不能假设"在 Claude Code 里训出来的行为"会干净地迁移到你的工具上,除非你的工具与它高度相似。后训练越是集中在某一个主导 harness 内部,其他每一个 harness 就越是要继承它的怪癖。** + +我过去对严格的语法受限工具调用更持怀疑态度,因为受限解码可能带来质量上的取舍。我仍然认为这在一般意义上可能成立,但**这个 bug 显著改变了我的先验**。如果最新的模型在解决任务上变得更强、同时在忠实地吐出替代工具 schema 上变得更弱,那么 **harness 就必须在别的地方拿到更硬的保证**。 + +如果你想了解更多,或者想讨论,可以读一读 [Pi 追踪器上的这个 issue](https://github.com/earendil-works/pi/issues/6278)。 + +--- + +> 译注:本文与本仓库 [references/articles.md](../references/articles.md) 中的 #60(Cursor《持续改进我们的 agent harness》)互为正反面——Cursor 的对策正是"给每个模型配它训练时用的工具格式"(OpenAI 走 patch 格式、Anthropic 走字符串替换),因为"给它不熟悉的那个会多花推理 token 并产生更多错误"。文中对 Claude Code 客户端内部行为的描述,可与 #30(Claude Code 源码泄漏事件)对照阅读。 diff --git a/works/ronacher-coming-loop-translation.md b/works/ronacher-coming-loop-translation.md index c620c7f..085ecd7 100644 --- a/works/ronacher-coming-loop-translation.md +++ b/works/ronacher-coming-loop-translation.md @@ -10,6 +10,7 @@ sourceLanguage: "en" language: "zh-CN" translationMethod: "人工整理逐段翻译(cloud agent,对照原文全文)" sourceFigureCount: 0 +sourceFigureAudit: "2026-07-27 抓原文 HTML 核对:
计数均为 0" --- # 正在到来的循环