import-world-from-book
它做的事很实在。把小说章节整理成 结构化世界库, 交付的是 `BOOK.md`、`WORLD.md`、`glossary.md`、角色地点势力档案和分批剧情摘要。
这份报告想讲清一件事。skill 不是靠感觉越改越好,而是靠一条能复跑、能留痕、能回滚的流程,才会真的进化。两个真实案例已经把这件事跑出来了。
先看对象,再看评测,再看 keep。顺序反了,这页就全是黑话。
这份复盘最容易让人看懵的地方,是 keep 和 discard 说了很多,对象却还没介绍清楚。先把一句话版本放在前面。
它做的事很实在。把小说章节整理成 结构化世界库, 交付的是 `BOOK.md`、`WORLD.md`、`glossary.md`、角色地点势力档案和分批剧情摘要。
它也不是聊天题,而是 本地剪藏题。 把 URL 落成 Markdown、本地化图片、可选 `raw.html`,或者只先算出将要落到哪个目录。
eval 的意思是 固定好例子、坏例子和 validator, 再去看 skill 会不会抓住该抓住的问题,会不会把假成功挡下来。
候选版本只有两种理由能 keep。 分数真的更高, 或者分数相同但 明显更简单、更稳。 只是多写一点说明,不算进化。
普通 prompt 调整常常是想到一个点就试一个点。autoresearch 不这么干。它先把合同和评测钉住,再允许候选改法去竞争。最后能不能 keep,不由候选自己说了算。
这套闭环看着长,核心其实很朴素。改的人别判,判的人别改,外层循环也别绑死在某个会话上。
不是让模型自己瞎试,而是把 skill 优化变成一条有边界、有证据、有记忆、有人能复查的工程链路。
supervise_autoresearch_loop.py 只做一件事,盯住控制器别悄悄死掉。
prepare → mutate → evaluate → decide → post_decision → capture_after → finalize。所以每个结果都能追溯到具体改动和具体判定。
direction_fingerprint、cluster cooldown 和 blocked fingerprints 一起工作。同一个 keep checkpoint 之后,旧坑不会换个说法再撞一次。
它很适合当起手式,因为输入、输出和对照面都很具体。原书在,章节边界在,坏样本也在,所以真假完成很好分。
它不是让模型随便聊设定,而是把 `raw_text/` 章节目录整理成一个长期可维护的世界库。最终要落出来的是真文件,比如 `BOOK.md`、`WORLD.md`、`glossary.md`,还有角色、地点、势力和剧情摘要。
WORLD.md交付物是结构化世界库,不是一段漂亮但不可复查的总结。
eval 看的不是文风,而是这个 skill 的审计规则会不会误判完成。原书就是金标准,故意做错的世界库就是坏样本,所以能稳定测出 尾章错位、完成声明造假、交付状态不一致、旧批次污染、断链和占位符 这些问题。
gold eval原书和坏样本都很具体,所以它适合做成一套固定的真假完成判定题。
它修的不是文风,而是 假完成。 原来平铺的收尾清单太松,很多完成声明可以靠侧面推断混过去。`exp-005` 把它拆成 `Preflight`、`Final Audit`、`Completion` 三道门,强制要求 completion 相关结论拿出证据。
因为证据还不够硬。`exp-011` 继续收紧 `Completion` 门,把 `BOOK.md` 一致性、`processing_summary.md` 对齐、断链、占位符和尾章原文引用都升成硬检查。重点不是看起来像完成,而是 必须证明自己完成。
因为后面的轮次没再拿出更强证据。像 `exp-014`、`exp-015` 这类轮次,账本直接是 `10 → 10`,而且写了 `quick pass count stayed flat`。平盘就该 discard,环境出现 drift 风险也该 discard。
当对象有强金标准时,skill 优化会很像工程修 bug。 每次 keep 都能说清楚 修了哪个洞、加了哪道闸、为什么分数真的涨了。
第一轮 keep 修的是假完成。原来 section 6 的收尾校验是平铺 checklist,很多 completion 相关结论可以靠侧面推断蒙混过关。`exp-005` 把它拆成三道门,分别是
Preflight、Final Audit、Completion。
其中 Completion 不再允许靠侧面推断成立,而是明确要求
WORLD、processing_summary、尾章边界、旧批次污染这些结论都有显式证据。
这一轮的 summary 主分是 `7 → 8`。证据文件是 autoresearch-runs/import-world-from-book-phm-loop-20260405/iterations/exp-005/summary.md
第二轮 keep 修的是证据质量还不够硬。`exp-011` 继续把 Completion 压紧,新增 `BOOK.md` 一致性、`processing_summary.md` 对齐、断链和占位符、标题层级、以及尾章 `0031` 到 `0033` 的原文引用级校验。重点不是文件存在,而是交付状态和内容证据必须对上。
这一轮的 summary 主分是 `8 → 11`。证据文件是 autoresearch-runs/import-world-from-book-phm-loop-20260405/iterations/exp-011/summary.md
因为后面的候选没有再拿出更强证据。`exp-012`、`exp-013` 是中断恢复后的清理轮次。`exp-014`、`exp-015` 这类轮次,账本里直接是 `10 → 10`,而且 `notes` 明写 `quick pass count stayed flat`,同时还有 runtime drift 风险记录。按照 keep 规则,这种平盘或受环境污染的轮次就应该 discard。
这个案例最有价值的地方,是每次 keep 都能说清自己修了哪个洞。进化的不是文风,也不是措辞,而是审计规则一步步从看起来完成,变成必须拿证据证明完成。
它也提醒了一个常被忽略的点。autoresearch 的价值,不在于让模型更会编理由,而在于让评测越来越像事实审计。真正带来进步的,是把原来能模糊带过的完成声明,变成必须拿证据说话的交付核查。
还有一个复盘细节很容易写混。`exp-011` 的 iteration summary 里主分到了 11,但当前 bundle 的 baseline.json 和 accepted-baseline.full.json 落盘是 full_pass_count = 10。这里不是打架,而是在提醒我们分清单轮候选的局部分数,和当前 accepted baseline 的整包快照。
smoke 与 traindev、test、adversarial这是更贴近生产的一类 skill。难点不在能不能聊网页内容,而在能不能把网页真的落到本地,而且失败时不撒谎。
它把 URL 变成本地剪藏结果。可能是一个真正落地的文件夹,也可能是 planning-only 的落点路径。产物包括 Markdown、本地化图片、必要时的 `raw.html`,以及非中文原文默认生成的 `*.zh.md`。
Markdown目标是本地剪藏产物,不是网页阅读问答。
它的 eval 很像真实验收。看的是 路由准不准、preflight 挡没挡住、`dir/inbox/fetch` 模式对不对、`output_dir` 报得真不真、产物有没有真的落地、失败时会不会假装成功。
9 维路由、预检、路径、产物、翻译、快照、本地化、复用性和操作约束都会被看见。
它先修 路由假阳性。 用户只是想总结网页,不是要本地剪藏,这种请求不该进入 `web-clipper`。`exp-001` 把这类误路由挡住了。
它继续修 该接的没接住。 明确要求本地剪藏的请求,即使页面不稳,也应该进入 wrapper 流程,而不是被错误地挡在 skill 外。
因为 planning-only 的 `dir` 模式也被修顺了。用户只是先问落点路径时,旧版会误判成没走 `web-clipper`。`exp-003` 把这个口子补上,所以当前 accepted baseline 最终停在它。
因为从 `exp-003` 开始,关键维度已经接近满分。后面的候选如果只是 `1.0 → 1.0`,又没有明显更简单,就不该 keep。像 `exp-027` 这种,就是典型的 没退步,但也没前进。
第一轮 keep 修的是路由假阳性。用户只是想总结网页,不是想生成本地剪藏包,这种请求本来不该进入 `web-clipper`。`exp-001` 把这类误路由挡住了,`routing confirmation` 从 `2/3` majority pass 修到 `3/3 pass`。
第二轮 keep 修的是路由不只要挡错,还要接住该接的。明确要求本地剪藏的请求,即使页面不稳,也应该进入 wrapper 流程。于是这一轮同时清掉了 summarize 请求的 `route_false_positive`,以及显式剪藏请求的 `route_false_negative`。
第三轮 keep 修的是 planning-only 的 `dir` 模式。用户有时只是先问,如果剪藏这条 URL,会落到哪个本地目录。旧版会把这类任务误判成没走 `web-clipper`。到了 `exp-003`,`dev_dir_mode_should_only_plan_path` 从 expected pass、actual fail,回到了 expected pass、actual pass,`selected_target` 也恢复成 `web-clipper`。
因为从 `exp-003` 开始,当前 accepted baseline 在关键维度上已经接近满分。后面的候选如果还是 `1.0 → 1.0`,又没有明显更简单,就不该 keep。`exp-027` 就是典型,它 `7/7 adversarial matches`,却仍然因为 flat-result rule 被丢掉。另一批候选则更直接,出现新 mismatch 或保护指标回退,所以只能 discard。
当前 accepted baseline 是
exp-003-dir-planning-routing-keep-2026-04-06,对应 keep 提交号
4cd8712905a36b4cc5943ac71d27f89aafc89bec。整个账本目前是 `3 keep / 134 discard / 3 blocked`。真正有学习价值的,是 exp-003 之后那 137 次没有新增 keep 的平台期。
更细一点看,控制器已经把失败方向按 cluster 冷却。当前状态里有 11 个 cooled-down
failure cluster,blocked_direction_fingerprints_since_last_keep
已累计到 30。意思很直接。同一个 keep checkpoint 之后,已经证明无效的方向,不该被下一轮重新包装再撞一次。
成熟 skill 的 autoresearch 不是越跑越兴奋,而是越跑越会拒绝没有价值的改动。
真正有用的经验不是技巧,而是约束。每条约束都在真实运行里拦下过错误方向。
金标准不稳,后面所有高分都只是噪声。`import-world-from-book` 能进化得干净,就是因为原书对照面够强,失败模式能被一条条咬住。
同一个模型既改又判,结果会迅速自我合理化。proposal lanes、selector、judge 需要分角色,至少 judge 要独立。
不要把 skill 优化限制成一轮磨一个小 bullet。整段重写是允许的,但要清楚这一轮到底在修哪类失败,否则赢了也说不清为什么赢。
只记录失败没用,得把当时的设计假设、触碰的 section、目标 case、实际结果一起写下来,下一轮才能避免撞同样的墙。
等分时不自动 keep。要么分数真的涨,要么明显更简单、更稳、更贴近合同。`exp-027` 被丢掉,就是这个原则在发挥作用。
持续实验不能寄托在单个会话活着。外层脚本负责循环、状态、恢复和留痕,agent 只是某些阶段的执行单元,不是主控。
开工标准其实不玄。关键是从第一天开始,就把以后复盘和回滚会用到的证据留下来。
最小落地版本先别求全。先保证目标 skill 能被固定案例稳定评估,原始需求被写成合同,评测分出快筛和晋升两层,修改和评判拆角色,外层运行包能自己循环。
如果一开始资源有限,不必马上把 proposal lanes 拉满。更值得先做的,是把 run bundle 结构搭对。因为一旦状态、分数、改动、失败假设和提交都开始留存,后面整条链路才会真的长出学习能力。
下面这些路径都来自本地运行资产。它们是这份报告的依据,不是回忆。