模板与程序化生成
本节目标
用因子矩阵、模板、模拟器和固定随机种子生成可解释的候选样本,并正确保留 family 与 provenance。
直觉解释
模板没有生成模型自然,但它像透明的实验夹具:每个变化来自哪个条件、正确答案为何成立、如何复现都很清楚。对 JSON、工具参数、权限边界和状态机任务,程序化生成往往是第一选择。
核心概念
- factorial design:系统组合多个离散因子,显式检查覆盖。
- template:把受控变量填入固定语言或结构。
- simulator:根据状态和动作规则产生输入、轨迹与 outcome。
- seed:让随机抽样和排列可重复;seed 不能修复错误逻辑。
- family ID:标记同一模板/原始事件的变体,用于组级划分。
- oracle:由规则或模拟器给出的期望答案/状态。
- provenance record:模板版本、变量、seed、代码版本和生成时间。
全组合、约束组合与抽样
若有 6 个因子、每个 5 个取值,完整笛卡尔积已有 格,还未加入语言改写。先用业务规则删除不可能组合,再把安全/权限等高风险交互设为必须覆盖;资源有限时可采用 pairwise 等组合测试思想,但必须把未覆盖的高阶交互列为缺口。随机抽样只能在已定义的任务空间内分配预算,不能替代任务空间设计。
模板、模拟器和 property-based testing 可以分工:模板控制表述,模拟器决定状态转移,属性检查验证“不越权”“不会重复付款”“最终状态可复现”等不变量。对 Agent 数据,input + expected_text 往往不够,还要保存初始状态、允许工具、期望最终状态、禁止副作用和 reset 方式。
分步骤方法
- 从数据契约选 2~4 个关键因子,避免一开始组合爆炸。
- 为每个组合写可程序验证的 oracle。
- 每个语义 family 准备少量表述模板;先保证标签正确,再扩展语言变化。
- 生成稳定 ID,保留 family、模板 ID、变量和 generator version。
- 固定 seed 只用于排序、抽样或数值扰动;在 manifest 记录。
- 运行 schema、逻辑不变量和禁用值检查。
- 人工抽查每个条件格,而不是只随机看总体。
生成 ID 时不要把随机顺序当身份。稳定 ID 应来自 family、模板和变量的规范化表示;seed 只决定抽样/划分。这样更换顺序后仍能追踪同一候选,也能明确判断内容变化是否需要新版本。
示例
订单查询的三个因子:
language = {zh-CN, en}
scenario = {status, missing-id, write-request}
tool_state = {ok, timeout}完整笛卡尔积有 个条件格。若 write-request 在 timeout 下没有业务意义,就在契约中明确排除,而不是生成后悄悄删除。
一个样本保留:
{
"id": "syn-zh-status-ok-001",
"family_id": "zh-status-ok",
"template_id": "status-ask-v2",
"variables": {"order_id": "SYN-001"},
"synthetic": true,
"generator_version": "template-pipeline-1.0.0"
}使用明显的虚构 ID,避免误把真实标识符带入教程或共享数据。
常见错误与排查
- 模板表面变化很多但语义相同:统计 family 与条件覆盖,不只数行。
- 变量组合产生矛盾:写不变量,如 delivered 状态不能同时是 in-transit。
- 每条变体随机划分:同一 family 会跨 train/test;按 family 划分。
- 固定 seed 就称完全复现:还要冻结代码、模板和依赖。
- 模板语言僵硬:把它作为可验证基线,再引入人工或模型改写并重新验收。
练习
- 为日历 Agent 设计“意图×时间表达×权限”矩阵。
- 写三个不变量和两个明确排除的组合。
- 设计不会泄露真实身份的变量池和 ID 规则。
自测
- 程序生成的标签一定正确吗?不一定,oracle 和模板代码也可能有 bug。
- 全因子组合一定必要吗?不一定,应按业务意义、风险和预算选择。
- 为什么保留 family ID?用于去重、分层诊断和防止变体跨划分。
小结与下一步
模板/模拟器提供透明可复现的骨架,但语言和开放任务覆盖有限。下一步进入 模型生成与条件覆盖,在不丢失契约和 provenance 的前提下扩展候选池。
参考资料
- NIST AI 600-1:记录 GAI 数据来源、TEVV 与合成数据风险(获取日期:2026-07-14)
- Google Data Cards Playbook(获取日期:2026-07-14)