关于 audience-builder
audience-builder 将明确的自然语言受众描述转为经过验证、估算规模的细分群体方案,并在确认后创建。它面向已认证的 Lytics API 用户,结合字段发现、FilterQL 构建与验证及规模估算。
主要功能
- 01解析受众条件
- 02发现匹配的架构字段
- 03构建并验证 FilterQL
- 04估算细分群体规模
- 05创建前请求确认
适用场景
- 01根据明确的受众条件创建细分群体
- 02创建前查看受众规模
- 03按拟议筛选条件更新现有细分群体
MCP 相关
输入未说明 MCP 连接或相关行为。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ lytics/ agent-skills --skill audience-builder安装后在 Claude Code 中输入/audience-builder确认已加载。
详细介绍
受众构建器
用途
主要的端到端技能。接收自然语言的受众描述,并生成经过验证、规模估算和确认的细分群体。整合 schema-discovery、filterql-builder、segment-manager 和 confirmation-gate。
环境
需要经过身份验证的 API 访问权限。凭证解析方式请参阅 ../references/auth.md。
输入
- 目标受众的自然语言描述
- 可选:细分群体名称、表(默认值:
user)、类型(默认值:segment)、标签
端到端流程
步骤 0:检查 Advisor 是否更合适
如果用户的请求以目标为导向,而不是具体明确(例如,“我想提高转化率”而非“访问过 5 次以上的美国用户”),建议先从 audience-advisor skill 入手:
"听起来你有一个业务目标。你希望我先分析你的数据,再推荐最佳定位策略吗?我可以查看机器学习模型、字段分布和现有细分群体,并据此建议有数据依据的筛选条件。"
如果用户提供了具体的受众描述,则直接继续步骤 1。
步骤 1:解析意图
从自然语言描述中提取关键概念:
- 目标属性(人口统计信息、行为、属性)
- 纳入条件(他们拥有或做过什么)
- 排除条件(他们缺少或没做过什么)
- 时间限制(基于时间的条件)
示例:“一年多未购买袜子的美国客户”
- 属性:country = US
- 排除:未购买袜子
- 时间:一年多以前
步骤 2:发现架构
使用 schema-discovery skill 查找匹配字段:
# Get all fields to find candidates
curl -s "${LYTICS_API_URL:-https://api.lytics.io}/v2/schema/user/field" \
-H "Authorization: ${LYTICS_API_TOKEN}"
根据名称匹配度、类型兼容性和值分布为候选字段评分。以上述示例为例:
- “美国客户” -> 查找:
country、geo_country、country_code(字符串类型) - “购买过袜子” -> 查找:
products_purchased(集合)、purchase_categories(集合)、last_purchase_date(日期)
获取排名靠前的候选字段的值建议——q 参数为必填项:
curl -s "${LYTICS_API_URL:-https://api.lytics.io}/api/schema/user/fieldsuggest/${FIELD}?q=${QUERY}" \
-H "Authorization: ${LYTICS_API_TOKEN}"
示例:/api/schema/user/fieldsuggest/country?q=US
确认字段值匹配(例如,country 包含“US”,products_purchased 包含“socks”)。
步骤 3:构建 FilterQL
使用 filterql-builder skill 构建筛选表达式。
根据字段类型将每个概念映射到 FilterQL 条件(参见 ../references/field-types.md):
- 字符串相等:
country = "US" - 集合不包含:
NOT products_purchased INTERSECTS ("socks") - 日期比较:
last_sock_purchase < "now-1y"
使用 AND/OR 组合:
FILTER AND (
country = "US",
NOT products_purchased INTERSECTS ("socks")
) FROM user ALIAS us_no_socks
步骤 4:验证 FilterQL
curl -s -X POST "${LYTICS_API_URL:-https://api.lytics.io}/api/segment/validate" \
-H "Authorization: ${LYTICS_API_TOKEN}" \
-H "Content-Type: text/plain" \
-d 'FILTER AND (country = "US", NOT products_purchased INTERSECTS ("socks")) FROM user ALIAS us_no_socks'
如果验证失败:
- 解析错误消息
- 找出语法问题
- 修正 FilterQL
- 重试(最多 3 次)
- 如果仍然失败,则显示错误并请用户提供指导
步骤 5:估算规模
curl -s -X POST "${LYTICS_API_URL:-https://api.lytics.io}/api/segment/size" \
-H "Authorization: ${LYTICS_API_TOKEN}" \
-H "Content-Type: text/plain" \
-d 'FILTER AND (country = "US", NOT products_purchased INTERSECTS ("socks")) FROM user ALIAS us_no_socks'
步骤 6:展示草稿(确认关卡)
创建之前向用户展示完整摘要:
## Proposed Audience: US Non-Sock Buyers
**Name**: US Non-Sock Buyers
**Slug**: us_no_socks
**Table**: user
**Kind**: segment
**Description**: US customers who have not purchased socks
**Field Mapping**:
- "US customers" -> `country = "US"` (field type: string, sample values: US, CA, UK)
- "haven't purchased socks" -> `NOT products_purchased INTERSECTS ("socks")` (field type: []string)
**FilterQL**:
FILTER AND (country = "US", NOT products_purchased INTERSECTS ("socks")) FROM user ALIAS us_no_socks
**Estimated Size**: ~45,000 profiles
然后展示原始 API 负载:
{
"name": "US Non-Sock Buyers",
"slug_name": "us_no_socks",
"description": "US customers who have not purchased socks",
"segment_ql": "FILTER AND (country = \"US\", NOT products_purchased INTERSECTS (\"socks\")) FROM user ALIAS us_no_socks",
"kind": "segment",
"table": "user",
"is_public": true,
"save_hist": true,
"tags": []
}
请求确认:“要继续创建此细分群体吗?(是/否)”
步骤 7:获准后执行
curl -s -X POST "${LYTICS_API_URL:-https://api.lytics.io}/v2/segment" \
-H "Authorization: ${LYTICS_API_TOKEN}" \
-H "Content-Type: application/json" \
-d '{ ... approved payload ... }'
报告结果:
Successfully created segment "US Non-Sock Buyers" (id: abc123)
View at: ${LYTICS_API_URL}/segment/us_no_socks
创建成功后,询问用户是否需要受众快照:
“细分群体已成功创建。你想查看受众快照,了解人口统计信息细分和字段分布吗?”
如果用户回答是,则使用新的细分群体 ID 调用 audience-snapshot skill。
处理歧义
字段映射存在歧义(多个候选字段的匹配度相同)时:
- 展示排名靠前的候选字段及其示例值
- 让 Agent 根据上下文选择最佳匹配——除非确实存在歧义,否则不要询问用户
- 只有在确实无法区分,或字段用途不明确时才询问用户
更新现有细分群体
如果用户想更新现有细分群体:
- 获取当前细分群体:
GET /v2/segment/${ID}?inline=true - 展示当前 FilterQL 和拟议的更改
- 使用
PUT /v2/segment/${ID},而不是 POST
错误处理
- 没有匹配字段:清楚地报告,并建议用户用其他方式描述其数据
- 重试 3 次后仍验证失败:展示 FilterQL 和错误信息,并请求帮助
- 细分群组为空(大小为 0):发出警告,并建议放宽筛选条件
- 细分群组非常大(超过总数的 90%):指出这一点,并确认用户的意图
依赖项
- 组合使用:
schema-discovery skill、filterql-builder skill、segment-manager skill、../references/confirmation-gate.md - 参考:
../references/auth.md、../references/filterql-grammar.md、../references/field-types.md