建设实况 · v4.3.0 · 2026-09-06

建设现状

闭环中段全部实现并被测试覆盖,左端埋点入口已上线并通过全项自检, 右端规则回流的契约与上游加载器参考实现已交付。 但真实埋点事件仍是 0 条——机器造好了,在等燃料。 当前唯一的瓶颈是上游接入,不是功能缺口。 本版新增第二条产品线:一个只读的编目智能体,按编号把编目记录供给下游切片工作台,已上线并端到端跑通。本页给出截至 2026-09-06 的实况。

2 603
行 Python · 29 个模块
284
测试 · 全绿
11 + 18
命令行命令 + HTTP 路由
6 / 8
功能件已交付

接入实况

运行中
埋点服务与隧道
9 / 9
公网入口自检 · 四条防线
0
真实埋点事件 · 等待上游接入

这三个数字要连起来看。前两个说明接收端随时可用——服务在跑、 四条防线(落盘、去重、校验、鉴权)逐项验过。第三个说明它一直在空转。

把「0」摆出来是刻意的:上面那些代码量与测试数很容易读成「进展顺利」, 但一套依赖真实数据自我演进的系统,没有数据时它的能力等于零—— 差异分析没有素材,规则提取没有证据,看板没有分母。 接入方要做的事见接入指南:三处改动,两处各约十行。

闭环全景:中段已通,两端已交付契约

上游编目链路 现网 · 独立系统 埋点接收 公网入口已上线 修正日志 含兜底队列 差异分析 无模型依赖 规则提取 可 dry-run 已接通 人工审核 状态机 · 须署名 灰度生效 10% → 全量 效果验证 率口径 · 有分母 规则回流 · 契约与加载器已交付,待上游接入
实线环节已实现且有测试覆盖。左端埋点入口已上线并通过全项自检; 右端的规则包契约与加载器参考实现已交付,虚线表示它尚待上游接入。 两端都接上之后,这条线才真正闭合。

功能件交付情况

编号功能落地形态状态
F1修正埋点HTTP 接收端 + 进程内接入点;校验失败进兜底队列可重放已交付
F2字段级差异分析高频错误字段排行、错误模式、来源分布、置信度分箱检验已交付
F3规则提取四类封闭词表的类型化规则;定类型不用模型,模型只填 schema 内参数已交付
F4审核与灰度状态机跳步抛异常、审核须署名、任意状态一键回滚已交付
F6准确率看板处理完成埋点提供真实分母,修正率与填充率按率口径计算已交付
F9规则冲突检测入库比对同字段同条件的已生效规则并告警已交付
F5疑难字段专项增强多语种检索与实体消歧,提升难字段填充率路线图
F7人机并行采样同一条内容双轨跑 AI 与人工,结果自动比对入库路线图

为什么「分母」是这一版的关键补丁

只记录「被人工改过的字段」,能算出的永远只是修正次数,不是修正率—— 吞吐量一变,前后就不可比,填充率更是无从谈起。

因此埋点是两条而非一条:除了字段级修正事件,还有一条处理完成事件, 记录每条内容各字段是否有值、是否被人工改动。有了分母, 「规则生效后修正率下降 ≥20%」「难字段填充率提升 ≥10 个百分点」这两条验收标准才真正可判定。

这个补丁牵动契约、接收端、度量口径与看板四处——它属于地基,越晚改代价越大。

规则回流:不集成、不复刻

闭环右端曾是断的:规则的条件与动作是自然语言,人看得懂、机器不能执行, 于是「生效」之后仍要有人手工翻译成上游的代码改动。

解法不是把上游链路集成或复刻进来——那要重做的是多年踩出来的反爬突破、多级降级与写入兜底, 复刻品短期内准确率追不上现网。真正需要的只是让上游能消费一个配置文件。

于是规则从自由文本变成四类封闭词表,每类对应一个模块层,参数有 schema:

类型层上游如何执行对应修正原因
source_priorityL1该字段按给定顺序取源,先到先用来源错误
normalizeL3对该字段的值做替换或映射格式不符
prompt_constraintL3该字段的生成 prompt 追加一段约束语义偏差 / 幻觉编造
fallback_sourceL4字段为空时按顺序去补漏抓补全

四类不是拍脑袋定的——它们与修正原因枚举一一对应。而修正原因本就按「解法不同」划分: 抓错源要改采集,编造内容要改 prompt。类型与原因对齐后,差异分析能直接决定该提哪一类规则, 不必让模型自由发挥。

