质量验证与可复现管线
本节目标
把清洗变成分层、可重复、可回归测试的发布流程;让任何接受、修复、隔离和覆盖动作都能由输入、规则与报告解释。
清洗流程的四层
- 原始层:只读保存接收内容、来源与校验和。
- 规范层:统一类型、时间、文本和枚举,不做不可解释猜测。
- 有效层:应用契约与跨字段规则,隔离问题记录。
- 发布层:为训练、RAG 或监控生成特定快照并记录版本。
不要原地覆盖原始文件。每次运行至少记录输入标识、代码/规则版本、开始时间、行数变化和各拒绝原因数量。
每个可被消费的发布批次还应有不可变清单:release_id、输入快照/哈希、数据与 schema 版本、规则/代码版本、分组和 split 映射版本、质量门结果、责任人与生成时间。清单证明“本次实际跑了什么”;它不能单独证明来源授权、隐私安全或业务正确,这些仍需各自的审查证据。
发布文件应先完整写入同目录临时文件,再替换目标,避免中途失败留下半份 CSV。多个输出文件很难获得跨文件事务保证,因此消费者还应依赖同一批次 ID/清单,只在整批完成后读取。
质量关卡
| 关卡 | 示例 | 失败动作 |
|---|---|---|
| Schema | 必填列存在、类型可解析 | 阻止发布 |
| 行级 | 延迟非负、状态在枚举内 | 隔离行 |
| 集合级 | 主键唯一、缺失率低于阈值 | 阻止或告警 |
| 分布级 | 类别/长度/延迟无异常漂移 | 人工复核 |
| 关系级 | chunk 指向真实文档 | 阻止入库 |
“通过”不等于数据完美,只表示满足当前明确契约。质量指标必须带分母、时间窗口和数据版本。
可重复与幂等
同一输入、同一配置重复运行应得到同一输出;清洗脚本不依赖当前时间、目录顺序或隐含全局状态。需要时间戳时把它作为运行元数据,不让它改变数据内容。
默认拒绝覆盖既有输出能防止误操作;如果允许覆盖,应要求显式开关,并在覆盖前确认输入、输出和报告绝对路径互不相同。幂等不等于“随时覆盖原始数据”。
测试至少覆盖:正常行、每种边界、缺失、非法类型、重复主键、Unicode 文本和空文件。生产数据出现新失败后,把匿名化最小案例加入回归测试。
机器学习边界
确定性规范(解析时间、映射固定枚举)可在划分前进行;但要先确定实体/文档/会话级 group_id 与冻结评测边界,避免同源内容已经跨集后才“补救”。会从数据学习统计量的步骤(均值填补、词表、缩放、近重复阈值校准或文本统计特征)必须只在训练部分拟合,并随模型 Pipeline 保存。评测集可以接受同一已冻结的确定性解析规则,但不能反向决定阈值、词表或清洗策略。
练习
为文档入库设计五个阻断关卡和三个告警关卡。每个关卡写出计算方式、阈值、失败动作与负责人。
掌握检查
- 我能画出原始、规范、有效、发布四层,并说明每层允许做什么。
- 我会先写临时文件再替换目标,并理解两个文件不构成单一事务。
- 我能证明同输入/规则重复运行逐字节一致,且失败不会覆盖源文件。
- 我会把生产新失败压缩成脱敏最小回归样例。
- 我会在发布清单中冻结 group/split 映射,并区分可全量执行的解析与只能训练集拟合的学习步骤。
下一步:项目:Agent 运行日志清洗。
参考资料
资料核验日期:2026-07-22。