CTGAN+LLM 组合拳:携程测试数据生成工程方案¶
📊 Level ⭐⭐⭐ | 9.8KB
测试人员44%的时间耗在数据构造上。携程提出CTGAN+LLM的工程化方案,让二者各司其职:CTGAN负责高丰富度独立字段生成,LLM负责关联关系字段生成。
背景¶
在软件测试过程中,构造测试数据是基础而关键的工作。Capgemini与Sogeti联合研究表明,测试人员通常需要耗费44%的测试时间用于测试数据的生成与管理。
常见方式:手动创建(成本高,受限于业务理解)或从线上数据库同步(隐私合规风险,无法覆盖极端用例)。合成数据(Synthetic Data)成为新解。
模型调研对比¶
携程测试团队评估了四种主流模型在高斯模型、TVAE、CTGAN和LLM上的表现,聚焦三个维度:
| 模型 | 字段间关系 | 枚举字段覆盖率 | 生成速度 | 核心局限 |
|---|---|---|---|---|
| 高斯模型 | 仅线性 | 损失约30% | <1s/条 | 正态假设严格 |
| TVAE | 弱非线性 | 损失较多 | <1s/条 | 分类变量效果差 |
| CTGAN | 隐式统计关联 | 100% | <10s/条 | 无法学字段逻辑 |
| LLM | 最优(语义理解) | 损失约30% | 43s/条 | 输出不可控、低效 |
结论:LLM与CTGAN分别满足真实性(字段间关系)与丰富度(枚举字段覆盖率)的诉求,但各有局限。
核心方案:LLM-CTGAN协同¶
架构¶
四个模块:关联关系识别 → 数据生成 → 指标监控 → 数据修复
关联关系识别¶
利用LLM对样本+建表语句进行语义分析,将字段分为两类: - 独立字段 → 由CTGAN生成(最大化丰富度) - 关联字段 → 按分组由LLM生成(保持逻辑一致性)
三步流程:LLM初分组 → LLM批评修复 → 规则过滤枚举字段。
生成实现¶
CTGAN实现: - 训练集:线上10000条真实数据,按id倒序获取(取值覆盖率85%) - 分批训练策略解决内存崩溃问题 - 预保存模型参数 → 后续生成0.16s/条(首次1.99s/条) - 使用SDV库搭建,LLM解析DDL生成Metadata - 6张库表验证:CTGAN保持与训练集完全一致的枚举字段覆盖率
LLM实现: - 训练集:从10000条压缩至1000条(差异化抽样,平均相对熵比提升15%,枚举覆盖率+32.3%) - 模型:自部署Deepseek-R1-Friday(全参671B) - Markdown格式输入输出,三次Prompt迭代优化
Prompt工程演进¶
从三个版本的Prompt演化可见LLM生成的核心挑战: - V1:要求保持完全一致丰富度+均匀分布 → LLM处理非分类字段时效率极低 - V2:去掉均匀分布要求 → 仍存在非分类字段问题 - V3(最终版):按字段类型差异化约束(枚举类保持丰富度,连续类保持范围可随机) → 稳定生成
评估指标¶
双维度评估体系: - 字段列指标:枚举字段覆盖率、字段间关系、数据有效性 - 数据行指标:Discriminator Score(CTGAN判别器反打生成数据)+ Rule Validity(LLM规则形式化验证)
实验结果¶
在10000条训练集上,每次生成1000条、执行10次取平均。
直接使用LLM生成1000条数据时:生成多样性严重下降,字段取值趋向高频固定值,流程失败率>90%,生成时间>60s/条——不适合大数据量生成任务。
LLM-CTGAN协同方案在行级和列级指标上均优于CTGAN基线。
总结¶
LLM与CTGAN"各展所长":CTGAN最大化枚举字段丰富度,LLM学习复杂字段间逻辑规则。
未来方向:复杂表间关系识别、效率提升与成本优化(离线推理)、通用平台建设。
深度分析¶
为什么 CTGAN 与 LLM 天然互补¶
表格测试数据的"质量"其实是两件不同的事:丰富度(每个字段内部的取值多样性)与真实性(字段与字段之间的逻辑关系)。携程的四模型对比恰好暴露了没有任何单一模型能同时做好这两件事——CTGAN 靠条件生成机制把枚举字段覆盖率做到 100%,却学不会多字段联合约束;LLM 凭语义理解从字段名和建表语句推出字段间关联,却输出不可控、43s/条的低速也不适合批量生产。协同方案的本质是一次按字段类型的分工:用 LLM 做语义分析把字段切成"独立字段"与"关联字段"两类,前者交给 CTGAN 最大化丰富度,后者按分组交给 LLM 保持逻辑一致性。这样两个模型的短板都被对方接住了——CTGAN 不需要学逻辑,LLM 不需要扛量。
混合方案赢在哪里¶
对 pure GAN(CTGAN 基线)的优势在实验中已经量化:行级和列级指标全面提升,核心增益来自 LLM 补上了字段间关系这条 CTGAN 完全缺失的维度。对 pure LLM 的优势更为决定性——直接让 LLM 生成 1000 条数据时,多样性严重塌缩(字段取值趋向高频固定值)、流程失败率超过 90%、单条耗时超过 60s,说明 LLM 在"逐条生成大量结构化数据"这个任务形态上根本不经济。混合方案的另一个隐性优势是可控性:CTGAN 部分预保存模型参数后 0.16s/条,生成行为是确定性的;LLM 只处理小批量、按组生成的关联字段,Prompt 约束(V3 按字段类型差异化约束)可以精确生效。此外数据压缩有讲究——LLM 训练集从 10000 条压缩到 1000 条反而把平均相对熵比提升 15%、枚举覆盖率提升 32.3%,差异化抽样优于堆量。
评估方法论:双维度四指标¶
这套方案的评估体系值得单独拆出来看,因为它对齐了"生成数据好不好用"这个真实诉求而不是模型的统计指标。列级看枚举字段覆盖率(丰富度)、字段间关系(真实性)、数据有效性(可用性);行级用两个互补的自动裁判:Discriminator Score 拿 CTGAN 自己的判别器反打生成数据(统计上是否像真的),Rule Validity 让 LLM 把业务规则形式化后逐条验证(逻辑上是否合规)。统计真实性和业务合规性分开度量,避免了"看着像但用不了"的假阳性。这一思路与 Harness Engineering 中"用可执行检查替代人工抽查"的原则一脉相承。
工程化才是真正的壁垒¶
方案里最容易被忽略的是那些非模型环节:CTGAN 训练 10000 条数据会内存崩溃,靠分批训练解决;LLM 解析 DDL 自动生成 SDV 的 Metadata,省掉人工配置;Prompt 迭代三轮才收敛到稳定输出;生成后还有数据修复模块做后置检查。这说明 LLM+GAN 类方案落地的主要工作量不在选模型,而在把模型的不稳定包裹进工程脚手架——分组流水线、预保存参数、规则验证、修复兜底。这也是为什么方案最后把"通用平台建设"列为未来方向:单表方案验证成功后,规模化复用需要把这条流水线平台化。
实践启示¶
- 先做字段分类,再选生成器。拿到建表语句后,先让 LLM 基于样本+DDL 做字段分组(生成→自我批评修复→过滤枚举字段三步),独立字段走统计模型、关联字段走 LLM,不要让任何单一模型包揽全部字段。
- 给 LLM 的小样本要"压缩"而不是"截断":用差异化抽样把训练集从 10000 条压到 1000 条,覆盖更多取值组合——携程实测相对熵比提升 15%、枚举覆盖率提升 32.3%,比堆数据量更有效。
- Prompt 约束按字段类型差异化:对枚举字段要求保持丰富度,对连续字段只约束取值范围允许随机,"一刀切要求均匀分布"会让 LLM 在非分类字段上效率崩溃(V1→V3 的教训)。
- 用双重自动裁判替代人工验收:统计维度用判别器打分(Discriminator Score),业务维度用 LLM 形式化规则逐条验证(Rule Validity),两者结合才能同时发现"不像真的"和"不合逻辑"的数据。
- 量化 LLM 直接造数的成本红线:失败率 >90%、>60s/条的实测数据说明批量逐条生成不可行;大规模测试数据生产应走"统计模型扛量 + LLM 补逻辑"的分工路线,LLM 部分用离线推理控制成本。
关联¶
→ 原文存档 - 相关概念: Harness Engineering - 相关: Agent 架构