额外好处:结构化参数可以校验,自由文本不能。模型编出一个不存在的数据源名, 入库时当场被拒,而不是等审核人肉眼发现。

生效规则渲染成版本化的规则包,上游一个加载器加四个执行分支即可消费—— 不动八阶段、不动分层、不动既有的降级与兜底逻辑。灰度由上游按比例抽样执行。

第一次真实数据验证

此前整条链路只在内置演示样本上跑过。最近拿到一批真实的双版本数据 (每个条目两行:AI 产出一行、人工修改后一行,共 31 组、310 处修正), 把它转成埋点格式离线灌入,闭环第一次跑在真实数据上。

310
处真实人工修正
35%
修正原因可确定 · 其余判不了
9
条规则草案

注意这与上面的「接入实况」不是一回事:那批数据是从表格离线导入的, 公网埋点入口收到的真实事件仍然是 0 条。 离线导入证明了链路可用,但它是一次性的;持续的自演进仍然要靠上游接通埋点。

真实数据的分布,和假想的完全不同

演示样本假设的主要问题是「AI 抓错了源」。真实数据里排在最前的全是「AI 压根没抓到」—— 外部平台编号、评分、语言版本、参与人员这几类字段,AI 大量留空由人工补齐。

产出的 9 条规则草案里,8 条是「缺失时去哪里补」,只有 1 条是「写法归一」。 这直接改变了该往哪里投入:优先要解决的不是取源准确性,是覆盖率。

这也是为什么演示样本不能替代真实数据——它只能验证链路通不通, 验证不了方向对不对。

提取质量:从印象改成测量

规则提取是闭环里唯一用到模型的环节。它的质量此前只有一句 「三次里大概一次能用」的印象——真去测量,30 次真实模型调用全部通过。 那次失败早已修掉,只是从没复测,印象就留了下来。

测量本身也变成了可重复的:失败被分成四类(调用失败 / 空返回 / 形状不合 schema / 语义自测不过),因为四类的改法完全不同,混成一个「成功率」就看不出该动哪里。

真正的收获来自这次测量——30 次输出里发现一类 schema 全过却不可能有效的规则: 字段漏抓时,模型给出的补全兜底源正是那个一直漏抓的源。已补上对应拦截, 判据只有一条且不需要跑就能断定:出错的源不能当解药。

工作台:把术语翻译成人话

闭环跑通之后暴露出另一个问题:页面上全是术语,第一次打开的人不知道自己在看什么。 「灌入数据」——什么数据、从哪来?「提取规则」——模型在哪配?看板给出一段 JSON——怎么读? 修正录入让人填字段,可参照物是什么?规则审核页则干脆是空白的。

这不是文案问题。一套要交给编目员日常使用的工具,如果每一页都需要口头讲解才能用, 那它实际上没有交付完。这一轮的改法是给每一页加一句「这一页回答什么问题」, 再补上使用者当场就会问的那几件事:

页面此前的困惑现在给出的答案
演示这到底要干嘛开篇一句话讲清机制;说明样本是仓库内置的 14 条(不联网、不抓取);模型配在哪、不配也能跑
演示 · 末步这段 JSON 怎么读逐字段对照表:每个字段是什么、上游拿到它会做什么
看板一堆数字,看不出结论结论先行——最费人力的是哪个字段、占全部修正的百分之多少;再配按占比的条形图
修正录入修正哪个参照物先选剧目,再逐字段对照 AI 的产出值修改,可疑项直接标出原因
规则审核一片空白,是坏了吗说明为什么空、要先走哪几步才会有内容,并给出演示页入口

修正录入那一项效果最直接:可见输入框从 11 个降到 1–2 个。 此前是把一整套字段摊开让人从头填,现在是看着 AI 填错的那一格改—— 后者才是编目员实际在做的事。

运行状态页:只读,且刻意不做启停按钮

新增一页只读的运行状态:进程在不在跑、数据在哪有多少、配置是否齐全、常用命令是什么。

做这一页时最自然的想法是顺手加上「启动 / 停止」按钮。但这在结构上讲不通: 工作台就是被控制的那个服务本身。「停止」点下去,页面自己就没了; 「启动」在服务没跑的时候根本打不开。

