关于 abtesting-web
abtesting-web 是用于 Web 应用 A/B 测试的 OpenClaw 技能,涵盖功能标记管理、基于 Cookie 或请求头的用户分组,以及流量路由。
主要功能
- 01通过 LaunchDarkly 或 Unleash 管理标记
- 02按 Cookie 划分用户
- 03使用 Cloudflare Workers 路由流量
- 04依据请求头选择实验组
- 05用 JSON 配置标记和变体
适用场景
- 01测试新的 Web 界面功能
- 02按 Cookie 分组个性化内容
- 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));
- 用于 A/B 路由的 Cloudflare Worker:
集成说明
通过设置密钥的环境变量进行集成;例如,导出 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:为 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:使用 Cloudflare 进行基于 Cookie 的用户分群:添加一个 Worker 来设置用户分群:
openclaw abtesting-web deploy-worker --script path/to/worker.js。在 worker.js 文件中加入:
使用此设置将高级用户路由到变体 A。addEventListener('fetch', event => { const cookieValue = event.request.headers.get('cookie')?.includes('segment=premium') ? 'premium' : 'standard'; event.respondWith(fetch(event.request, { headers: { 'X-Segment': cookieValue } })); });
图关系
- 与集群相关:abtesting(例如,与其他 abtesting 技能共享资源)。
- 与标签相关:web(链接到面向 Web 的技能)、feature-flags(关联到标志管理工具)、launchdarkly(集成 LaunchDarkly 专属技能)、cloudflare(关联到 Cloudflare 基础设施技能)。