验收工具实战教程
AI数据采购Owner实战课 · 第二册 · 2026-09-28
目标:会选择工具、运行检查、解释证据,并组织整改与复验。学习顺序是一个项目的验收链路,不是把市面上所有软件都装一遍。
01 先画清楚验收的五层
| 层次 | 要回答的问题 | 本课工具或方法 |
| 结构 | JSON能解析吗,字段类型对吗 | Python教学检查器;扩展了解JSON Schema |
| 文件 | 文件存在吗,能读吗,属性匹配吗 | wave、ffprobe;必要时解码检查 |
| 内容 | 转写对吗,标签对吗,任务完成吗 | 参考文本比对、人工复核、状态断言 |
| 批次 | 数量、重复、分布和抽样结论如何 | 统计脚本与项目抽样方案 |
| 交付 | 来源、授权、审核及返工证据完整吗 | 文件审查、过程记录、合同约定 |
AI公司可能把开源工具、自研规则和商业平台组合起来。你不需要猜客户用了哪一款软件;先拿到交付规格、验收口径、样例、错误分级、抽样方式、返工及复验机制。
本课的“工具通过”只表示某一层的已配置检查通过。完整接收还需要剩余层面的证据和授权人员确认。
02 一张选择表:先学哪些
| 工具 | 现在做什么 | 输入 / 输出 | 不能证明什么 |
| 本课Python检查器 | 必做,建立完整流程 | JSONL+WAV→问题报告 | 真实语音质量、授权 |
| Python wave | 必做,已嵌入检查器 | PCM WAV→属性 | 所有编码格式、语义 |
| ffprobe | 选做,了解实际媒体属性 | 媒体→JSON属性 | 转写对、无噪声、全文件可解码 |
| JiWER | 选做,算WER/CER | 参考文本+识别文本→差异 | 无参考时的真实准确率 |
| Label Studio | 选做,体验人工复核 | 任务+界面配置→人工标注 | 自动完成最终验收 |
| 本地Agent断言 | 必做,理解状态验证 | 模拟轨迹+状态→检查结果 | 真实线上环境可靠性 |
本课不要求安装CVAT、商业标注平台或全套数据质量框架。遇到图像/视频项目再学习对应平台的任务、标注格式和复核功能。
03 实战一:用现成检查器验20条
前置:第一册已能运行Python。打开课程根目录终端:
python tools/validate_batch.py打开reports/my_run/report.html。逐项看真实行号、样本编号、规则代码、错误或暂缓等级、证据说明。
任务:将18条问题按处理部门归类。导出结构问题给数据工程;漏文件给交付;采样率和声道问题给采集技术;质检未完成交给质量负责人;重复编号需要追溯原始映射。
不要为了通过检查直接把False改True;也不要不查来源就重命名重复编号。重新采样或转单声道也可能改变数据并违反原始采集要求,应按合同确认可否处理、保留原始版本及变更记录。
成功标志:你能说明第19、20行只是“未发现本轮配置规则问题”,不能宣称是真实语音合格。
04 实战二:ffprobe看真实音频属性
ffprobe属于FFmpeg工具集。本课基础部分不依赖它。如果已经安装,在终端运行ffprobe -version确认;未安装请从FFmpeg官方下载入口查看Windows构建链接和说明,选择可信来源并按其步骤配置。解压位置有空格时使用完整路径引号。
确认可用后,在课程根目录执行:
ffprobe -v error -select_streams a:0 -show_entries stream=codec_name,sample_rate,channels:format=duration -of json data/audio/S009.wav参数不用背:-v error减少无关日志;a:0选第一条音频流;show_entries指定想看的字段;-of json把结果输出成JSON。
本包S009是8000Hz单声道1秒PCM音频。你应在结果中看到sample_rate为"8000"、channels为1、duration约"1.000000"。ffprobe常把部分数值输出为字符串;要先按接口定义转换,再和项目规则比较,不能直接套用交付JSON的类型规则。
对照S001应为16000Hz;S010为双声道;S013是假WAV,应报错。它们分别代表属性不匹配和无法识别的文件。
也可用本包的包装脚本:
python tools/check_ffprobe.py data/audio/S009.wav若没有配置PATH,可指定真实位置:
python tools/check_ffprobe.py data/audio/S009.wav --ffprobe "C:/你实际的目录/ffprobe.exe"上面是路径示意,必须换成你自己的位置。脚本调用ffprobe、解析其JSON,遇到失败明确停止。它只展示属性,项目判定仍要和规格比较。
读取文件头不等于全文件解码成功。如果项目需要,可以另外使用FFmpeg将文件完整解码到空输出,例如ffmpeg -v error -i data/audio/S001.wav -f null -;即使解码成功,也不能证明没有噪声或转写正确。
Owner追问:双声道是否保留了不同说话人的独立通道?音频原始采样率是多少?是否有转码历史?客户要求原始录制还是允许转换?这些不能靠一个sample_rate字段回答。
依据:ffprobe官方文档。
05 实战三:先手算WER,再用JiWER
WER是字词级差错率,公式为(S+D+I)/N。其中S是替换数、D是删除数、I是插入数、N是参考文本词数。WER越低通常表示与该参考文本越接近;它可能大于100%,不能笼统叫“准确率”。
例1参考:please open the door。识别结果:please open door。参考4词,漏掉the,D=1,所以WER=1/4=25%。
例2参考:turn left now。识别结果:turn right now。参考3词,left被替换为right,S=1,所以WER=1/3≈33.33%。
合并批次:总错误2,总参考词7,所以批次WER=2/7≈28.57%。不是把25%和33.33%直接取平均。汇总口径必须先约定。
中文例子:参考“你好世界”,识别“你好世间”,按字符计算CER为1/4=25%。CER与WER是不同粒度,不应直接横向排名。
这些是人为构造文本,不对应本包合成音,也不证明你们基地的ASR质量。
06 配置可选工具环境并运行JiWER
第三方包建议放独立虚拟环境,避免干扰已有项目。在课程根目录逐行执行:
python -m venv .venv-tools
.venv-tools/Scripts/python.exe -m pip install jiwer
.venv-tools/Scripts/python.exe tools/check_jiwer.py不需要执行激活脚本,也不需要修改PowerShell执行策略。第一行创建环境,第二行下载并安装工具,第三行明确用这个环境运行。本课基础部分无需安装任何第三方库。
预期:S=1、D=1、I=0;批次WER约0.285714;中文CER=0.25。工具还会显示文本对齐结果,帮助定位错误在哪里。
安装失败时先检查网络、Python兼容版本和错误提示,不要反复管理员运行或下载来源不明的安装包。记录实际安装版本:
.venv-tools/Scripts/python.exe -m pip show jiwer动手:将例1识别文本副本改成please open the door now,预期插入1个词,单条WER仍为25%。这说明相同分数可以对应不同错误原因。
工具用法依据:JiWER官方使用文档。如果工具新版接口改变,以文档和实际错误为准,不修改参考文本来凑目标分数。
07 指标合同:多语种项目必须问清的事
| 事项 | 需约定的口径 | 不约定的后果 |
| 参考答案 | 谁审核,如何仲裁,版本是什么 | 用错参考导致错误扣分 |
| 大小写、标点 | 保留还是统一处理 | 同内容不同写法产生差异 |
| 数字 | 21与twenty one怎样对齐 | 口径不同引发争议 |
| 分词 | 泰语等如何切词,版本是什么 | WER不可复现 |
| 语言切换 | 外语词与混合语种如何处理 | 同一内容标法不一致 |
| 无语音片段 | 是否纳入,空参考如何处理 | 分母与错误率失真 |
| 汇总 | 总错误/总参考单位,或其他约定 | 批次成绩不一致 |
| 抽样 | 抽什么、多少、如何随机与分层 | 漏掉某些语种或采集环境 |
本课JiWER练习未做大小写和标点归一化,直接按示例文本比较。真实项目应冻结归一化、分词和工具版本,并保存输入及运行配置。
对你已有项目中的“war>99%”,面试时应说明这个指标原名、计算公式、评测分母、抽样规模、语种、参考答案和客户口径。不要未经确认就把它改写成“WER<1%”或跨项目通用的准确率。
没有可靠参考文本,就不能通过JiWER凭空获得真实转写准确率。自动ASR模型输出也不天然等于金标准,需要独立审核策略。
08 实战四:Label Studio体验人工复核
目的:理解如何把任务交给审核员、收回意见、保留理由。无需一开始部署给整个基地。本练习只有两条文本,无音频,不能用来判定听写准确性。
安装是选做。先查官方快速入门的当前Python兼容要求。为其单独建环境:
python -m venv .venv-label
.venv-label/Scripts/python.exe -m pip install label-studio
.venv-label/Scripts/label-studio.exe start --internal-host 127.0.0.1 --port 8080若命令选项与已安装版本不一致,先运行.venv-label/Scripts/label-studio.exe start --help,对照官方说明。只做本机练习;不要未经批准开放到公网。运行服务器的终端需保持打开;结束时按Ctrl+C。
操作步骤:
1. 在浏览器打开终端提示的本地地址,按界面建立本地练习账户和新项目。名称可用“文本差异复核DEMO”。
2. 导入label_studio/tasks.json,确认出现两条任务,而不是把每个字段当成独立任务。
3. 在标注界面配置位置,粘贴label_studio/config.xml内容。界面会显示参考文本、待检文本、“一致/有差异/需仲裁”三选一和理由栏。
4. 两条都应选“有差异”。T01理由:缺少the;T02理由:left被写为right。无需把示例文字改成一样再判一致。
5. 导出JSON,检查每条任务是否保留任务数据、选择结果与理由。核对数量为2,理解原始data和人工annotations不是同一部分。
平台里的完成状态是工作流状态,不自动证明审核正确。真实基地还需要培训、金标准、交叉复核、争议仲裁和审计记录。不同版本/版本套餐的团队管理与质检功能可能不同,本课不假定所有企业功能免费可用。
本包提供可导入素材和配置;没有替你安装或开通平台。请以当前界面的实际名称为准。
09 JSON Schema:先理解它的边界
JSON Schema是一种描述字段、类型、必填项和枚举等结构规则的方式,不是某一家公司的专属软件。客户可能提供schema文件,也可能提供Excel字段表或自研校验脚本。
例如:要求sample_id是字符串、duration_seconds是数字、language只能从指定列表选。这些适合结构检查。
“音频真的存在”“整批sample_id唯一”“转写与原音一致”“供应商有授权”通常还需要额外程序或人工流程。拿到schema后,你应该问:使用哪个版本、额外业务规则有哪些、失败报告怎样返回?
本课Python检查器没有使用JSON Schema库,不要把它介绍为通用Schema验证器。结构规范参考:JSON Schema官方学习资料。
10 实战五:Agent验收看状态
运行:
python tools/check_agent_demo.py预期A“调用字段正确=True、目标状态达成=False”;B两项都是True。两个回答都声称“已取消”,但A的模拟订单状态根本没变。
这个程序只是本地字典模拟,没有登录、没有调用真实订单API,也不会取消任何真实订单。
动手:在副本里把B的order_id改成DEMO-99,应出现调用字段检查失败,即使状态仍写着已取消。你由此能解释:正确结果、正确对象与合规过程需要分别检查。
| 数据任务 | 采购应索取 | 关键验收问题 |
| Coding | 题目、解答、测试、环境和授权 | 测试覆盖什么;是否有泄漏;能否复现 |
| API调用 | 工具schema、参数、响应、错误分支 | 参数正确且符合当前工具版本吗 |
| Agent轨迹 | 初始状态、动作、观察、最终状态 | 目标达成且无未授权副作用吗 |
| 偏好数据 | 候选回答、选择、理由、标注规则 | 分歧如何仲裁;偏好依据一致吗 |
真实候选代码应在隔离环境运行,限制网络、文件访问、资源和超时。会用本课脚本不意味着可以安全执行未知供应商代码。
11 从试标到最终验收的闭环
1. 需求澄清:用途、范围、语种/场景分布、格式、授权、数量单位与验收口径。小时是原始时长还是有效时长,必须写清。
2. 试标:选择能覆盖主要风险的小样本,先让采购、算法、质量和供应商对齐标准,不以单一简单样本代替。
3. 固化规格:数据字典、样例、错误分类、工具与规则版本、抽样方法、阈值、返工规则。
4. 交付登记:保存输入清单、版本、数量和哈希,保留原始包,检查缺交及额外交付。
5. 自动检查:尽量全量做低成本结构与文件检查;明确哪些失败阻断、哪些暂缓、哪些警告。
6. 内容复核:按事先约定的方案抽样或全量审核,覆盖语种、供应商、采集场景和风险层。记录抽样母体、方式、数量、发现和局限。
7. 反馈与整改:按行号、样本编号、规则和证据反馈。规定根因分析、修改清单与重新交付版本。
8. 复验:复查被改项及可能受影响的关联项,重新核对数量和唯一性;是否扩大抽检按协议和实际风险决定。
9. 形成结论:接受、附条件接受、暂缓或退回的使用方式依合同。写明签字角色、剩余事项和付款触发条件。
本课程没有给行业统一抽检比例或合格阈值,因为不同用途、缺陷类型和风险不能共用一个数字。
12 给工程师的规则需求怎么写
不要只说“帮我看看音频对不对”。可写成:
“对交付清单中的每条记录,检查audio_path对应文件是否存在;检查实际采样率为16000Hz、声道数为1、位深为16-bit PCM;按教学规格v1,实际时长与声明时长差不超过0.02秒。缺文件和属性不符列为error,质检声明false列为hold。报告包含真实行号、sample_id、规则代码、实际值、期望值,并按行去重统计。报告必须注明未验证转写内容和授权。”
这段仅对应本教学项目,真实需求要替换规格并补全边界,例如允许哪些编码、怎样处理无法读取、是否全量解码、是否检查孤立文件、怎样识别重复内容。
13 五次工具训练与面试演示
| 次数 | 任务 | 交付物 |
| 1 | 跑20条检查并读报告 | 规则—错误—整改映射 |
| 2 | ffprobe查看三种属性差异 | 16000/8000Hz、单/双声道对比 |
| 3 | 手算并选做JiWER | 2/7 WER说明及分词口径问题 |
| 4 | 选做Label Studio复核 | 两条带理由的人工结果 |
| 5 | Agent状态检查及综合反馈 | 一页可追溯的验收结论 |
面试可以这样演示:先说明这是自建教学DEMO;给面试官看规格,再运行脚本,解释三个不同问题,说明哪些内容未检查,最后展示反馈和复验方法。把真实客户项目经验与教学工具能力分别说明。
工具熟练度是支撑;你的优势仍应体现在多语种需求拆解、成本与周期、基地协作、风险识别和交付闭环上。
一分钟自测
脚本显示“无配置规则问题”,能否直接通知客户全部合格?