五个模型投票,八道门禁:一个内容档案怎么保证“每条都能查“
👋 Hi,我擅长AI 大模型应用落地、意识解码与 AI 开发工具链。 💡 创业路上,用技术换时间,一起把 AI 变成生产力 🚀 >
五个模型投票,八道门禁:一个内容档案怎么保证"每条都能查"
AI 编年史 · 第 07 篇- 模块三【工程实践】· 确定性规则 · 五席评审 · 失败关闭 · 可复算的数字
📚 专栏信息
《AI 编年史:一条能查到底的时间线》专栏
专栏定位:面向技术读者与自学者,用 158 条带原始来源的条目,把 AI 从 1912 年到 2026 年的关键转折讲清楚
本系列共 10 篇,分为四大模块:
📖 模块一【源头考据】(3 篇):年代盘点、起源(1912/1936)、感知机之争
🔧 模块二【方法演进】(3 篇):反向传播到 AlexNet、Transformer 到 GPT、人机博弈
🛡️ 模块三【工程实践】(1 篇):五席评审管线与八步门禁
📚 模块四【读者工具】(3 篇):学习路线、面试 20 问、教学素材
本文是模块三唯一一篇。它不讲 AI 史,讲这个档案自己是怎么被造出来的——以及它挡不住什么。
👨💻 作者与项目
作者简介:翁勇刚 WENG YONGGANG
AI 编年史(aihist)维护者,新概念龙虾-WeClaw 开发团队负责人
理念:“再早的历史,也能查到它的源头”
- 🌐 站点地址:https://aihist.net
- 📝 作者 CSDN:https://blog.csdn.net/yweng18
- 📦 收录标准(JSON):https://aihist.net/api/v1/standard
- 💻 同作者技术专栏:WeClaw 实战指南(CSDN 专栏)
- 🔍 发现错误:每个条目页页脚有纠错入口
📝 摘要
本文结构概览:
先说"能查到"为什么是个工程问题——它对应三种具体的失败模式;
然后给出四道关:确定性规则预筛、五家厂商各一席的模型评审(至少三票、中位分不低于 75)、
静态页与证据链自检(21 个用例)、八步发布门禁;
接着给出一组可复算的数字(158 条 / 196 次引用 / 45 个站点 / 274 个测试);
最后是最重要的一节——这套东西挡不住什么。
背景:
自动抓取 + 自动发布是最容易丢信任的组合:抓错了没人拦,发布了没人查,错了没人改。
这个档案的设计前提是:任何一步失败,都必须导致"不发布",而不是"照发"。
核心问题:
怎么让一条未经人工确认的条目,在进入档案前被至少两种独立机制检查过?
解决方案:
四道关,职责互不重叠——规则管"明显不该收的",模型管"模糊边界上的判断",
静态页自检管"证据链是否完整呈现",门禁管"整站是否可发布"。
其中规则的定位是永远不准入,只负责拒绝与分流。
关键成果(2026-10-27 按生产库与仓库实测):
- 158 条条目,零条无来源;引用 196 次,去重 195 条链接,覆盖 45 个站点
- 可信度分布:
verified26 /likely121 /single11 - 规则预筛:9 条硬规则;进面板门槛 35 分,低于 25 分直接退回
- 评审:5 家厂商各一席,至少 3 票同意,中位分 ≥ 75;未达门槛一律
hold - 静态页自检:21 个用例(1 个对照 + 20 个篡改)
- 后端测试:274 个;发布门禁8 步
- 采集:每日 01:05 一次;
stale阈值 26 小时 = 24 + 2 小时宽限
适合读者:做内容管线 / 数据质量 / CI 门禁的工程师,以及想知道"这站凭什么可信"的读者
阅读时长:约 18 分钟
关键词:内容管线、五席评审、失败关闭、发布门禁、证据链、数据质量
一、先说结论
这个档案的可信度不来自"我认真",而来自四件可以被检查的事:
- 每条都有来源,没有例外。158 条,无来源 0 条。来源在页面上是可点的链接,不是"据外媒"。
- 规则永远不准入。确定性规则只做两件事:拒绝、分流。它从不单独决定收录。
- 评审失败就 hold。五席里少于三票有效,结论是"暂缓",不是"默认通过"。
- 发布前必须跑完八步门禁,其中一步是"篡改自检"——故意破坏 20 个地方,看检查器能不能全部抓到。
第四条最容易被忽略,但它是这四条的保障:一个从不失败的检查器,等于没有检查器。
二、"能查到"为什么是个工程问题
内容站最常见的三种失真,都有明确的工程成因:
| 失真 | 成因 | 典型表现 |
|---|---|---|
| 把新闻稿当历史 | 抓取源包含大量企业 PR | “某某公司发布……赋能千行百业” |
| 把转载当多来源 | 只按 URL 去重,不按来源家族 | 同一篇稿子被十家媒体转载,被算成"十方印证" |
| 把预测当事实 | 缺少"事件类型"字段 | "2027 年将出现超级智能"被当成已发生的事引用 |
这三种失真,光靠"人工审核"挡不住——因为量太大;光靠"模型审核"也挡不住——因为模型会被漂亮的公关文案说服。
所以必须分层:能确定性判断的,交给规则;不能确定性判断的,交给多模型的多数票;两者都过不了的,宁可暂缓。
三、四道关的全貌
抓取(多源 RSS / arXiv / OpenRouter / Hugging Face / 官方公告) ↓ 指纹去重 + 跨源合并 + 置信度计算 第一道:确定性规则预筛 ├─ 命中 9 条硬规则之一 → 直接 exclude(不进面板,不花评审费) ├─ 分数 < 25 → 直接退回 └─ 分数 ≥ 35 且无硬规则 → 送面板 ↓ 第二道:五席模型评审 ├─ 5 家厂商各一席,至少 3 票有效 ├─ 3 票 include 且中位分 ≥ 75 → include ├─ 3 票 exclude → exclude └─ 其余(含 2-2 平票、有效票不足)→ hold ↓ 第三道:静态页与证据链自检(21 个用例) ↓ 第四道:八步发布门禁(G0–G6,含 G2b) ↓ 发布注意第一道的一个设计选择:规则从不准入。它的返回值只有exclude。这意味着即使一条候选在规则阶段拿了 100 分,它也必须过第二道。
这是刻意的。规则是正则表达式,它擅长识别"融资"“裁员”“发布会"这类词,但它无法判断"这条到底算不算里程碑”。把这个判断交给规则,等于把编辑权交给 grep。
四、第一道:确定性规则在做什么
规则这一层要分清两件事,它们常被混为一谈:
五道硬门槛是"什么才配进档案",它写在收录标准里,是人的判断:
| 门槛 | 要求 |
|---|---|
| 主体与时点明确 | 能定位到具体机构、模型、政策或研究,日期精度不低于月 |
| 与 AI 发展直接相关 | 变化发生在 AI 技术、产品、研究或治理本身 |
| 证据可核验 | 至少一条一手证据,或两个独立来源对同一事实的独立报道 |
| 有历史增量 | 新能力、新范式、新规模或新规则,不是既有事物的例行更新 |
| 一年后仍可引用 | 能作为发展节点被再次引用,不是当日热点或营销活动 |
九条硬性排除规则是"什么一定不要",它写在代码里,是机器的过滤。门槛靠理解,排除靠匹配——机器负责的是后者。
4.1 九条硬规则
规则是一组正则,每条对应一类"不属于编年史"的内容:
| 规则 | 拒绝对象 | 关键词示例 |
|---|---|---|
funding | 融资、估值与资本事件 | 融资 / 估值 / IPO / 收购 |
personnel | 人事、裁员与组织变动 | 任命 / 离职 / 裁员 |
business | 合作、客户案例与商业落地 | 赋能 / 落地 / 客户案例 |
availability | 可用性、价格与区域开放 | 正式可用 / 降价 / 灰度 |
event | 发布会、大会与直播预告 | 前瞻 / 直播 / 发布会 |
opinion | 访谈、评论与预测 | 专访 / 观点 / 专栏 |
roundup | 早报、榜单与教程 | 早报 / 盘点 / 榜单 |
rumor | 传闻与未经证实的信息 | 传闻 / 据悉 / 或将 |
business-metric | 营收、流量与营销数据 | 营收 / 日活 / GMV |
有个细节值得说:opinion那条正则里故意不包含"预测"。因为"蛋白质结构预测""天气预报"是研究对象,不是观点文章。删掉这个词,避免把 AlphaFold 类成果误杀。
这类调整都是被具体误杀案例逼出来的——规则的每一条例外,背后都有一个被错杀的条目。
4.2 打分:从 25 分起
通过硬规则的候选进第二步打分,起点 25,按证据强度加减:
score=25iflen(families)>=2:score+=18# 两个以上独立来源家族iflen(families)>=3:score+=7if"official"infamilies:score+=10# 官方公告if"arxiv"infamiliesor"paper"infamilies:score+=6ifsignals.get("headLab"):score+=8# 头部实验室ifhn_points>=500:score+=12# 社区热度分档ifNOVELTY.search(title):score+=10# 首次 / 开源 / 突破ifhas_tier_variant(candidate):score-=8# 同族包装变体(Pro/Mini/Flash 反复发)iflen(families)==1andfamilies[0]=="media":score+=10iflen(names)>=2else-12# 两家独立媒体算旁证,一家不算iflen(families)==1andfamilies[0]=="arxiv":score-=8# 单篇预印本两个阈值的分工:
- 35 分(
RULE_PANEL_THRESHOLD):够不够格花评审费; - 25 分(
RULE_AUDIT_THRESHOLD):低于这分,连"值得人看"都不算,直接退回。
-8那条特别实用:同一家厂商在两周内发 Pro、Mini、Flash 三个版本,如果都收,档案会变成发布日志。所以给"同族包装变体"扣分——不是不收,是要求它带着更强的证据进来。
4.3 为什么规则要留"痕迹"
每条被规则拒掉的候选都会写一条决策记录:分数、命中哪条规则、理由。
这一条是为了可追责。如果某天发现"一条本该收录的条目被规则杀了",能查出来是哪条正则干的、当时打了多少分。
没有痕迹的自动化,等于没有自动化。
五、第二道:五席评审
5.1 五家厂商,不是一个模型的五个副本
评审席位的设计有一条硬约束:五个席位必须来自五个不同厂商——DeepSeek、Qwen、GLM、Kimi、MiniMax 各一席。
原因很简单:同一个模型的五个副本会给出高度相关的判断,看起来是"五票",实际是"一票加了四次噪声"。
五个厂商意味着五种训练数据、五种对齐策略、五种偏好。它们同时被同一段公关文案说服的概率,远低于同一个模型的五个实例。
但这也不是万能药——它们都受中文语料结构影响,都有共同的盲区(第九节会讲)。
5.2 门槛:三票 + 75 分
vote="include"if(review["vote"]=="include"andreview["score"]>=INCLUDE_SCORE)else"exclude"include_votes=count(vote=="include")valid_votes=len(votes)# 只算成功返回的decision="hold"# 默认值是 hold,不是 includeifvalid_votes>=MIN_INCLUDE_VOTES:# >= 3ifinclude_votes>=MIN_INCLUDE_VOTES:# >= 3decision="include"elifexclude_votes>=MIN_INCLUDE_VOTES:# >= 3decision="exclude"三处细节都是有意的:
- 默认值是
hold。任何异常路径(票数不够、解析失败、超时)都会落到"暂缓",而不是"通过"。这叫失败关闭(fail-closed)。 - 2-2 平票也是 hold。不设"先答的那票算数"——那等于让网络延迟决定收录。
- 票要先过 75 分。模型说"include"但只给 60 分,这票按 exclude 记。避免"嘴上说好、分数很低"的矛盾票。
5.3 面板日志长什么样
每次评审会在决策记录里留下这样一行:
panel:4/5; panel_failed:1=http_503; review_excluded:44; review_held:6它的读法:
| 片段 | 含义 |
|---|---|
panel:4/5 | 5 席里 4 席成功返回 |
panel_failed:1=http_503 | 1 席失败,原因是上游 503 |
review_excluded | 本轮被判定排除的候选数 |
review_held | 本轮被暂缓的候选数 |
这行日志的价值在于:出现大面积 hold 时,能立刻区分是"内容真的不行"还是"评审服务挂了"。
六、第三道:静态页与证据链自检
条目在页面上是怎么"被看见可查"的?三个硬约束:
- 证据链接必须在页面上真实出现,不是藏在 JSON 里;
- 引用文本要与来源数量一致,来源三个就要有三个标题;
- 页面不能偷偷加载外链资源或执行 JS——只有一段 JSON-LD 结构化数据。
检查器对每个页面做断言,同时还会跑一遍篡改自检:21 个用例,1 个对照 + 20 个故意破坏。
举几个篡改用例(这些都是真实会发生的 bug):
| 篡改 | 期望被抓住 |
|---|---|
| 删掉一个条目页 | missing page |
| 塞一个不在种子里的页面 | orphan page |
| 改错 canonical | canonical is wrong |
| 删掉一个证据链接 | evidence link missing for <url> |
| 引用访问日期与来源不符 | citation text is missing or inconsistent |
| 注入一个外部样式表 | page loads an external subresource |
| 注入一段内联脚本 | expected exactly one JSON-LD script and no executable JavaScript |
| sitemap 少一条 URL | sitemap missing url |
为什么自检比检查更重要:检查器本身会随代码演化而退化。今天它能抓"证据链接缺失",明天有人改了一行正则,它可能就静默失效了。篡改自检的作用是——每次都证明检查器还活着。
第 07 篇只讲到这里,具体实现不展开。真正想说的是那句:一个从不失败的检查器,等于没有检查器。
七、第四道:八步门禁
发布前必须跑完八步,任何一步红,后面的全部跳过:
| 步骤 | 检什么 |
|---|---|
| G0 | 版本一致性(产物里的版本号与仓库一致) |
| G1 | 构建(TypeScript + Vite + 静态页生成) |
| G2 | 静态页 / sitemap / robots |
| G2b | 静态页检查器的篡改自检(21 用例) |
| G3 | 采集管线 |
| G4 | 编辑部闸门(规则 + 面板的端到端行为) |
| G5 | 基准覆盖 |
| G6 | 后端测试(274 个) |
G2b 排在 G2 之后,这个顺序有意义:先跑检查,再证明检查有效。如果 G2 通过、G2b 失败,说明"这次通过不可信"——这比 G2 直接失败更值得警惕。
门禁的另一个设计是"红即停":只要前一步失败,后续步骤状态记为skipped (earlier gate failed),而不是继续跑完再报错。这样输出永远指向第一个故障点,而不是一堆连带失败。
八、一组可复算的数字
这一节的所有数字,都可以用站点接口或库直接复算,不需要信我:
| 指标 | 值 | 怎么复算 |
|---|---|---|
| 条目数 | 158 | /api/v1/events总条数 |
| 无来源条目 | 0 | 统计sources为空的条目 |
| 引用次数 | 196 | 所有条目来源链接求和 |
| 去重链接 | 195 | 同一链接被引用两次(196 − 195 = 1) |
| 来源站点 | 45 | 按域名去重 |
verified | 26 | 两个以上独立来源 |
likely | 121 | 一个可靠来源加旁证 |
single | 11 | 单一来源 |
| 后端测试 | 274 | pytest --collect-only |
| 门禁步骤 | 8 | scripts/release-gate.mjs |
| 自检用例 | 21 | 1 对照 + 20 篡改 |
补一条容易被忽略的:196 次引用对应 195 条去重链接,说明只有一条链接被两个条目共用。这个数字小,是好事——它说明每个条目的证据是独立的,不是一个链接撑起一片。
还有一条分布值得看:
| 类目 | 条数 |
|---|---|
| 模型发布 | 71 |
| 研究 | 48 |
| 政策 | 18 |
| 里程碑 | 15 |
| 观点 | 6 |
71 比 48 这个比例说明档案有一个明显偏向:模型发布远多于研究突破。这是数据源结构决定的(模型发布有官方博客、Hugging Face、OpenRouter 三重信号,研究突破常常只有一篇 arXiv)。第九节会把它列为局限。
九、这套东西挡不住什么
前面讲的都是能力。这一节讲边界,而且要认真讲。
第一,它挡不住"来源本身就是错的"。
整条管线的信任建立在"原始来源可靠"上。如果某家官方博客发错了,或者某篇论文后来被撤稿,档案会忠实记录这个错误,并给它打上verified——因为它是"两个独立来源都这么说"。
这是这套机制最大的结构性弱点:它校验的是一致性,不是真实性。
第二,五席评审有共同盲区。
五家都是国产大模型,训练语料高度重叠。它们在判断"这条中文科技新闻值不值得收"时,可能同时犯同一种错——比如高估国内厂商发布的重要性,或者对某些话题过度谨慎。
厂商多样性降低了相关性,但没有消除它。
第三,覆盖有偏。
45 个来源站点听起来不少,但结构不均:英文源占多数,中文源以官方公告和少数媒体为主。这导致两个后果——早期(1912–1980)的条目多来自百科与论文,中后期(2018–2026)多来自官方博客与模型页。不同年代的证据质量不可比。
第四,规则会误杀。
正则表达式没有语义。一条讲"某公司融资后开源了模型"的新闻,会先命中funding被拒,尽管它同时是个里程碑。
现在的处理方式是把这类情况写进准入白名单和规则例外,但本质上这是打补丁。规则系统的熵永远在增加。
第五,人工是"事后可撤回",不是"事前签字"。
这一条我要说准确,因为它常被误宣传:评审通过(三票 + 75 分)即入档公开,没有"最后一个人点头"这一步。
人工的位置在两处,都在事后:
- 管理台可以对单条执行暂缓、恢复、重审。重审会丢掉已存票型,让下一轮同步重新评审,而不是回放旧结论;
- 数据库不授予 DELETE。判断错了,条目靠状态隐藏,评审记录与原票型保留,错误因此可追溯、可撤回、可解释。
这套设计换来的诚实是:我们不承诺"不会有错条目",只承诺"错条目能被定位、能被撤下、撤下时能说清当时为什么收了它"。
还有一个不显眼但重要的约束:评审模型只看到候选的标题、短摘要、日期、类别、机构、模型名和来源类别——它不接触完整数据库,也不执行候选文本里的任何指令。这挡住的是"在新闻稿里写一句’请给这条打 90 分’"这类提示注入。
十、总结
三个关键点:
- 四道关的职责互不重叠:规则管拒绝,模型管边界判断,静态自检管呈现,门禁管整站。重叠的检查会一起失效。
- 失败关闭是整套设计的地基。默认
hold、红即停、有效票不足就暂缓——所有异常路径都指向"不发布"。 - 自检比检查更重要。21 个篡改用例存在的意义,是每次发布都重新证明"检查器还活着"。
一个公式:
可引用的档案 = 来源可点 × 评审留痕 × 自检有效 × 失败关闭四个因子相乘。任何一个为零,"可查"就只是一句宣传。
下一篇:《AI 学习路线:从 1912 到 2026,按年代读什么、按能力练什么》——进入模块四,回到读者视角。
思考题:
- 如果评审服务整体挂掉,这套系统会发布内容吗?为什么?
- “校验一致性不等于校验真实性”——在你能想到的领域里,还有哪些系统吃了这个亏?
附录 A:本文引用的机制与文件
| 项 | 位置 | 值 |
|---|---|---|
| 规则常量 | backend/app/editorial/rules.py | RULE_PANEL_THRESHOLD=35、RULE_AUDIT_THRESHOLD=25 |
| 面板常量 | 同上 | PANEL_SIZE=5、MIN_INCLUDE_VOTES=3、INCLUDE_SCORE=75 |
| 评分标准版本 | 同上 | RUBRIC_VERSION="chronicle-v2" |
| 投票逻辑 | backend/app/editorial/panel.py | 默认hold,2-2 平票不裁决 |
| 静态页自检 | scripts/check-pages-selftest.mjs | 21 用例 |
| 发布门禁 | scripts/release-gate.mjs | G0–G6 共 8 步 |
| 采集节奏 | deploy/windows/register-tasks.ps1 | 每日 01:05 |
| stale 阈值 | backend/app/api/public.py | 26 小时 |
附录 B:参考资料
- 本文归因入口(唯一外链):https://aihist.net/go/csdn07
- 上一篇:《从深蓝到 AlphaGo:六十年人机博弈,人类到底输在哪一步》
- 下一篇:《AI 学习路线:从 1912 到 2026,按年代读什么、按能力练什么》
版权声明:本文为 CSDN 博主「翁勇刚」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。