郭禹 · AI数据采购Owner实战学习包

返回课程入口

验收工具实战教程

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条检查并读报告规则—错误—整改映射
2ffprobe查看三种属性差异16000/8000Hz、单/双声道对比
3手算并选做JiWER2/7 WER说明及分词口径问题
4选做Label Studio复核两条带理由的人工结果
5Agent状态检查及综合反馈一页可追溯的验收结论

面试可以这样演示:先说明这是自建教学DEMO;给面试官看规格,再运行脚本,解释三个不同问题,说明哪些内容未检查,最后展示反馈和复验方法。把真实客户项目经验与教学工具能力分别说明。

工具熟练度是支撑;你的优势仍应体现在多语种需求拆解、成本与周期、基地协作、风险识别和交付闭环上。

一分钟自测

脚本显示“无配置规则问题”,能否直接通知客户全部合格?