growthbook-ab-testing.mdx 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. ---
  2. title: "GrowthBook A/B 测试体系 - 运行时功能发布"
  3. description: "揭秘 Claude Code 如何通过 GrowthBook 实现运行时 A/B 测试:用户定向、tengu 命名文化和渐进式功能发布策略。"
  4. keywords: ["GrowthBook", "A/B 测试", "运行时门控", "tengu", "渐进式发布"]
  5. ---
  6. {/* 本章目标:深入运行时 A/B 测试层——GrowthBook 的集成架构、用户定向、tengu 命名文化 */}
  7. ## 为什么需要运行时 A/B 测试
  8. 构建时 `feature()` 是"全有或全无"的——要么所有用户都有,要么所有用户都没有。但产品团队需要更精细的控制:
  9. - 只对 5% 的用户灰度发布新功能
  10. - 按订阅类型(Free / Pro / Team)差异化体验
  11. - 对特定组织静默开启实验性能力
  12. - 随时远程关闭出问题的功能,无需发版
  13. 这就是 **GrowthBook** 的用武之地——一个运行时的、基于用户属性的功能门控和 A/B 测试系统。
  14. ## 集成架构
  15. GrowthBook 的完整实现位于 `src/services/analytics/growthbook.ts`(1156 行),工作流程如下:
  16. <Steps>
  17. <Step title="启动时获取远程配置">
  18. CLI 启动时,GrowthBook SDK 通过 `https://api.anthropic.com/` 的 API 端点获取当前的功能配置和实验分组规则。使用 `remoteEval: true` 模式——在服务端计算分组,客户端只拿结果。
  19. </Step>
  20. <Step title="计算用户属性">
  21. SDK 收集当前用户的属性(设备 ID、订阅类型、组织 UUID 等),用于决定该用户属于哪些实验的哪个分组。
  22. </Step>
  23. <Step title="缓存到本地">
  24. 计算结果缓存到 `~/.claude.json` 的 `cachedGrowthBookFeatures` 字段。刷新间隔:Anthropic 员工 20 分钟,外部用户 6 小时。
  25. </Step>
  26. <Step title="代码中查询 flag">
  27. 业务代码通过 `tengu_*` 前缀的 flag 名查询功能状态,GrowthBook SDK 返回当前用户的分组值。
  28. </Step>
  29. </Steps>
  30. ## 用户定向属性
  31. GrowthBook 根据以下用户属性决定实验分组:
  32. | 属性 | 类型 | 来源 | 用途 |
  33. |------|------|------|------|
  34. | `id` | string | 会话 ID | 按会话粒度分组 |
  35. | `deviceID` | string | 持久化设备标识 | 跨会话一致性 |
  36. | `sessionId` | string | 当前会话 ID | 会话级实验 |
  37. | `platform` | enum | `process.platform` | 按操作系统差异化 |
  38. | `organizationUUID` | string | API 认证信息 | 按组织灰度 |
  39. | `accountUUID` | string | API 认证信息 | 按个人账户灰度 |
  40. | `subscriptionType` | string | API 认证信息 | Free / Pro / Team 差异化 |
  41. | `rateLimitTier` | string | API 认证信息 | 按速率限制层级 |
  42. | `email` | string | API 认证信息 | 精确定向特定用户 |
  43. | `appVersion` | string | `MACRO.VERSION` | 按版本号灰度 |
  44. | `github` | object | GitHub Actions 元数据 | CI 环境特殊处理 |
  45. <Note>
  46. 这套定向系统意味着 Anthropic 可以做非常精细的实验——比如"只对 Mac 上的 Pro 订阅用户的 10% 开启新功能"。
  47. </Note>
  48. ## 代号文化:tengu_* 的世界
  49. 所有运行时 flag 都以 `tengu_` 为前缀——"Tengu"(天狗)是 Claude Code 的内部项目代号。flag 名采用**动物/植物/矿物 + 形容词**的命名约定,刻意保持不透明。
  50. <AccordionGroup>
  51. <Accordion title="tengu_kairos — Kairos 助手模式">
  52. 控制 KAIROS 功能的运行时开关。即使构建时 `feature('KAIROS')` 通过,仍需此 flag 命中才能激活。双重门控确保新功能可以分阶段发布。
  53. </Accordion>
  54. <Accordion title="tengu_amber_stoat — Explore Agent A/B 测试">
  55. 控制内置的 Explore 子 Agent 的行为变体。"amber stoat"(琥珀色白鼬)是随机生成的代号,与功能内容无关——这是为了防止通过 flag 名猜测功能。
  56. </Accordion>
  57. <Accordion title="tengu_auto_background_agents — 后台 Agent 自动化">
  58. 控制是否自动将某些任务分派给后台 Agent 执行,而不是在前台阻塞用户。
  59. </Accordion>
  60. <Accordion title="tengu_onyx_plover — Auto-Dream 后台记忆">
  61. 控制"自动做梦"功能——在空闲时后台整理和巩固 Agent 的记忆。"onyx plover"(玛瑙鸻)又是一个不透明代号。
  62. </Accordion>
  63. <Accordion title="tengu_glacier_2xr — 工具搜索行为">
  64. 控制 Tool Search 的行为变体,可能是搜索算法或排序策略的 A/B 测试。
  65. </Accordion>
  66. <Accordion title="tengu_birch_trellis — Bash 权限策略">
  67. 控制 BashTool 权限判断的策略变体——可能在测试更宽松或更严格的权限规则。
  68. </Accordion>
  69. <Accordion title="tengu_scratch — 草稿本功能">
  70. 控制一个实验性的"草稿本"功能,可能是让 AI 在处理复杂任务时使用中间暂存区。
  71. </Accordion>
  72. <Accordion title="tengu_quartz_lantern — Diff 计算策略">
  73. 控制文件写入和编辑时的 diff 计算方式。可能在 A/B 测试不同的 diff 算法对用户体验的影响。
  74. </Accordion>
  75. </AccordionGroup>
  76. ## Ant-Only 覆盖机制
  77. Anthropic 员工拥有两种方式绕过 GrowthBook 的远程求值:
  78. ### 环境变量覆盖
  79. ```bash
  80. # 仅在 USER_TYPE=ant 的构建中生效
  81. CLAUDE_INTERNAL_FC_OVERRIDES='{"tengu_kairos": true}' claude
  82. ```
  83. 通过 `CLAUDE_INTERNAL_FC_OVERRIDES` 环境变量传入 JSON 对象,直接覆盖任意 flag 的值。
  84. ### Config 界面覆盖
  85. 在内部构建中,`/config` 命令的 Gates 标签页提供了图形化的 flag 管理界面,可以实时切换任意 GrowthBook flag。
  86. ## 实验追踪
  87. GrowthBook 集成了完整的实验曝光追踪:
  88. - 每次查询 flag 时记录实验曝光事件
  89. - 通过 protobuf 格式的 `GrowthbookExperimentEvent` 上报
  90. - 包含 `variation_id`(0=对照组,1+=实验组)和 `in_experiment` 标记
  91. - 数据用于分析功能对用户行为的因果影响
  92. <Note>
  93. GrowthBook 正在从 Statsig 迁移而来——代码中仍保留着 `checkStatsigFeatureGate_CACHED_MAY_BE_STALE()` 这样的迁移兼容层。
  94. </Note>