三个采集脚本和聚合脚本的退出码都是 0,榜单文件头写着数据质量 [OK],可 60 条记录的总推荐一条都没采到。这是我们第一次用 Oh Story 的长篇扫榜 skill 跑起点时看到的情况,后面跑了三次、修了两次,作者最关心的新人签约新书榜才重新进到结论里。
Oh Story 是我们参与开发的开源网文写作 skill 包,仓库在 https://github.com/zenstory-ai/oh-story-claudecode 。其中的 story-long-scan 先用采集脚本抓榜单,再由 aggregate-rank.js 聚合,最后由 Agent 按 SKILL.md 写扫榜结论和推荐选题。
三次都在 Claude Code 里按 SKILL.md 运行,作者条件是我们虚构的:一位兼职新人作者想知道起点新书里哪些题材在冒头,用来选第一本书。起点默认采新人签约新书榜、月票榜、畅销榜,各 20 本。看新书本来还该采书库新书,但那一项只能开 Chrome 采,三次都按条件不开 Chrome,报告里写明了缺这一项。
第一次运行:退出码和文件头都报正常,落盘文件里热度全缺
第一次是 11 月 4 日在 main 3fde437 上跑的,约 5 分钟。3 个榜各 20 条,去重后 47 本,采集和聚合全部退出码 0,文件头写数据质量 [OK],聚合的采集情况写正常。
我们按落盘文件逐个核对,发现 3 个榜 60 条记录的总推荐、签约、收费模式全是 [待补]:每个榜单文件里 60 处 [待补],聚合里一处提示都没有。原因是起点移动端榜单数据本来就没有这几个字段,而质量检查只看题材和字数。缺了总推荐,热度只能退回用月票值,47 本里只有 20 本有热度,新人签约新书榜一本都没有。作者拿到这份报告,会以为数据完整,照着热度下结论。
修复一是 PR #518,11 月 5 日合并:起点榜单整份没有热度数字时,文件头改标数据质量存在问题,问题摘要写明总推荐缺失多少条,采集情况随之显示有问题。改动是 2 行脚本加 1 个回归测试。
第二次运行:标出问题之后,Agent 把两张榜整份排除
11 月 5 日 17:08–17:14 用同样条件跑第二次,去重仍是 47 本。修复生效了:新人签约新书榜和畅销榜的文件头显示数据质量存在问题、总推荐缺失 20 / 20 条;月票榜有月票数,标正常。
副作用也跟着出来了。SKILL.md 第 4 步写的是采不到就开 Chrome 重采,重采不了就在结论里不含这张榜。Agent 照做,把两张带问题标记的榜整份排除,报告只剩月票榜 20 本,作者想知道的新书里哪些题材在冒头,这次没有答案。这两张榜的题材、字数其实完整,只缺热度;修复前新书榜还能拿来判断题材,修复后反倒用不上了。
标出问题之后,下游怎么读这个标记同样要写清楚。只加警告、不说明缺的是哪部分、哪些结论还能用,Agent 会选最保守的做法,整份丢掉。
修复二是 PR #521,11 月 6 日 00:08 合并。文件头的标记不变,SKILL.md 第 4 步和 platform-qidian.md 写明:只缺热度数字的榜单,题材和字数照用,只是不进热度结论;想要总推荐,再用 Chrome 重采。
我们原本还想顺带统一热度中位的算法,因为题材表和热度分布取中位的方式不同,后来撤掉了:P25、中位、P75 本来用的是同一算法,改了反而会让点众平台的评分中位在偶数本时被取整。
第三次运行:新书榜回到结论里
11 月 6 日 10:44–10:47 在 main c4a2c3e 上跑第三次,约两分半。三个榜各 20 本,去重 45 本,所有命令退出码 0。聚合的采集情况原文是三行:
起点 · 新人签约新书榜:20 条,2026-11-06,有问题;总推荐缺失 20 / 20 条
起点 · 月票榜:20 条,2026-11-06,正常
起点 · 畅销榜:20 条,2026-11-06,有问题;总推荐缺失 20 / 20 条
聚合同时写明,新人签约新书榜和畅销榜没有热度数字、只按名次,热度中位和热度分布只算有热度的书:字数按 45 本计算,热度分布只有月票榜的 20 本。

新人签约新书榜的 20 本这次全部进了题材表:轻小说 6 本(原生幻想 4、衍生同人 2),都市 4 本,仙侠 4 本,玄幻 2 本,科幻 2 本,历史 1 本,游戏 1 本。都市新书 4 本里 3 本是重生开局,畅销榜第 1 名《我真没想重生啊》也是都市重生。仙侠新书的主角多站在反派或旁门的位置,比如《邪修一定得够邪》《魔头升职记》。玄幻在月票榜有 6 本、畅销榜有 7 本,多是连载多年的老书,新书榜只有 2 本。字数上,新人签约新书 20 本里有 16 本在 10–20 万字,中位约 14 万字。
每个题材都不到 15 本,又是第一次扫、没有上期可比,所以三个推荐选题(轻小说·原生幻想用职业身份切入、都市重生、仙侠反派主角)的可行性都只给到中。作者没给素材,报告标明按素材未知判断,建议先写 3 章、约 1 万字试水。
这次运行还发现一处小问题:同一批数据,文件名用的是本机本地日期,聚合的采集情况取的是时间戳前 10 位,也就是 UTC 日期,两处对不上;北京时间 0 点到 8 点采的榜,采集情况里会显示成前一天。PR #526 在 11 月 6 日 11:03 合并,采集情况改用本地日期,配了一条清晨采集的回归测试。
给做同类数据脚本的人
退出码 0、文件头写 [OK],都不等于数据完整,要按落盘文件去数缺失字段。数据质量标记要说清缺了哪一部分、哪些结论还能用,否则下游的 Agent 倾向于整份丢弃。每次修完都用同样条件复跑一次,这次的副作用就是复跑时才看出来的。