测试与验证
桩数据与单元测试、只校验、预演、评测集;AIDC 用校验、预演和自己维护的评测集。

本课目标
读完这一课,你将能够
- 说出测试逻辑的三层办法:单元测试、试跑、评测集
- 用只校验和预演在不写任何数据的前提下测试改数据的逻辑
- 为一个用模型判断的工作流写出一份评测集,并说明为什么每个用例要跑多遍
先试,再信:三层测试
逻辑上线之前要能回答两个问题:写对了吗?改了之后变差了吗?标准模型用三层办法回答。
单元测试
用桩对象(内存里造的假对象)当输入。测改数据的函数,就断言它返回了哪些改动:新建了什么,改了哪个对象的哪些属性,有没有多余的改动。也可以给对象搜索和聚合预设答案,例如「这次聚合返回 55」。
试跑
在开发环境里直接跑一个函数,看结果。改数据的函数只返回改动清单,不会真的改对象。
评测集
给「每次结果不一定相同」的逻辑,尤其是模型。一批测试用例(输入加期望结果),被测的逻辑,和评测函数:把实际输出与期望比,得到真假或分数。
评测有几条规矩:
- 用例可以手写,也可以由一个对象集生成,每个对象一条用例;
- 评测函数返回真假或数字。每个指标要设目标:布尔指标要真还是要假,数值指标越大越好还是越小越好,还可以设阈值,据此判定通过与否;
- 改数据的逻辑在模拟环境里跑,真实数据不受影响;
- 语言模型的输出每次可能不同,每个用例至少跑三次,看整体通过率,不看单次结果。
在 AIDC 里:校验、预演、你自己的评测集
AIDC 已能发布和执行 Function。测试应覆盖真实查询函数的输出、编辑函数的改动,以及 Action 的规则和条件。新文档没有说明专用函数单元测试框架、桩对象、模拟环境或评测运行器。可以自行维护用例与断言,再用下面四种办法验证:
- 只校验
$validateOnly:每个参数、每条提交条件逐项给出结果(VALID或INVALID),什么都不写。命令行是--validate-only,不通过退出码为 2。 - 预演
工作流
mode: "preview"(--preview):读、算、AI 分析照跑,Action 只返回将要写入的计划。x-aidc-dry-run: true只校验输入;定义和部署也有--dry-run。 - 桩数据
预演读的是真数据,只是不写。要用捏造的数据练手,就用示例本体(Ontology),数据全是虚构的;要试定义的改动,放到分支上,读取时带
--branch。 - 评测集
你自己维护一个文件:每条是输入加期望结果。每次改提示词、换模型、改表达式,就把整套重跑,每条跑三遍。
下面是「有延期风险的订单」的评测集,文件格式是你自己约定的,AIDC 不会读它:
{
"workflow": "order-risk",
"cases": [
{ "name": "late-and-short", "input": { "order_no": "SO-2001" }, "expect": { "at_risk": true } },
{ "name": "on-time", "input": { "order_no": "SO-2002" }, "expect": { "at_risk": false } },
{ "name": "no-work-order", "input": { "order_no": "SO-2003" }, "expect": { "at_risk": true, "needs_review": true } }
]
}
for i in 1 2 3; do
aidc semantic automate run order-risk --param order_no=SO-2001 --preview --json > runs/SO-2001-$i.json
done
正式运行一次之后,用 aidc semantic edits-history workOrder --pk WO-1001 核对到底改了什么。这套做法和 AIDC 训练数字员工的「真题」是一个思路:至少十道真实的题,通过率不到门槛就不上线,上线后犯的错回流进题库。
测什么,怎么判
判断有两类。确定性的部分,如表达式算出的余量、提交条件是否拒绝,逐条断言精确的值。模型的部分,把要比对的结论声明成 boolean、number 或枚举字段,逐条精确比对;自由文本的原因不能精确比对,抽查,交给人看。
跑了一次,结果看上去对,上线。
12 条用例,每条跑 3 遍,at_risk 字段与期望逐条比对,通过率写进版本说明;改提示词后整套重跑,与上一版对比。
要点
- 测试逻辑有三层:单元测试(桩对象与断言改动)、试跑、评测集。
- 只校验与预演都不写数据:前者逐项检查参数和提交条件,后者让读、算、AI 分析照跑,写入只返回计划。
- 评测集 = 输入加期望结果;模型输出会变,每个用例至少跑三遍,看通过率。
- 把要比对的结论声明成
boolean、number等类型化字段,才能逐条自动判定。
练一练
为「有延期风险的订单」写一份评测集
用示例工厂的订单、工单和产线,先想清楚期望,再去跑。
输入订单号,期望 at_risk。至少要有:没有工单的订单;看上去晚、其实够的订单;工单已全部完成的订单。
在示例本体里对 adjust-seats 填一个小于成员数的座位数,加 --validate-only,记录退出码和失败信息。
你的一个工作流里,哪些输出字段能逐条精确比对,哪些只能抽查?把需要抽查的写成一条人工检查清单。
小测
选一个答案,马上看解析。
Q1想在不写任何数据的前提下,看一个工作流会把哪些改动写进 Semantic,用什么?
预演让读、算、AI 分析照跑,Action 只给计划;只校验检查的是参数和提交条件,不会列出改动。
Q2模型步骤每次的输出可能不同,评测时应该?
输出会变是模型的性质,单次对不能证明稳定;多跑几遍看整体通过率才有意义。
Q3下面哪个输出最适合做逐条的自动比对?
类型化的结论字段可以精确比对;自由文本要抽查、交给人看。