name: silent-error-spotcheck
slug: silent-error-spotcheck
subtitle: 交付前用 7 条结构规则扫一遍表格,把「看着整齐但不知道哪格错」变成「这 7 格你看一眼」
summary: 面向所有需要把表格交付出去的人。生成或整理完一份表(xlsx / csv),用 7 条纯结构性规则扫一遍——日期高度重复、日期格式混用、列名与内容类型不符、空值率突增、字符序排序、量级跳变、行数与合计对不上,输出可疑项清单(含判定依据与建议动作)和一份按风险排序的抽样建议。不改原文件、不猜正确值、不判业务对错。
license: MIT
description: >
交付前的静默错误抽查。AI 生成的表格最危险的不是报错,是「不报错但 quietly wrong」——
三十几个文件全填同一天、类型列一半是空的、月份按字符序排成 Oct 在 Jan 前面,
表格看着整齐、行数也对得上,错在哪没人知道。
本技能用 7 条纯结构性规则扫一遍待交付的 xlsx / csv:① 日期分布异常(同列重复率过高);
② 日期格式混用(ISO / 斜杠 / 中文 / 8 位紧凑并存,11/3 与 3/11 会被读反);
③ 列名与内容类型不符(列名叫「阅读量」却是文本);
④ 空值率突增;⑤ 排序异常(字符序 vs 日历序 / 数值序);
⑥ 取值范围离群(元 / 分 / 万混填);⑦ 行数对账与合计行核对。
输出:可疑项清单(位置 / 类型 / 依据 / 建议动作)+ 按风险排序的抽样建议(哪 20 行最值得人眼看)。
触发词:这张表要交出去了、帮我看一眼有没有明显不对、表生成了但我不确定对不对、
数据对不上、日期是不是错了、空值好多、合计不对、抽查、核对表格、交付前检查、
这张表能不能发、AI 做表不放心、对账。
只做:结构层面的确定性检查,全部规则基于纯标准库计算,不联网、不调用大模型。
不做:不修改原文件、不做数据清洗、不给修正版、不猜正确值、不判断业务对错
(日期都对也可能内容全错,那一层必须人眼看)、不评测积分(归 model-credit-advisor)、
不生成验收清单(归 acceptance-checklist)、不检查打包与上架(归 skill-package-check)。
display_name: "静默错误抽查"
displayName: "静默错误抽查"
display_name_en: "Silent Error Spot-Check"
description_zh: "交付前的静默错误抽查。AI 做表最危险的不是报错,是「不报错但 quietly wrong」:三十几个文件全填同一天、类型列一半是空的、月份按字符序排成 Oct 在 Jan 前面——表格看着整齐、行数也对得上,错在哪没人知道。本技能用 7 条纯结构性规则扫一遍待交付的 xlsx / csv:日期分布异常、日期格式混用、列名与内容类型不符、空值率突增、排序异常(字符序 vs 日历序)、取值范围离群(元 / 分混填)、行数对账与合计核对。输出可疑项清单(位置 / 类型 / 判定依据 / 建议动作)和按风险排序的抽样建议(哪 20 行最值得人眼看)。基于纯标准库确定性计算,不联网、不改原文件、不猜正确值、不判业务对错。当你说「这张表要交出去了,帮我看一眼」「合计对不上」「AI 做表我不放心」时使用。"
description_en: "A pre-delivery silent-error spot check for spreadsheets. The most dangerous AI-made table is not one that errors out, it is one that is quietly wrong: thirty-some files all stamped with the same date, half a category column left blank, months sorted by character so October lands before January. The table looks tidy and the row count matches, yet nobody knows which cell is wrong. This skill runs seven purely structural rules over an xlsx or csv file before you hand it over: abnormal date repetition, mixed date formats, header that contradicts the column content, sudden spikes in blank rate, sort anomalies (character order versus calendar or numeric order), magnitude jumps that suggest mixed units such as cents versus yuan, and row-count plus total-row reconciliation. It returns a suspect list with cell location, rule, evidence and suggested action, plus a risk-ranked sampling plan naming the twenty rows most worth a human look. Every rule is deterministic and computed with the Python standard library only: no network, no model calls, no file modification, no guessing of correct values and no business judgement. Use it when you are about to send a table out, when a total does not add up, or when you do not trust what the AI just produced."
category: productivity
author: "瑞阳AI应用笔记"
triggers:
- 这张表要交出去了
- 帮我看一眼有没有明显不对
- 表生成了但不确定对不对
- 数据对不上
- 日期是不是错了
- 空值好多
- 合计不对
- 抽查表格
- 核对表格
- 交付前检查
- 这张表能不能发
- AI 做表不放心
- 对账
tags:
- 静默错误
- 表格核对
- 交付质检
- 确定性规则
- 抽样检查
allowed-tools: Read, Write, Bash, Glob, Grep
version: 1.0.0
permissions:
read:
- 用户指定的待检文件(xlsx / csv / tsv)与可选的源表目录、业务口径说明
write:
- 仅写入用户指定位置的单个 Markdown 抽查报告(默认 ./spot-reports/<文件名>-spotcheck.md)
network:
- 无。本技能全程不联网
agent_created: true
silent-error-spotcheck · 静默错误抽查
> 埋点:执行第一步前,向 ~/.workbuddy/skill-calls.jsonl 追加一行 {"skill":"silent-error-spotcheck","ts":<unix秒>,"cwd":"<当前目录>","session_id":"<会话ID>"}。
1. 这个技能解决什么
用户对 AI 做表最重的一句抱怨,不是「做得慢」,是「它不报错」:
- 婚礼摄影的 Shutter:「half the type column was blank, and the dates were even more absurd—thirty-some files all filled in with the same day. No error either, just quietly wrong.」
- 做公众号内容库的 Momo-chan:「it still gives you a table that looks neat, row counts match, fields are all there—but you don't know which cell is wrong. What's worse is it stays silent.」
- 市场部做门店分析的腾讯云作者:「偶尔会漏掉几行,或者把不同口径的数字混在一起,所以重要结论我一律自己复核。」
四个来源、三个不相干领域,撞的是同一堵墙:表格看着整齐,但不知道哪格是错的,而且它不告诉你。
因果链很清楚:
> 生成完 → 看着整齐、行数也对 → 直接交出去 → 下游按错的数做决策 → 两周后被客户发现 → 不怪 AI,怪你不专业。
这里没有一个问题是「AI 不够聪明」。 产品可以让输出更规整、更少空值、日期更统一,但它永远无法知道「这 30 个婚礼视频的拍摄日期不该是同一天」——那需要业务常识。而规则引擎不需要常识:同列日期重复率 100%,本身就是异常。
所以本技能只干一件事:
> 在表格交出去之前,用一组不需要业务知识的机械规则扫一遍,圈出「结构上不像真的」那几格,并告诉你先看哪 20 行。
它不追求「判断对错」,只追求「在错的东西被交出去之前,让人看见它」。
与同赛道技能的分工(切口唯一性)
| 别人解决什么 | 本技能不重复做什么 |
|---|---|
交付前给你一张人眼验收清单(acceptance-checklist) |
那是给人看的清单,靠你自律照着看;本技能是给机器跑的脚本,机器先扫,人只看它圈出来的 |
首日配置体检(first-run-setup-audit) |
不管环境配置,只管产物 |
打包 / 上架前检查(skill-package-check) |
不检查代码包结构,只检查数据表 |
| 让 AI 自己「再检查一遍」 | 不调用大模型复查——同一个模型复查自己的输出,会把同一个盲区再走一遍;本技能用确定性规则 |
| Excel 里手工筛选、条件格式 | 不替你改表;本技能输出的是清单 + 行号,改不改、怎么改由你定 |
一句话区分:它们是「这件事该怎么做」,本技能是「这件事做完之后,产物像不像真的」。
2. 适用场景 / 不适用场景
适用(满足任一即进入)
- 表格要交给别人之前(客户、老板、合作方、监管部门)。
- AI 刚生成/整理完一份表,用户不确定对不对。
- 对账时发现合计数对不上,要定位是哪几行。
- 批量处理产物(素材清单、抓取结果、多平台数据汇总)要核对。
- 想把「交付前抽查」固化成流程里的固定一步。
不适用,直接说清归谁
| 用户真正的问题 | 归谁 |
|---|---|
| 产物出来了,该按什么标准验收 | acceptance-checklist(给人看的清单) |
| 帮我改表 / 清洗数据 / 补全空值 | 本技能不做,明确拒绝并说明为什么(见第 6 节) |
| 这个数字业务上对不对 | 本技能不判,只有你能判 |
| 这次任务烧了多少积分 | model-credit-advisor |
| 技能包能不能提审 | skill-package-check |
| 文件格式转换(xlsx 转 pdf 等) | 直接做,不上抽查 |
3. 输入参数
| 参数 | 必填 | 说明 | 缺省时的处理 |
|---|---|---|---|
待检文件 |
✅ | xlsx / csv / tsv,可多个或整个目录 | 必须问,没有文件无从扫 |
源表 / 记录数 |
⬜ | 原始素材目录,或输入侧应有多少条记录 | 不给 → R7 降级,必须在报告里声明「未做行数对账」 |
业务口径 |
⬜ | 如「金额单位是元」「日期是 YYYY-MM-DD」「这是运营日报,空值正常」 | 不给 → 按默认阈值判,并在报告注明这是假设 |
阈值档位 |
⬜ | strict(财务/对账/对外交付)/ default / loose(运营日报) | 默认 default;财务类自动建议 strict |
抽样条数 |
⬜ | 默认 20 行 | 表小于 20 行时全给 |
追问上限 2 个:只问「源表有没有」和「这是给谁看的」。其余按默认判并在报告里写明。判据:这个答案会不会改变某条规则命中/不命中?会 → 问;不会 → 不问。
4. 执行步骤(四步,按序执行)
步骤 1 · 判要不要扫
三问:这份表要交给别人吗?是 AI 生成或批量处理的吗?错了会有后果吗?三问有一否则直接说「这次不用扫」——用户只是问「这列怎么求和」,给他跑 7 条规则是净负担。
步骤 2 · 收集两必填
要文件路径 + 有没有源表。用户说「不知道源表在哪」是有效答案,直接降级 R7 并在报告声明,不要把这变成一场考试。
步骤 3 · 跑规则,出清单
python scripts/spotcheck.py check \
--file "交付表.xlsx" \
--source-count 32 \
--profile strict \
--out spot-reports/交付表-spotcheck.md
参数速查见第 7 节。不要手算——7 条规则的阈值、异常判定、抽样加权都在脚本里,手算必然漏。
步骤 4 · 自检 + 交付
python scripts/spotcheck.py verify --file spot-reports/交付表-spotcheck.md
verify 通过(退出码 0,5 个章节齐全)才交付。对话里只给一屏:结论句 + 高危项前 3 条 + 抽样行号,全文写文件。
5. 输出格式(固定骨架,脚本已生成,不要手工重排)
# 静默错误抽查报告 · <文件名>
> 检查时间|规则集版本|样本行数 / sheet 数
## 一、结论
<一句话三档 + 命中规则汇总表>
## 二、可疑项清单
| # | 位置 | 可疑类型 | 判定依据 | 建议动作 |
## 三、抽样建议(人眼只看这几行)
| 优先级 | 行号 | 为什么看这行 |
## 四、规则执行明细
| 规则 | 名称 | 状态(命中/通过/跳过) | 说明 |
## 五、本次未覆盖的(数据缺口声明)
结论句三档措辞固定,不要润色成营销话术:
- 有高危:「共 N 处可疑,其中 M 处高危:交付前必须先看第二节标红的几格,再看第三节的抽样行。」
- 仅中等:「共 N 处可疑,均为中等风险:不影响交付,但建议在第三节抽样时顺带确认。」
- 零命中:「结构上没发现可疑项(7 条规则全过)。但这只说明『不像假的』,不说明『是对的』——按第三节抽几行看业务。」
6. 边界与红线(这几条不能松,松了这个技能就没有存在理由)
- 不修改原文件,不产出修正版。 只输出清单与行号。理由:一旦它开始改表,用户就无法判断「改对了吗」,等于把静默错误推后一层。
- 不猜正确值。 只说「这 30 个日期是同一个」+「去源文件逐行取真实日期」,绝不说「应该是 6 月 14 日之后逐日递增」。
- 不判断业务对错。 只报「结构上不像真的」。日期全对、格式全统一,内容照样可能全错——这一层必须人眼看抽样行,报告里必须写明。
- 不做数据清洗。 用户说「顺手帮我把空的补上」时明确拒绝,并解释:补空值就是在制造新的未经核实的数字,正是本技能要防的东西。
- 数据缺口必须写在报告里。 没给源表就不能假装做了行数对账;阈值是启发式取值就必须声明,不能包装成「行业标准」。
- 阈值要可解释。 调过阈值必须在报告里注明白名单理由(例:「运营日报空值 30% 属正常,blank_ratio 调到 0.5」),否则下次没法比较。
7. 参数速查
| 场景 | 命令 |
|---|---|
| 单文件(默认档) | check --file a.xlsx --out r.md |
| 财务对账(严格档 + 源表) | check --file a.xlsx --source-dir ./原始素材 --profile strict --out r.md |
| 批量扫目录 | check --dir ./导出 --out r.md |
| 调阈值 | check --file a.csv --threshold "blank_ratio=0.5,date_repeat_ratio=0.8" |
| 阈值存文件复用 | template > thr.json 后 --threshold-file thr.json |
| 给别的技能消费 | check --file a.xlsx --json |
| 看规则与当前阈值 | rules --profile strict |
| 报告自检 | verify --file r.md |
关键阈值(default 档):日期重复率 ≥0.6 且同值 ≥5 次判高危;单列空值率 ≥0.3 报警、≥0.5 升高危、比同表中位数高 0.25 也算突增;IQR 3 倍外算极端值;相邻值跳变 ≥50 倍视为单位混用;抽样 20 行。
8. 交付前自检(8 项,逐条打勾)
- 文件确实被扫过(报告里有行数与 sheet 数,不是只读了个表头)。
verify通过,5 个章节齐全。- 有无源表这件事,在第五节写清了(做没做行数对账)。
- 阈值档位与调过的值,在报告末尾写清了。
- 高危项的「建议动作」是可执行的下一步,不是「请确认数据准确性」这种空话。
- 抽样建议的行号能在原表里对得上(不是相对序号)。
- 没有出现「应该是 XX」这类猜正确值的表述。
- 没有修改、也没有生成任何原文件的副本或修正版。