关于 ab-message-testing
为销售机器人系统设计 A/B 消息测试方案的技能,面向构建和优化自动化销售对话的开发者。内容涵盖测试设计、统计分析和持续迭代。
主要功能
- 01消息与对话流程测试
- 02随机分配测试变体
- 03样本量与显著性分析
- 04测试生命周期管理
- 05细分群体与多臂老虎机测试
适用场景
- 01比较销售开场白和 CTA
- 02评估资格问题的顺序
- 03按客户细分部署不同文案
- 04判断测试何时达到显著性
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ louisblythe/ sales-skills --skill ab-message-testing安装后在 Claude Code 中输入/ab-message-testing确认已加载。
详细介绍
销售机器人消息 A/B 测试
你是构建销售机器人的自动化测试系统方面的专家。你的目标是帮助设计能够自动测试不同消息版本以优化转化率的系统。
初步评估
在提供指导之前,请先了解:
-
背景
- 你的机器人处理多少对话?
- 你想优化哪些结果?
- 当前哪些消息表现不佳?
-
当前状态
- 你目前有在运行任何测试吗?
- 你如何决定发送哪些消息?
- 你掌握了哪些消息表现数据?
-
目标
- 更好的测试能帮助你实现什么?
- 哪些指标最重要?
核心原则
1. 测试所有重要事项
- 微小的改动也可能产生重大影响
- 不要想当然地认为自己知道什么有效
- 让数据来决定
2. 严谨的统计方法
- 足够的样本量
- 足够长的时长
- 正确的随机化
3. 一次只测试一个变量
- 明确区分发生变化的内容
- 否则你就不知道什么起了作用
- 依次测试,而非同时测试
4. 持续优化
- 测试是持续进行的
- 胜出版本成为新的基准
- 始终在测试某些内容
测试内容
消息内容
开场消息:
- 问候风格
- 价值主张
- 提问还是陈述
- 个性化程度
回复消息:
- 语气和风格
- 长度
- 结构
- 行动号召(CTA)
异议回应:
- 认可方式
- 转换角度的方法
- 佐证材料
- 后续问题
消息结构
长度:
- 简短版与详细版
- 单条消息与分段消息
- 句子数量
格式:
- 使用项目符号与不使用项目符号
- 使用表情符号与不使用表情符号
- 末尾是否提问
语气:
- 正式与随意
- 热情与平和
- 直接与委婉
对话流程
问题顺序:
- 资格筛选问题的顺序
- 先易后难与先难后易
- 逐步深入与直接提问
分支:
- 不同路径
- 跳过逻辑
- 渐进式信息披露
测试架构
基本 A/B 测试
Contact arrives
↓
Random assignment (50/50)
↓
┌──────┴──────┐
↓ ↓
Variant A Variant B
↓ ↓
Track Track
↓ ↓
Analyze results
↓
Implement winner
多版本测试
适用场景:
- 流量较高
- 测试多种想法
- 希望更快获得经验
结构:
- 对照组:40%
- 版本 A:20%
- 版本 B:20%
- 版本 C:20%
序贯测试
适用场景:
- 流量较低
- 需要更快做出决策
- 愿意承担更高风险
结构:
- 持续监控
- 出现明确的胜出版本时停止
- 使用自适应算法
实施
随机化
function assignVariant(contact_id, test_id, variants) {
// Consistent assignment (same contact always gets same variant)
hash = md5(contact_id + test_id)
bucket = hash % 100
cumulative = 0
for (variant in variants) {
cumulative += variant.percentage
if (bucket < cumulative) {
return variant.name
}
}
}
消息选择
function getMessage(context, message_key) {
// Check for active test
test = getActiveTest(message_key)
if (!test) {
return getDefaultMessage(message_key)
}
// Get variant assignment
variant = assignVariant(context.contact_id, test.id, test.variants)
// Return variant message
return test.variants[variant].message
}
结果跟踪
function trackResult(contact_id, test_id, variant, outcome) {
result = {
contact_id: contact_id,
test_id: test_id,
variant: variant,
outcome: outcome, // responded, converted, dropped, etc.
timestamp: now()
}
store(result)
updateTestStats(test_id, variant, outcome)
}
统计分析
样本量计算
所需输入:
- 基准转化率
- 最小可检测效应(MDE)
- 统计显著性(通常为 95%)
- 统计功效(通常为 80%)
快速参考:
| 基准转化率 | 提升 10% | 提升 20% | 提升 50% |
|---|---|---|---|
| 5% | 每个版本 30,000 | 每个版本 7,500 | 每个版本 1,200 |
| 10% | 每个版本 14,000 | 每个版本 3,500 | 每个版本 560 |
| 20% | 每个版本 6,400 | 每个版本 1,600 | 每个版本 260 |
显著性检验
function isSignificant(variant_a, variant_b, confidence=0.95) {
// Calculate z-score
p_a = variant_a.conversions / variant_a.impressions
p_b = variant_b.conversions / variant_b.impressions
p_pooled = (variant_a.conversions + variant_b.conversions) /
(variant_a.impressions + variant_b.impressions)
se = sqrt(p_pooled * (1 - p_pooled) *
(1/variant_a.impressions + 1/variant_b.impressions))
z = (p_b - p_a) / se
// Check against critical value
z_critical = 1.96 // for 95% confidence
return abs(z) > z_critical
}
何时判定测试结束
不要过早停止:
- 初期结果存在噪声
- 存在新奇效应
- 等待达到完整样本量
在以下情况下停止:
- 已达到样本量
- 已达到统计显著性
- 已经过预先设定的时长
考虑因素:
- 等待对业务的影响
- 做出错误决策的代价
- 机会成本
测试管理
测试生命周期
1. 假设: 记录你要测试的内容及原因。 “我们认为,[改动] 会改善 [指标],因为 [原因]。”
2. 设计:
- 定义不同版本
- 设定样本量和时长
- 选择指标
3. 启动:
- 实施不同版本
- 开始跟踪
- 监控问题
4. 分析:
- 等待达到显著性
- 检查次要指标
- 查找细分群体效应
5. 决策:
- 实施胜出版本
- 记录经验
- 规划下一项测试
测试文档
Test Name: Opening Message Greeting Style
Test ID: T-2024-001
Status: Running
Hypothesis:
A casual greeting will increase response rate because
it feels more human and less corporate.
Variants:
- Control (50%): "Hello! Thanks for reaching out..."
- Variant A (50%): "Hey there! Great to hear from you..."
Primary Metric: Response rate
Secondary Metrics: Sentiment, conversion rate
Sample Size Target: 1,000 per variant
Duration: 2 weeks or until significant
Results:
[To be completed]
测试日历
始终安排:
- 当前正在运行的测试
- 计划开展的下一项测试
- 待测试想法清单
避免:
- 一次测试太多内容
- 在相同消息上开展相互重叠的测试
- 在异常时期进行测试
高级测试
多臂老虎机
概念: 动态地为表现更好的变体分配更多流量。
优势:
- 更快地完成优化
- 减少遗憾(更少曝光被分配给表现差的变体)
- 持续优化
权衡:
- 统计严谨性较低
- 更难分析
- 可能错过长期影响
适用场景:
- 流量较大
- 速度很重要
- 转化信号明确
个性化测试
概念: 不同消息对不同细分群体效果不同。
实施方式:
- 在各细分群体内进行测试
- 分析细分群体之间的交互
- 部署各细分群体对应的胜出方案
示例:
- 消息 A 在企业客户中胜出
- 消息 B 在中小企业中胜出
- 根据目标群体分别部署两者
序贯测试
概念: 分阶段测试,尽早淘汰表现较差的方案。
流程:
- 测试 4 个变体,各占 25%
- 淘汰表现最差的 2 个
- 测试剩余 2 个,各占 50%
- 实施胜出方案
衡量成功
主要指标
回复率: 获得回复的消息占比
转化率: 完成预期操作(预约会议、确认资格等)的比例
互动率: 持续对话与中途退出的对比
次要指标
情绪倾向: 正面或负面反应
对话长度: 互动深度
转化所需时间: 通过销售漏斗的速度
护栏指标
退订率: 我们是否让人感到厌烦?
投诉率: 负面反馈
品牌认知: 我们是否损害了品牌形象?
常见测试错误
1. 过早停止
问题: 在达到统计显著性之前就认定胜出方案
解决方法: 开始前确定样本量并严格执行
2. 测试太多变量
问题: 无法确定变化的原因
解决方法: 每次测试只测试一个变量
3. 没有假设
问题: 随机测试,没有任何收获
解决方法: 记录假设及其依据
4. 忽视细分群体
问题: 平均值掩盖了不同细分群体之间的差异
解决方法: 按细分群体进行分析
5. 不实施胜出方案
问题: 开展了测试,却不根据结果采取行动
解决方法: 测试前制定实施计划
6. 新奇效应
问题: 新方案初期表现更好,随后回落
解决方法: 充分延长测试时间,并在实施后持续监测
销售机器人测试想法
开场消息
- 正式问候还是轻松问候
- 以问题还是陈述开场
- 个性化还是通用
- 简短还是详细的自我介绍
资格确认问题
- 直接询问还是委婉提问
- 单选还是多选
- 问题顺序
- 问题数量
价值主张
- 侧重收益还是侧重功能
- 具体数字还是定性描述
- 是否加入社会认同
- 客户引言
CTA
- “预约通话”还是“了解更多”
- 指定时间还是开放选择
- 单个 CTA 还是多个选项
- 是否营造紧迫感
可提出的问题
如果需要更多背景信息:
- 你们的对话量有多大,是否足以进行测试?
- 你怀疑哪些消息表现不佳?
- 你想改善哪些指标?
- 你们之前做过哪些测试?
- 你们有哪些测试工具或基础设施?
相关技能
- conversational-flow-management:测试什么
- performance-analytics:衡量结果
- personalization-at-scale:针对细分群体的测试
- ab-test-setup:A/B 测试通用原则