mcpField
A
abtesting-web

abtesting-web

github.com/alphaonedev测试与质量43 次安装
代码仓库

关于 abtesting-web

abtesting-web 是用于 Web 应用 A/B 测试的 OpenClaw 技能,涵盖功能标记管理、基于 Cookie 或请求头的用户分组,以及流量路由。

主要功能

  1. 01通过 LaunchDarkly 或 Unleash 管理标记
  2. 02按 Cookie 划分用户
  3. 03使用 Cloudflare Workers 路由流量
  4. 04依据请求头选择实验组
  5. 05用 JSON 配置标记和变体

适用场景

  1. 01测试新的 Web 界面功能
  2. 02按 Cookie 分组个性化内容
  3. 03在实验变体间拆分 Web 流量

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/alphaonedev/openclaw-graph --skill abtesting-web

安装后在 Claude Code 中输入/abtesting-web确认已加载。

详细介绍

用途

此技能 abtesting-web 通过使用 LaunchDarkly 或 Unleash 等工具管理功能标志、实现基于 Cookie 的用户分组,以及通过 Cloudflare Workers 或基于标头的规则路由流量,为 Web 应用提供 A/B 测试功能。它可确保受控实验在不造成停机的情况下优化 Web 功能。

适用场景

在 Web 应用中动态推出功能时使用此技能,例如测试新的 UI 元素、通过 Cookie 个性化内容,或为实验拆分流量。当你需要借助 LaunchDarkly 等工具进行企业级功能测试,或使用 Unleash 实现经济高效的配置时,尤其是在采用 Cloudflare 的环境中,请使用此技能。

核心功能

  • 功能标志:集成 LaunchDarkly,通过 API 切换标志;例如,使用 Unleash 的 /api/features 端点检查标志状态。
  • Cookie 分组:在 Cloudflare Workers 中解析 Cookie 以对用户分组;例如,检查是否存在特定 Cookie 值,如 document.cookie.includes('variant=A')。
  • Cloudflare Workers A/B 测试:根据规则路由请求,例如使用 fetch(event.request),并通过条件逻辑将流量拆分为两组,各占 50%。
  • 标头路由:在代码中评估请求标头;例如,如果 event.request.headers.get('X-Experiment') === 'group1',则据此路由。
  • 特定配置:使用 JSON 格式定义标志;例如,{"name": "new-feature", "enabled": true, "variants": ["A", "B"]}。

使用模式

设置 A/B 测试时,先使用 API 密钥初始化此技能;例如,运行 openclaw abtesting-web init --provider launchdarkly --key $LAUNCHDARKLY_API_KEY。后续使用时,在 Web 应用代码中查询标志:导入 SDK 并检查状态,例如 ldClient.variation('feature-key', false)。分组模式:在 Cloudflare Workers 中添加事件处理程序,在代理请求之前评估 Cookie 或标头。务必先使用模拟服务进行本地测试,然后通过 openclaw abtesting-web deploy --env production 部署。

常用命令/API

  • CLI 命令:使用 openclaw abtesting-web init --cluster abtesting --tags web,feature-flags 初始化。使用 openclaw abtesting-web create-flag --name new-ui --provider unleash --variants A,B 创建标志。使用 openclaw abtesting-web list --key $CLOUDFLARE_API_TOKEN 列出标志。
  • API 端点:对于 LaunchDarkly,向 https://app.launchdarkly.com/api/v2/flags/{projectKey}/{featureFlagKey} 发送 POST 请求,并使用类似 {"name": "test-flag", "variations": ["control", "variant"]} 的 JSON 请求体。对于 Unleash,使用授权标头 Authorization: $UNLEASH_API_KEY 向 https://your-unleash-instance/api/features 发送 GET 请求。
  • 代码片段:
    • 用于 A/B 路由的 Cloudflare Worker:
      addEventListener('fetch', event => {
        const variant = Math.random() < 0.5 ? 'A' : 'B';
        event.respondWith(fetch(event.request, { headers: { 'X-Variant': variant } }));
      });
      
    • 在 Node.js 中检查 LaunchDarkly 标志:
      const ldClient = require('launchdarkly-node-server-sdk');
      ldClient variation('feature-key', false, (err, variation) => console.log(variation));
      

集成说明

通过设置密钥的环境变量进行集成;例如,导出 LAUNCHDARKLY_API_KEY 和 CLOUDFLARE_API_TOKEN。对于 Web 应用,将此技能添加为中间件:在 Express.js 中,使用 app.use(abtestingMiddleware({ provider: 'launchdarkly' }))。配置格式:使用 YAML 文件,例如 abtesting-config.yaml,其内容如下:

provider: launchdarkly
flags:
  - name: homepage-test
    variants: [A, B]
    percentage: 50

若要与其他服务结合使用,请确保为 API 调用启用 CORS,并处理标志更新的 Webhook。对于 Cloudflare,通过控制面板或 CLI 将 Worker 绑定到你的域名:wrangler publish --env production。

错误处理

常见错误包括 API 密钥无效(HTTP 401),可通过检查 echo $LAUNCHDARKLY_API_KEY 并重试来解决。对于未找到标志的情况,可在代码中使用 try-catch 捕获,例如:

try {
  const flag = await ldClient.getFeatureFlag('nonexistent');
} catch (error) {
  console.error('Flag error:', error.message); // Output: "Feature flag not found"
  fallbackToDefault();
}

通过添加重试来处理网络问题:在 Cloudflare Workers 中,使用 event.waitUntil(fetchWithRetry(event.request))。对于用户分群错误,请尽早验证 Cookie,例如,如果解析失败,则默认使用对照组。使用 CLI 调试模式:openclaw abtesting-web run --debug,以记录 API 响应。

具体使用示例

  1. 示例 1:为 Web 功能启动 A/B 测试:要测试网站上的新按钮,请先运行 openclaw abtesting-web init --provider launchdarkly --key $LAUNCHDARKLY_API_KEY。然后创建标志:openclaw abtesting-web create-flag --name button-test --variants control,experimental。在前端代码中检查标志:if (ldClient.variation('button-test') === 'experimental') { renderNewButton(); }。最后,通过 Cloudflare 日志监控流量分配。
  2. 示例 2:使用 Cloudflare 进行基于 Cookie 的用户分群:添加一个 Worker 来设置用户分群:openclaw abtesting-web deploy-worker --script path/to/worker.js。在 worker.js 文件中加入:
    addEventListener('fetch', event => {
      const cookieValue = event.request.headers.get('cookie')?.includes('segment=premium') ? 'premium' : 'standard';
      event.respondWith(fetch(event.request, { headers: { 'X-Segment': cookieValue } }));
    });
    
    使用此设置将高级用户路由到变体 A。

图关系

  • 与集群相关:abtesting(例如,与其他 abtesting 技能共享资源)。
  • 与标签相关:web(链接到面向 Web 的技能)、feature-flags(关联到标志管理工具)、launchdarkly(集成 LaunchDarkly 专属技能)、cloudflare(关联到 Cloudflare 基础设施技能)。

评论

支持 Markdown