其他
在 LaunchDarkly 中创建…
当你需要在 LaunchDarkly 上设计并跑完一个功能开关实验(A/B 测试)时,用这套流程从建指标到宣布胜出。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 38/100 ×0.15
适用场景
在 LaunchDarkly 中创建、运特定
解决思路
- 先用 list-metrics 查找已有指标;若不存在则用 create-metric 创建并记下 key。
- 确定主指标(单个指标或漏斗组),在迭代上以 primarySingleMetricKey 或 primaryFunnelKey 传入其 key。
- 按目标选择指标类型:转化用 Custom conversion(如 checkout-completed)、性能用 Custom numeric(如 page-load-time-ms)、互动用 Custom conversion(如 feature-clicked)、营收用 Custom numeric(如 order-value)。
- 用 get-flag(或 get-flag-status-across-envs)获取驱动实验的 flag 规则的 ruleId 和当前 flagConfigVersion;fallthrough 规则的 id 是字符串 "fallthrough"。
- 调用 create-experiment 创建实验,顶层字段描述实验,嵌套的 iteration 对象描述第一个数据收集窗口(含 hypothesis、primarySingleMetricKey、metrics、treatments、flags、randomizationUnit)。
- 在 treatments 中设置对比变体:每个 treatment 有 allocationPercent,所有 treatment 的 allocationPercent 之和必须为 100,且恰好一个 treatment 设 baseline: true。
- 可选地设置顶层字段:holdoutId 关联已有 holdout、dataSource("launchdarkly" 默认 / "snowflake" / "databricks")、methodology("bayesian" 默认 / "frequentist" / "export_only")、analysisConfig(阈值、多重比较校正、序贯检验)。
- 可选地设置迭代字段:attributes(用于切分结果的上下文属性 key 数组,如 ["country", "device"])、covariateId(分层抽样的协变量 CSV id)、canReshuffleTraffic(默认 true,设为 false 可在分配变化时把用户锁定在原变体)。
- 调用 start-experiment-iteration 开始收集数据;开始前 API 要求 flag 已开启、迭代有 randomizationUnit、且至少一个 treatment 的 allocationPercent 非零;若是在此前迭代停止后重启,传入 changeJustification。
- 用 get-experiment 验证:确认 currentIteration.status === "running"、treatments 及其分配符合预期、指标列表与主指标正确。
- 运行中做轻量编辑时用 update-experiment,它只放行 mutableFieldsByStatus 在 running 状态允许的字段(通常是 name、description、maintainerId、tags,以及追加 metrics/attributes),被拒字段会在 skipped 中返回原因。
- 需要做真正的设计变更(treatments、metrics、methodology、hypothesis 等锁定字段)时,调用 save-and-start-experiment-iteration:它一次调用即停止当前迭代、用所给字段更新创建新草稿并启动;入参与 update-experiment 相同并额外加 changeJustification,可变性按 not_started 校验。
- 达到显著性或有明确结论后,调用 stop-experiment-iteration 停止迭代;必须声明胜出者,传入 winningTreatmentId(get-experiment 返回的每个 treatment 的 _id)和 winningReason。
- 若实验无定论或没有变体胜过对照,把 baseline/control treatment 声明为胜出者,并在 winningReason 中说明(如 "Inconclusive — no significant lift, keeping control");不存在“不选胜出者就停止”的路径。
- 报告结果:迭代已停止并声明 winningTreatmentId(无定论时为 control/baseline)、主指标的提升/显著性摘要、以及下一步(发布胜出变体、回滚或开启后续迭代)。
- 遇到指标不存在时先用 create-metric 创建;flag 没有可对比变体时先创建 flag 变体;实验已存在时用 list-experiments 查找、get-experiment 看详情。
- 当 update-experiment 对某字段返回 skipped 时,查看响应中的 currentStatus 和 allowedFields,判断该字段在当前迭代状态下不可变,然后先停止迭代或改用 save-and-start-experiment-iteration。
适用边界 · 注意事项
- 不要在没有配置远程托管的 LaunchDarkly MCP 服务器时使用(依赖 create-experiment、start-experiment-iteration、get-experiment 等 MCP 工具)。
- 不要在迭代 running 期间试图用 update-experiment 修改锁定的迭代字段,应改用 save-and-start-experiment-iteration。
- 不要过早停止迭代,应等到统计显著性;也不要在同一 flag 上同时跑多个实验而没有谨慎的 holdout 设计。