更要紧的是第二层理由——让网页能杀进程,等于给这个服务凭空加了一条可执行系统操作的攻击面, 而换来的便利仅仅是省下切一次终端。所以启停命令以可复制的文本给出,由人在终端执行。 有一条测试断言该路由只暴露 GET,防止以后有人「顺手」加回来。

同样地,这一页只显示密钥「已配置 / 未配置」,绝不显示内容本身,两条测试分别守着接口口令与模型密钥。

供数链:编目智能体给切片工作台供数

编目和切片是两条独立的生产线,此前切片建任务时要人工去查一部剧的编目信息再抄进去。 本版把编目做成一个只读的智能体:下游按剧目编号发一个请求, 它从编目表里读出这部剧的记录,归一化成固定结构返回——剧名、别名、导演、主演、简介, 外加 54 列原文。永不写入,只绑本机回环地址,一次一部剧,不做模糊查询。

两端的接缝用五份「金样」文件逐字锁定,两个仓库各存一份并有测试互校—— 所以两边可以并行开发,最后一次接通。

环节状态实测
读编目表通508 行的真表,按编号精确匹配;同一部剧多行时取写入日期最新
两阶段协议通start → 等待确认 → complete → 完成,产物结构与契约逐字一致,单次 3 秒左右
注册与寻址在岗两张名片在智能体注册中心审核在岗,按「编目记录 只读」能寻址命中
下游端到端通切片工作台填编号 → 片名预填 → 任务文件含编目快照 → 演员建议出现
四种失败不阻断注册中心不可达 / 智能体未起 / 编号不存在 / 映射错误,表单均可手填继续

一处被藏了一天的故障。接入真表的当天,日志里只有一行 读表工具: {。 读表工具在权限不足时把错误打成多行 JSON,代码只取了首行——于是"接通了"其实从未成功读过一次。 根因是读表的身份没有申请对应权限。现在错误原文与修复提示会完整带出,文档里的自检样例也换成真表里确实存在的一部剧。

教训和早前那条「图表渲染成功其实什么都没画」是同一类:没有报错不等于成功, 要看到产物才算。

系统架构

接入层

同一个服务同时承载埋点接口与服务端渲染的工作台界面;命令行是同一批领域模块的另一个入口。 鉴权为共享 Token:接口走请求头,界面走登录页换签名 cookie,未配置 Token 时服务拒绝启动。

领域层 · 六个模块各管一件事

模块职责
契约分层枚举、修正原因、修正记录、完成记录、规则与状态
日志修正与完成两条日志的读写,以及坏数据兜底队列
分析按字段聚合、置信度分箱检验
提取调 LLM 归纳规则草案
规则库状态机、回滚、冲突检测
度量按率口径计算填充率与修正率,判定验收标准

数据层

两条日志与一份规则库,都是可直接阅读的文本格式:日志是追加式 JSONL,规则库是缩进 JSON。 写入用临时文件加原子替换。这是刻意的选择——可 grep、可人工审阅、可手工修复, 与「白盒优于黑盒」的原则一致。规模上限也因此是明确的,面向数十人的工作台而非海量并发。

三条约束写死在代码里,不是文档约定:修正原因为空直接抛异常、 规则无样本证据无法入库、状态机跳步抛异常。每条都有测试守着。

后续路线

  1. 上游接入两条埋点 —— 唯一的瓶颈。 入口、契约、自检脚本与 一页纸的接入指南均已就绪,等待上游在保存字段修改时推修正事件、 在每条内容处理完成时推完成事件。两条都要——缺完成事件就只有分子没分母,率的验收指标判不了。
    这件事有时间窗:人机并行期一旦开始,当天没接通就等于当天的数据永久流失, 事后无法追补。这是整个项目里唯一不可逆的一项。
  2. 上游接入规则加载器。 契约、参考实现与对接文档均已交付, 上游侧约一天工作量。接上之后闭环才真正闭合。但顺序不能倒—— 埋点没接通之前,连「攒数据」都还没开始。
  3. 补 F5 与 F7。 疑难字段专项增强直接关系到填充率验收指标; 人机并行双轨采样为规则提取提供更干净的对照样本。
  4. 规则提取管线的跨场景复用。 编目的「字段级 diff」与视频切片的 「候选留用/弃用/入出点微调」结构同构,管线可共用一套——这个攻坚只做一次,两条线都受益。

← 回首页 · 架构详解