A/B testingmigrationcloud APIon-device AIproduction
生产环境 A/B 测试:云端 API vs 端侧 AI
如何在上线移动应用中对云端 API 和端侧模型进行公平的 A/B 测试。指标、分组设计、统计显著性以及真正重要的指标。
Edward Xi Yang
您在生产环境中有一个云端 AI 功能。您有一个微调好的端侧模型准备部署。在将所有用户迁移之前,您需要证据表明端侧模型的质量能达到或超过云端模型。
生产环境中的 A/B 测试可以在真实用户、真实查询和真实行为上提供这些证据。
测试什么
目标不是证明端侧模型"和"云端模型一样好。目标是衡量用户是否注意到或在意任何差异,并量化运营方面的改进(延迟、成本、离线能力)。
主要指标
| 指标 | 为什么重要 | 如何衡量 |
|---|---|---|
| 任务完成率 | 用户是否得到了所需内容? | 导致用户操作(发送、保存、接受)的 AI 交互百分比 |
| 功能参与度(D7/D30) | 用户是否持续使用 AI 功能? | 7/30 天内回到 AI 功能的比率 |
| 首次操作时间 | UX 是更快还是更慢? | 从查询到用户下一个操作的时间 |
| 错误/重试率 | AI 是否失败或令人沮丧? | 用户重试或放弃的交互百分比 |
次要指标
| 指标 | 为什么重要 |
|---|---|
| 延迟(TTFT,完整响应) | 端侧应该更快,但需验证 |
| 每用户成本 | 云端组有 API 成本;端侧约 $0 |
| 离线使用 | 端侧组应在离线条件下展示 AI 使用 |
| 应用崩溃率 | 端侧模型加载可能导致内存问题 |
| 电池影响 | 端侧推理使用设备资源 |
应避免的指标
模型质量分数(困惑度、BLEU、ROUGE): 用户不关心困惑度。他们关心功能是否解决了问题。自动化质量指标在开发中有用,但不适合作为 A/B 测试的主要指标。
回复长度: 更长不代表更好。更短不代表更差。长度不能代表任何有用的信息。
分组设计
随机分 配
在首次 AI 交互时将用户分配到组:
fun getAiCohort(userId: String): AiCohort {
// 确定性哈希确保同一用户始终在同一组
val hash = userId.hashCode().absoluteValue
return if (hash % 100 < 50) AiCohort.CLOUD else AiCohort.ON_DEVICE
}使用用户 ID 哈希(而非随机数),这样每个用户在各次会话中始终保持在同一组。
分组大小
| 测试时长 | 每组用户数 | 可检测效应大小 |
|---|---|---|
| 1 周 | 500 | 10% 以上的差异 |
| 2 周 | 1,000 | 5-7% 的差异 |
| 4 周 | 2,500 | 3-5% 的差异 |
在 10K MAU 下 50/50 分组,每组 5,000 用户。两周可以得到 5% 以上差异的统计显著结果。
渐进式发布
从保守开始:
- 第 1 周: 10% 端侧,90% 云端(捕捉崩溃和关键问题)
- 第 2 周: 25% 端侧,75% 云端(收集初步指标)
- 第 3-4 周: 50/50(具有统计功效的完整 A/B 测试)
- 结果出来后: 如果指标通过则推进到 100% 端侧