@scorehub/creator-outreach 1.6.0 → 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.codebuddy-plugin/plugin.json +6 -2
- package/README.en.md +4 -0
- package/README.md +4 -0
- package/agents/tiktok-creator-outreach.md +9 -9
- package/package.json +1 -1
- package/skills/tiktok-creator-analysis/SKILL.md +29 -24
- package/skills/tiktok-creator-analysis/references/scoring-model.md +26 -173
- package/skills/tiktok-creator-search/SKILL.md +4 -14
- package/skills/tiktok-similar-creators/SKILL.md +10 -6
- package/skills/tiktok-similar-creators/references/similarity-model.md +18 -44
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tiktok-creator-outreach",
|
|
3
|
-
"version": "1.
|
|
4
|
-
"description": "ScoreHub AI's TikTok creator marketing expert for building clear creator profiles and validating focused collaboration shortlists across Southeast Asia
|
|
3
|
+
"version": "1.8.0",
|
|
4
|
+
"description": "ScoreHub AI's TikTok creator marketing expert for building clear creator profiles and validating focused collaboration shortlists across 13 markets in Southeast Asia, the United States, and Europe.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Ben",
|
|
7
7
|
"email": "bennyworks@foxmail.com"
|
|
@@ -56,6 +56,10 @@
|
|
|
56
56
|
{
|
|
57
57
|
"en": "United States",
|
|
58
58
|
"zh": "美国"
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
"en": "Europe",
|
|
62
|
+
"zh": "欧洲"
|
|
59
63
|
}
|
|
60
64
|
],
|
|
61
65
|
"quickPrompts": [
|
package/README.en.md
CHANGED
|
@@ -4,6 +4,10 @@ Chinese version: [README.md](./README.md)
|
|
|
4
4
|
|
|
5
5
|
**ScoreHub AI TikTok Creator Marketing Expert · Tiky** is ScoreHub AI's creator marketing expert for TikTok Shop sellers. Tiky discovers suitable creators by category, GMV, units sold, follower count and age/gender profile, content performance, and collaboration traits, then combines recent commerce, content, category, and audience data into clear, comparable creator profiles. Sellers can use those profiles to select a focused shortlist and quickly validate collaboration hypotheses through targeted outreach. Tiky is not a mass-messaging tool for contacting thousands of creators. TikTok operations run through ScoreHub MCP, and ScoreHub manages the TikTok API credentials so users do not need to configure them.
|
|
6
6
|
|
|
7
|
+
## Supported Markets
|
|
8
|
+
|
|
9
|
+
Tiky currently covers 13 country markets: Indonesia (ID), Thailand (TH), Malaysia (MY), Vietnam (VN), the Philippines (PH), Singapore (SG), the United States (US), the United Kingdom (GB), Germany (DE), Italy (IT), France (FR), Spain (ES), and Ireland (IE). The Agent specification is authoritative for this market boundary.
|
|
10
|
+
|
|
7
11
|
## Supported Clients
|
|
8
12
|
|
|
9
13
|
- WorkBuddy
|
package/README.md
CHANGED
|
@@ -4,6 +4,10 @@ English version: [README.en.md](./README.en.md)
|
|
|
4
4
|
|
|
5
5
|
**ScoreHub AI TikTok达人营销专家 · Tiky** 是 ScoreHub AI 面向 TikTok Shop 卖家打造的达人营销专家。Tiky 可按类目、GMV、销量、粉丝量级与年龄/性别、内容表现和合作特征发现合适的达人,结合近 30 天带货、内容、品类和受众数据建立清晰可比较的达人画像,并通过精选后的小范围建联快速验证合作假设。Tiky 不是面向成千上万达人的海量群发工具。TikTok 操作通过 ScoreHub MCP 完成,TikTok API 凭证由 ScoreHub 托管,使用者无需配置。
|
|
6
6
|
|
|
7
|
+
## 支持市场
|
|
8
|
+
|
|
9
|
+
Tiky 当前覆盖 13 个国家市场:印度尼西亚(ID)、泰国(TH)、马来西亚(MY)、越南(VN)、菲律宾(PH)、新加坡(SG)、美国(US)、英国(GB)、德国(DE)、意大利(IT)、法国(FR)、西班牙(ES)和爱尔兰(IE)。市场边界以 Agent 规范为准。
|
|
10
|
+
|
|
7
11
|
## 支持的客户端
|
|
8
12
|
|
|
9
13
|
- WorkBuddy
|
|
@@ -71,7 +71,7 @@ bootstrap 返回 `ready` 后,再识别以下明确意图:
|
|
|
71
71
|
> - 带货数据:GMV、销量、客单价
|
|
72
72
|
> - 内容表现:视频数、播放量、互动率
|
|
73
73
|
> - 粉丝画像:年龄与性别分布、市场归属
|
|
74
|
-
> -
|
|
74
|
+
> - 单人或多人均可使用 Rank 返回的分数和排名;评分请求不设人数下限或上限
|
|
75
75
|
>
|
|
76
76
|
> **3. 建联验证** — 对精选候选人创建会话并发送合作消息
|
|
77
77
|
> - 支持文本、商品卡片、定向合作邀请、免费样品邀请和图片消息
|
|
@@ -81,7 +81,7 @@ bootstrap 返回 `ready` 后,再识别以下明确意图:
|
|
|
81
81
|
>
|
|
82
82
|
> ## 支持的市场
|
|
83
83
|
>
|
|
84
|
-
>
|
|
84
|
+
> 当前覆盖 13 个国家市场:东南亚的印度尼西亚(ID)、泰国(TH)、马来西亚(MY)、越南(VN)、菲律宾(PH)、新加坡(SG),美国(US),以及欧洲的英国(GB)、德国(DE)、意大利(IT)、法国(FR)、西班牙(ES)、爱尔兰(IE)。
|
|
85
85
|
>
|
|
86
86
|
> ## 典型用法
|
|
87
87
|
>
|
|
@@ -116,18 +116,18 @@ bootstrap 返回 `ready` 后,再识别以下明确意图:
|
|
|
116
116
|
|
|
117
117
|
### 2. 达人表现分析
|
|
118
118
|
获取达人的近 30 天表现并给出合作判断。
|
|
119
|
-
-
|
|
120
|
-
-
|
|
119
|
+
- 单人或多人评分都调用 `rank_creators` 使用 Rank 分数和排名;只有纯事实画像请求才单独调用 `creator_performance`。
|
|
120
|
+
- 数据字段、Rank 分数、缺口处理和结果展示完整遵循 `tiktok-creator-analysis` Skill,不在 Agent 中重复定义。
|
|
121
121
|
|
|
122
122
|
### 3. 小范围建联验证
|
|
123
123
|
对经过画像评估的精选候选人创建会话并发送建联消息,用于快速验证合作假设,不以海量群发为目标。
|
|
124
124
|
- 发送前确认、会话创建、消息类型、话术、速率和进度展示完整遵循 `tiktok-batch-outreach` Skill,不在 Agent 中重复定义。
|
|
125
125
|
|
|
126
126
|
### 4. 相似达人推荐
|
|
127
|
-
|
|
127
|
+
以某位达人为模板,通过多路召回、候选粗排和外部相似度服务找到表现特征相似的其他达人。
|
|
128
128
|
- 输入目标达人的 `creator_open_id`(来自搜索结果的唯一标识),返回按相似度降序排名的 Top-N 推荐列表。
|
|
129
129
|
- 默认返回 20 位相似达人,可按需调整为 1–50。
|
|
130
|
-
-
|
|
130
|
+
- 外部评分、候选筛选、召回策略和结果展示完整遵循 `tiktok-similar-creators` Skill,不在 Agent 中重复定义。
|
|
131
131
|
|
|
132
132
|
## 标准工作流程
|
|
133
133
|
|
|
@@ -152,7 +152,7 @@ Step 3: 小范围建联验证
|
|
|
152
152
|
不直接展示 MCP 原始 JSON。各能力的详细输入输出契约由对应 Skill 统一维护:
|
|
153
153
|
|
|
154
154
|
- 搜索参数、选项交互、分页、字段、排序、主页链接与 WorkBuddy HTML 领域规则遵循 `tiktok-creator-search` Skill。
|
|
155
|
-
-
|
|
155
|
+
- 单人或多人 Rank 评分、事实画像、数据缺口、排名与 WorkBuddy HTML 领域规则遵循 `tiktok-creator-analysis` Skill。
|
|
156
156
|
- 建联确认、速率、消息和进度规则遵循 `tiktok-batch-outreach` Skill。
|
|
157
157
|
- 搜索返回的 `creator_open_id` 是分析与建联共用的唯一达人标识,不得丢失、改写或推断。
|
|
158
158
|
- 任何能力都不得编造缺失指标、内容风格、合作历史或不存在的报告产物。
|
|
@@ -189,7 +189,7 @@ Step 3: 小范围建联验证
|
|
|
189
189
|
- `search_creators` — 搜索达人
|
|
190
190
|
- `get_categories` — 获取商品类目树,将品类名称转换为搜索可用的类目 ID
|
|
191
191
|
- `creator_performance` — 获取达人表现;入参名为 `creator_user_id`,值使用搜索结果中的 `creator_open_id`
|
|
192
|
-
- `rank_creators` —
|
|
192
|
+
- `rank_creators` — 对一个或多个达人评分和排序,值使用搜索结果中的 `creator_open_id`
|
|
193
193
|
- `create_conversation` — 创建达人会话(建联前置,用 `creator_open_id`)
|
|
194
194
|
- `send_message` — 发送建联消息
|
|
195
195
|
- `find_similar_creators` — 以目标达人为模板寻找相似达人
|
|
@@ -231,7 +231,7 @@ Step 3: 小范围建联验证
|
|
|
231
231
|
|
|
232
232
|
## 限制与注意事项
|
|
233
233
|
|
|
234
|
-
-
|
|
234
|
+
- **支持市场**:当前覆盖 13 个国家市场——泰国(TH)、马来西亚(MY)、越南(VN)、菲律宾(PH)、印度尼西亚(ID)、新加坡(SG)、美国(US)、英国(GB)、德国(DE)、意大利(IT)、法国(FR)、西班牙(ES)、爱尔兰(IE)。用户明确提到其他市场(如日本、加拿大、巴西等)时,主动说明不支持,并建议改选以上支持的市场之一
|
|
235
235
|
- **日配额**:搜索和表现查询共享每日 10,000 次调用限额
|
|
236
236
|
- **限流处理**:如果请求过于频繁或短时间内持续限流,应先等待、分批执行或缩小请求范围;这类问题默认不是授权问题,也不需要为了解除限流去重新授权
|
|
237
237
|
- **建联门槛**:店铺 GMV 需达标,且店铺与达人需在同一区域
|
package/package.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tiktok-creator-analysis
|
|
3
|
-
description: 获取 TikTok 达人近 30
|
|
3
|
+
description: 获取 TikTok 达人近 30 天表现数据,并使用 Rank 返回的分数和排名,以固定 Markdown 或 WorkBuddy HTML 格式展示结果。用于达人表现分析、评分、比较、排名和合作建议请求。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
# TikTok Creator Analysis —
|
|
6
|
+
# TikTok Creator Analysis — 达人表现分析与 Rank 评分
|
|
7
7
|
|
|
8
|
-
获取达人近 30
|
|
8
|
+
获取达人近 30 天表现数据,并通过 `rank_creators` 使用 Rank 服务完成一个或多个候选的评分与最终排序。
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
本文件是达人分析专项行为的权威来源;Agent 只保留能力摘要与跨能力编排。若分析流程、输出或失败处理存在冲突,以本文件为准。
|
|
11
11
|
|
|
12
12
|
## 触发条件
|
|
13
13
|
|
|
@@ -19,47 +19,52 @@ description: 获取 TikTok 达人近 30 天表现数据并完成统一评分排
|
|
|
19
19
|
|
|
20
20
|
## 执行方式(MCP 优先)
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
评分请求无论包含 1 位还是任意数量的候选,都先与用户确认名单(单次明确指定单人时直接执行),再调用 **`rank_creators`**,传入搜索结果中的 `creator_open_id` 列表。Rank 是候选分数、可用性分组和最终顺序唯一权威来源;本 Skill 不计算分数、不重排结果,也不得为同一批候选另行调用 `creator_performance` 代替 Rank。若用户只请求事实画像而未请求评分,才可单独调用 `creator_performance`;入参名保留为 `creator_user_id`,其值必须直接使用搜索结果中的 `creator_open_id`。
|
|
23
|
+
|
|
24
|
+
`rank_creators` 返回非空 `ranking` 时,严格使用其中 `ranked[].rank` 和 `ranked[].score`。若 `ranking` 为 `null`,只使用同一响应中的 `performance_documents` 展示事实和数据缺口,并明确当前无法完成 Rank 排名;不得按旧版五维评分模型回算或补充分数。
|
|
25
|
+
|
|
26
|
+
Rank 分数来源、格式和缺失处理以 [Rank 分数契约](./references/scoring-model.md) 为准。本 Skill 不复制其实现细节。
|
|
23
27
|
|
|
24
28
|
授权、限流、MCP 不可用和本地运行环境恢复遵循 Agent 的权威规则,本技能不重复展开。
|
|
25
29
|
|
|
26
30
|
### 输出(固定格式)
|
|
27
31
|
|
|
28
|
-
禁止直接展示 MCP 原始 JSON,也不得在摘要或报告头部复述候选人来源搜索的市场、类目、GMV
|
|
32
|
+
禁止直接展示 MCP 原始 JSON,也不得在摘要或报告头部复述候选人来源搜索的市场、类目、GMV、关键词、粉丝画像或目标人数等完整条件。推荐理由只能引用 Rank 结果和原始 Performance 中实际存在的事实。
|
|
29
33
|
|
|
30
|
-
####
|
|
34
|
+
#### 一个或多个达人
|
|
31
35
|
|
|
32
|
-
-
|
|
33
|
-
- 固定展示:达人身份、近 30 天 GMV
|
|
34
|
-
-
|
|
36
|
+
- 评分请求必须调用 `rank_creators`;成功时展示 Rank 返回的 `score`,单人也照常展示,不把它改写成相对分或百分位。
|
|
37
|
+
- 固定展示:达人身份、近 30 天 GMV/销量、直播和视频表现、粉丝数与画像、品类分布、数据缺口、Rank 分数(如有)、优势/风险、合作判断、推荐理由与合作建议。
|
|
38
|
+
- `ranking` 为 `null` 或候选无有效分数时,展示 Performance 事实和数据缺口,并明确当前无法完成 Rank 评分;禁止按旧版五维评分模型回算。
|
|
35
39
|
|
|
36
|
-
####
|
|
40
|
+
#### 多个达人
|
|
37
41
|
|
|
38
|
-
1.
|
|
39
|
-
2.
|
|
40
|
-
3.
|
|
41
|
-
4.
|
|
42
|
-
5.
|
|
42
|
+
1. **评分摘要**:成功分析数、失败数、Rank 返回的评分对象范围和数据完整性;不展示原搜索条件。
|
|
43
|
+
2. **排行榜**:严格按 Rank 顺序展示“排名 / 达人 / Rank 分数 / 关键表现 / 推荐结论 / 推荐理由”。分数按 Rank 原值展示,不自行归一化、取整或追加 `/100`。
|
|
44
|
+
3. **达人详情**:逐人展示关键原始指标、Rank 分数(如有)、优势/风险、数据缺口、推荐结论、推荐依据、主要风险、建议动作,以及从搜索上下文保留的标识。
|
|
45
|
+
4. **失败名单**:`undisclosed`、`source_failed`、`invalid` 或 Performance 获取失败时单列达人和用户可理解的原因,不得把失败值作为 0 分参与排序。
|
|
46
|
+
5. **Rank 不可用**:`ranking` 为 `null` 时展示 Performance 事实和数据缺口,并说明暂时无法生成统一排名;不执行本地重排。
|
|
47
|
+
6. **下一步**:建议选择达人建联、补充候选人或稍后重试,不自动发送消息。
|
|
43
48
|
|
|
44
|
-
|
|
49
|
+
### 排序与字段规则
|
|
45
50
|
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
51
|
+
- 严格沿用 `rank_creators` 返回的顺序和排名(`ranked[].rank`),不得根据 Performance 数据二次评分或重排。
|
|
52
|
+
- `ranked[].score` 是 Rank 返回的综合分;只展示该字段,不推断分数含义、维度、权重或模型策略。
|
|
53
|
+
- `undisclosed`、`source_failed` 和 `invalid` 没有分数,按原因字段展示,不填零、不补算。
|
|
49
54
|
- 必须保留搜索结果中的 `creator_open_id`。`creator_performance` 不返回该 ID,只能从当前对话中的搜索结果透传,不能猜测或推断。
|
|
50
55
|
- 无法关联 `creator_open_id` 时显示“达人 ID 不可用”,并说明该达人暂不能分析或建联;Markdown 中弱化为详情末项,HTML 中放入可展开复制区域。
|
|
51
|
-
-
|
|
56
|
+
- 推荐结论、理由和建议必须由 Rank 顺序、Rank 分数、用户目标、实际指标和数据缺口支撑,不得编造内容风格、合作历史或转化表现。
|
|
52
57
|
|
|
53
58
|
### WorkBuddy HTML 可视化
|
|
54
59
|
|
|
55
60
|
- HTML 报告的共享品牌配色遵循 Agent 的“WorkBuddy HTML 共享配色”契约,本 Skill 不自行定义另一套主色或色阶。
|
|
56
61
|
- 成功结果为 1–5 位时使用 Markdown;达到 **6 位**时,若当前宿主提供 HTML/可视化产物能力,默认生成自包含的响应式 HTML 报告。用户明确要求 HTML 时不受人数限制。
|
|
57
62
|
- 宿主不支持 HTML,或 HTML 生成失败时,必须回退为包含完整排行榜、详情和失败名单的 Markdown。
|
|
58
|
-
- HTML
|
|
59
|
-
- 只使用内联 CSS/JavaScript,不依赖 CDN
|
|
63
|
+
- HTML 评分报告必须包含:不含完整原搜索条件的评分摘要、按 Rank 顺序展示的排行榜(含 Rank 分数)、推荐结论、一句话推荐理由、达人详情证据链、数据缺口、合作建议和弱化的达人 ID 复制区域。
|
|
64
|
+
- 只使用内联 CSS/JavaScript,不依赖 CDN、远程字体或外部图片;只实现真实可用的搜索、展开和复制交互,不添加本地排序或无法触发 Agent 或 MCP 操作的伪按钮。
|
|
60
65
|
- 昵称、用户名、标签及所有工具返回文本写入 HTML 前必须转义;禁止把工具内容作为 HTML 或脚本执行。
|
|
61
66
|
- 生成 HTML 后仍需在对话中给出成功/失败数量、前三名和数据完整性的简短摘要。只有实际生成产物时才可声明存在 HTML,不得虚构文件名或 `outputs` 路径。
|
|
62
67
|
|
|
63
68
|
## 错误处理
|
|
64
69
|
|
|
65
|
-
|
|
70
|
+
分析专属错误分支仅处理候选名单无效、达人当前不可分析、Rank 返回的候选数据缺口,以及 `creator_open_id` 无法从搜索上下文透传;其余授权、限流、MCP 可用性与本地运行环境问题均遵循 Agent 权威规则。Rank 请求级失败或响应无有效分数时,不触发旧版本地评分,保留 Performance 事实并提示稍后重试或缩小候选范围。
|
|
@@ -1,187 +1,40 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Rank 分数与达人分析契约
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
本 Reference 记录 `creator-outreach` 消费的 Rank 公共结果边界。Rank 服务负责综合评分、候选可用性分组和最终顺序;本包不再维护或执行旧版五维本地评分公式。
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
需要一批达人一起算才有意义;单个达人无法得到有意义的归一化分。
|
|
5
|
+
## 分数来源
|
|
7
6
|
|
|
8
|
-
|
|
7
|
+
分析调用 `rank_creators` 后,只消费响应中的:
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
9
|
+
- `ranking.ranked[].creator_open_id`
|
|
10
|
+
- `ranking.ranked[].input_index`
|
|
11
|
+
- `ranking.ranked[].rank`
|
|
12
|
+
- `ranking.ranked[].score`
|
|
14
13
|
|
|
15
|
-
|
|
16
|
-
- 观看分 = min((直播均观看 + 视频均播放) / max总观看 × 100, 100) × 0.5
|
|
17
|
-
- 直播互动分 = min(直播互动率 / max直播互动率 × 100, 100) × 0.3
|
|
18
|
-
- 视频互动分 = min(视频互动率 / max视频互动率 × 100, 100) × 0.2
|
|
19
|
-
- 维度分 = round(三者之和)
|
|
14
|
+
`score` 是 `mcp-remote` 从 Rank 响应提取并归一为 JSON number 的候选综合分。客户端优先读取 Rank 候选的顶层 `score`;兼容 Rank 1.0 响应时读取 `model_output.strategy_score`。`model_output` 中的模型配置、策略标识、权重和其他字段不是公共契约,不得展示或推断。
|
|
20
15
|
|
|
21
|
-
|
|
22
|
-
- 维度分 = round(min(followers / maxFollowers × 100, 100))
|
|
16
|
+
分数保持 Rank 的原始数值含义:不自行归一化、取整、乘除比例或追加 `/100`。如果 Rank 使用的量纲或范围未在响应中说明,只显示数值,不为它添加标签或解释。
|
|
23
17
|
|
|
24
|
-
|
|
25
|
-
- **目标类目 ID 集合**(`target_cat_ids`):由用户品类意图决定,只能使用本轮当前授权店铺的 `get_categories` 结果。默认使用 `parent_id == "0"` 的顶层类目 ID;仅当用户明确指定某个直接子类目时,才改用该子类目 ID。不得硬编码、跨店铺复用或合并多个市场的类目 ID。
|
|
26
|
-
- 若有 `category_gmv_distribution`(API 返回的 `category_id` 为**顶级父类目 ID**,与 `target_cat_ids` 同层级):
|
|
27
|
-
- 取 GMV 占比最高的类目,判断其 `category_id` 是否在 `target_cat_ids` 中
|
|
28
|
-
- **命中**(最理想路径)→ 维度分 = round(该类目 GMV 占比 × 100),上限 100
|
|
29
|
-
- **未命中** → 计算分布中所有类目与 `target_cat_ids` 的交集:overlap = 交集类目数 / 分布中类目总数;维度分 = round(overlap × 100)
|
|
30
|
-
- 若无 `category_gmv_distribution` → 维度分记 **null**(标注「品类数据未授权」),不参与品类维度排序
|
|
31
|
-
- **禁止用 `category_ids` 替代**:该字段是达人发帖产品的**叶子类目 ID**,层级远深于父类目,与 `target_cat_ids`(父类目)直接求交集结果恒为空,会错误地将匹配达人评为零分
|
|
18
|
+
## 顺序与候选状态
|
|
32
19
|
|
|
33
|
-
|
|
34
|
-
-
|
|
35
|
-
-
|
|
36
|
-
-
|
|
20
|
+
- `ranked` 必须严格按 Rank 返回的顺序展示,`rank` 只用于显示,不得用 Performance 数据重排。
|
|
21
|
+
- `undisclosed` 表示数据未披露,展示 `missing_fields`,不填 0 分。
|
|
22
|
+
- `source_failed` 表示上游数据获取失败,展示安全的 `reason_code` 和可重试状态,不填 0 分。
|
|
23
|
+
- `invalid` 表示候选数据不符合 Rank 契约,展示安全的 `issues`,不得在本地修正后继续评分。
|
|
24
|
+
- 每位候选只能出现在四类结果之一;展示前核对 `summary.input_count` 等于四类数组长度之和。
|
|
37
25
|
|
|
38
|
-
##
|
|
26
|
+
## 分析流程
|
|
39
27
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
| 🎬内容高手 | 内容分 ≥ 70 |
|
|
45
|
-
| 🎯精准美妆 | 品类分 ≥ 80 |
|
|
46
|
-
| 👩优质粉丝 | 粉丝质量分 ≥ 60 |
|
|
47
|
-
| 📢大V / 🎤腰部 / 🌱尾部达人 | 粉丝数 >50K / 10K–50K / <10K |
|
|
48
|
-
| 🔴直播型 / 🟣混合型 / 🟢视频型 | 直播 GMV 占比 >0.8 / >0.5 / 其他 |
|
|
28
|
+
1. 用户请求评分时,无论确认 1 位还是任意数量达人,都调用 `rank_creators`,直接使用 Rank 的 `rank` 和 `score`;工具只拒绝空列表,不设本地人数上限。
|
|
29
|
+
2. 用户只请求事实画像而未请求评分时,才单独调用 `creator_performance`,并且不生成 Rank 分数。
|
|
30
|
+
3. Rank 返回 `ranking: null`、缺少有效分数或请求级失败时,只展示同一响应中的 Performance 事实和数据缺口,说明当前无法统一排名。
|
|
31
|
+
4. 禁止用 `creator_performance` 替代同一批候选的 Rank 评分,禁止恢复旧版五维公式、标签阈值或百分位结论。
|
|
49
32
|
|
|
50
33
|
## 推荐结论与理由
|
|
51
34
|
|
|
52
|
-
|
|
35
|
+
推荐结论不是 Rank 服务之外的第二套评分。只能结合 Rank 排名/分数、用户明确目标、Performance 原始指标和已标注的数据缺口给出:
|
|
53
36
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
| 条件 | 基础结论 |
|
|
59
|
-
|------|---------|
|
|
60
|
-
| `p <= 0.30` | 优先推荐 |
|
|
61
|
-
| `0.30 < p <= 0.70` | 值得测试 |
|
|
62
|
-
| `p > 0.70` | 谨慎考虑 |
|
|
63
|
-
|
|
64
|
-
再按以下优先级覆盖基础结论:
|
|
65
|
-
|
|
66
|
-
1. **明确不匹配 → 本轮不推荐**:仅当用户给出可由现有字段直接验证的核心目标,且已授权、口径和层级一致的数据明确未达到目标时使用。可验证目标限于:同层级目标类目没有交集;用户明确给出的性别、年龄、直播或视频指标下限未达到。不得因综合分或单一维度排名靠后直接输出“本轮不推荐”。
|
|
67
|
-
2. **核心数据缺失 → 谨慎考虑**:目标类目缺 `category_gmv_distribution`,目标性别缺 `follower_gender`,目标年龄缺 `follower_age`,直播目标缺直播观看或互动字段,视频目标缺视频播放或互动字段时,结论最高为“谨慎考虑”。不同类目层级无法可靠比较时也按数据缺失处理,不得判为不匹配。
|
|
68
|
-
3. 其他情况保留排名百分位对应的基础结论。多个目标同时存在时,“明确不匹配”优先于“核心数据缺失”。无法由现有字段验证的目标不参与结论覆盖,只能在风险中说明仍需建联验证。
|
|
69
|
-
|
|
70
|
-
### 证据选择
|
|
71
|
-
|
|
72
|
-
按以下顺序生成理由,避免只复述综合分:
|
|
73
|
-
|
|
74
|
-
1. 优先选择与用户明确目标直接相关且可验证的匹配证据;只引用与当前达人有关的目标短语,不复述完整搜索条件。
|
|
75
|
-
2. 再从带货能力、内容影响力、粉丝规模、品类匹配和粉丝质量中选择最有区分度的优势;优先引用维度分及该维度相对名次,并用一个原始指标补充依据。
|
|
76
|
-
3. 风险按“明确目标不匹配 → 目标所需数据缺失 → 其他数据缺口 → 最弱维度”的顺序选择。缺失值必须明确写出,不能当作真实低表现。
|
|
77
|
-
4. 榜单短理由使用一条完整句,包含一至两项核心证据,并在存在关键风险或缺口时用后半句指出;控制在 60 个中文字符以内。示例:`品类匹配 88,带货能力位列本组第 2;直播互动数据缺失,建议先小范围验证。`
|
|
78
|
-
|
|
79
|
-
### 详情证据链
|
|
80
|
-
|
|
81
|
-
每位达人详情固定包含:
|
|
82
|
-
|
|
83
|
-
1. **推荐结论**:结论及适合优先验证的合作方向;只有直播或视频相关原始数据能够支撑时,才可指定对应内容形式,否则使用通用的“小范围合作验证”。
|
|
84
|
-
2. **推荐依据**:两条最有区分度的证据,每条包含维度分或相对名次,并尽量附一个原始指标。
|
|
85
|
-
3. **主要风险**:一条明确不匹配、数据缺口或最弱维度;若没有明显风险,写明“当前数据未发现突出短板”,不得虚构风险。
|
|
86
|
-
4. **建议动作**:优先建联验证合作意愿、报价和档期;只有用户已给出 Offer 或合作形式时才引用该条件,不替用户承诺新的金额、佣金或合作权益。
|
|
87
|
-
|
|
88
|
-
### 单达人结论
|
|
89
|
-
|
|
90
|
-
单达人不使用排名百分位、综合分或五维相对分。按以下优先级给出合作判断:
|
|
91
|
-
|
|
92
|
-
1. 可验证的核心目标明确不匹配 → `暂不推荐`。
|
|
93
|
-
2. 核心目标所需字段缺失或层级不可比 → `信息不足,暂缓推荐`。
|
|
94
|
-
3. 可验证的核心目标匹配 → `值得进一步验证`。
|
|
95
|
-
4. 用户未提供可验证目标 → `需加入更多候选后判断优先级`。
|
|
96
|
-
|
|
97
|
-
单达人仍展示原始指标、标签、数据缺口、优势/风险与建议动作,但不得用单元素归一化结果作为推荐依据。
|
|
98
|
-
|
|
99
|
-
## MCP 字段映射说明(重要)
|
|
100
|
-
|
|
101
|
-
MCP 工具 `creator_performance` 直接透传 TikTok 详情接口的原始 JSON 响应(见官方 API 文档 `Get Marketplace Creator Performance`)。
|
|
102
|
-
所有评分所需字段位于 `data.creator.*` 路径下,字段对应关系如下:
|
|
103
|
-
|
|
104
|
-
| 评分所需 | MCP 返回字段(`data.creator.*`) | 类型 | 使用方式 |
|
|
105
|
-
|---------|------------------------------|------|---------|
|
|
106
|
-
| GMV | `gmv.amount` | string(如 `"3434.23"`) | `parseFloat()` 后使用 |
|
|
107
|
-
| 销量 | `units_sold` | int | 直接用 |
|
|
108
|
-
| 直播观看 | `avg_ec_live_view_count` | int | 直接用 |
|
|
109
|
-
| 视频播放 | `avg_ec_video_play_count` | int | 直接用 |
|
|
110
|
-
| 直播互动率 | `ec_live_engagement_rate` | string(如 `"6000"` = 60%) | `parseFloat() / 100` 换算为百分比小数 |
|
|
111
|
-
| 视频互动率 | `ec_video_engagement_rate` | string(如 `"3000"` = 30%) | `parseFloat() / 100` 换算为百分比小数 |
|
|
112
|
-
| 粉丝性别 | `follower_gender[].key` / `.value` | key 为 string(`"Male"` / `"Female"`,首字母大写),value 为 string 小数(如 `"0.5000"`) | `parseFloat(value)` 后使用;key 比较需兼容大小写 |
|
|
113
|
-
| 粉丝年龄 | `follower_age[].key` / `.value` | key 为 string(如 `"18-23"`),value 为 string 小数(如 `"0.2500"`) | `parseFloat(value)` 后使用 |
|
|
114
|
-
| 品类 GMV 分布 | `category_gmv_distribution[].category_id` / `.value` | category_id 为 string(**顶级父类目 ID**),value 为 string 小数(如 `"0.3035"`) | `parseFloat(value)` 后作为 GMV 占比 |
|
|
115
|
-
| 品类列表 | `category_ids` | string[](**叶子类目 ID**) | **不用于品类匹配**(与父类目 ID 层级不同,交集恒为空) |
|
|
116
|
-
|
|
117
|
-
**执行建议**:优先使用上表字段代入完整公式;若某字段缺失(接口未返回),对应子维度记 0 或 null 并**标注数据缺口**:
|
|
118
|
-
- `avg_ec_live_view_count` 或 `avg_ec_video_play_count` 缺失 → 对应观看子分记 0,注明数据缺口
|
|
119
|
-
- `ec_live_engagement_rate` 或 `ec_video_engagement_rate` 缺失 → 对应互动子分记 0,注明数据缺口
|
|
120
|
-
- `follower_gender` 或 `follower_age` 缺失 → 对应粉丝质量子分记 0,注明数据缺口
|
|
121
|
-
- `category_gmv_distribution` 缺失 → 品类匹配维度记 **null**(不参与排序),注明「品类数据未授权」
|
|
122
|
-
|
|
123
|
-
字段缺失时对应维度**标注数据缺口**,不要静默填 0 造成排序失真。
|
|
124
|
-
|
|
125
|
-
## 参考实现(Python)
|
|
126
|
-
|
|
127
|
-
以下 `score_creator()` 仅用于帮助理解上文规则,不是独立权威口径,也不是项目运行代码。如果示例与上文公式、字段映射或缺失值规则冲突,以上文正文中的明文规则为准。
|
|
128
|
-
|
|
129
|
-
```python
|
|
130
|
-
def score_creator(c, all_creators, target_cat_ids):
|
|
131
|
-
scores = {}
|
|
132
|
-
max_gmv = max(float(x.get("gmv", {}).get("amount", 0) or 0) for x in all_creators) + 1
|
|
133
|
-
max_followers = max(x.get("follower_count", 0) or 0 for x in all_creators) + 1
|
|
134
|
-
max_views = max((x.get("avg_ec_live_view_count", 0) or 0) + (x.get("avg_ec_video_play_count", 0) or 0)
|
|
135
|
-
for x in all_creators) + 1
|
|
136
|
-
|
|
137
|
-
# 1. 带货能力 (30%)
|
|
138
|
-
gmv = float(c.get("gmv", {}).get("amount", 0) or 0)
|
|
139
|
-
units = c.get("units_sold", 0) or 0
|
|
140
|
-
max_units = max((x.get("units_sold", 0) or 0) for x in all_creators) + 1
|
|
141
|
-
scores["sales"] = round(min(gmv / max_gmv * 100, 100) * 0.6 + min(units / max_units * 100, 100) * 0.4)
|
|
142
|
-
|
|
143
|
-
# 2. 内容影响力 (25%)
|
|
144
|
-
live_views = c.get("avg_ec_live_view_count", 0) or 0
|
|
145
|
-
video_plays = c.get("avg_ec_video_play_count", 0) or 0
|
|
146
|
-
live_eng = float(c.get("ec_live_engagement_rate", 0) or 0)
|
|
147
|
-
video_eng = float(c.get("ec_video_engagement_rate", 0) or 0)
|
|
148
|
-
max_live_eng = max(max(float(x.get("ec_live_engagement_rate", 0) or 0) for x in all_creators), 1)
|
|
149
|
-
max_video_eng = max(max(float(x.get("ec_video_engagement_rate", 0) or 0) for x in all_creators), 1)
|
|
150
|
-
scores["content"] = round(
|
|
151
|
-
min((live_views + video_plays) / max_views * 100, 100) * 0.5
|
|
152
|
-
+ min(live_eng / max_live_eng * 100, 100) * 0.3
|
|
153
|
-
+ min(video_eng / max_video_eng * 100, 100) * 0.2
|
|
154
|
-
)
|
|
155
|
-
|
|
156
|
-
# 3. 粉丝规模 (15%)
|
|
157
|
-
scores["followers"] = round(min((c.get("follower_count", 0) or 0) / max_followers * 100, 100))
|
|
158
|
-
|
|
159
|
-
# 4. 品类匹配 (20%)
|
|
160
|
-
cat_gmv_dist = c.get("category_gmv_distribution", [])
|
|
161
|
-
if cat_gmv_dist:
|
|
162
|
-
top_cat = max(cat_gmv_dist, key=lambda x: float(x.get("value", 0) or 0))
|
|
163
|
-
if top_cat.get("category_id", "") in target_cat_ids:
|
|
164
|
-
scores["category"] = round(min(float(top_cat.get("value", 0) or 0) * 100, 100))
|
|
165
|
-
else:
|
|
166
|
-
dist_ids = {x.get("category_id", "") for x in cat_gmv_dist}
|
|
167
|
-
overlap = len(dist_ids & target_cat_ids) / max(len(dist_ids), 1)
|
|
168
|
-
scores["category"] = round(overlap * 100)
|
|
169
|
-
else:
|
|
170
|
-
scores["category"] = None # 品类数据未授权,不参与排序
|
|
171
|
-
|
|
172
|
-
# 5. 粉丝质量 (10%)
|
|
173
|
-
female_pct = 0
|
|
174
|
-
for g in c.get("follower_gender", []):
|
|
175
|
-
if g.get("key", "").lower() == "female":
|
|
176
|
-
female_pct = float(g.get("value", 0) or 0)
|
|
177
|
-
q = min((female_pct if female_pct <= 1 else female_pct / 100) * 100 / 0.8, 100)
|
|
178
|
-
core_age = sum(float(a.get("value", 0) or 0) for a in c.get("follower_age", [])
|
|
179
|
-
if a.get("key") in ("18-24", "25-34", "35-44"))
|
|
180
|
-
scores["follower_quality"] = round(q * 0.5 + min(core_age * 100 / 0.8, 100) * 0.5)
|
|
181
|
-
|
|
182
|
-
scores["total"] = round(
|
|
183
|
-
scores["sales"] * 0.30 + scores["content"] * 0.25 + scores["followers"] * 0.15
|
|
184
|
-
+ (scores["category"] or 0) * 0.20 + scores["follower_quality"] * 0.10
|
|
185
|
-
)
|
|
186
|
-
return scores
|
|
187
|
-
```
|
|
37
|
+
- 不得因未知的分数范围自行设定“高分/低分”阈值。
|
|
38
|
+
- 不得把排名靠后直接解释为能力不合格;需要引用可验证的目标不匹配或数据缺口。
|
|
39
|
+
- 不得根据昵称、简介或常识补写内容风格、合作历史或转化表现。
|
|
40
|
+
- 榜单短理由只引用一至两项实际证据;没有足够证据时说明数据不足。
|
|
@@ -94,7 +94,7 @@ description: 在 TikTok Shop Creator Marketplace 中按关键词、类目、商
|
|
|
94
94
|
1. **结果摘要**:实际展示数、`total_count`、当前排序、是否还有下一页,以及一行用户可读的“已应用画像”。画像摘要只包含最终实际传入并生效的筛选条件,格式遵循筛选字段 Reference;零条件搜索显示“已应用画像:未设置筛选条件”。
|
|
95
95
|
2. **达人列表**:固定展示“排名 / 昵称 / 用户名 / 粉丝数 / 近 30 天 GMV 区间 / 类目 / 达人 ID”。
|
|
96
96
|
3. **分页状态**:有更多结果且未达到 60 人时,使用“已显示 X / 共 Y;本轮最多展示 60 位达人,还可继续获取最多 Z 位”。没有下一页时使用“已显示全部结果”。达到 60 人且仍有更多结果时,固定说明“本次搜索已达到 60 位达人上限;请调整条件后重新搜索”,不再建议继续翻页。不要向用户展示 `page_token`。
|
|
97
|
-
4.
|
|
97
|
+
4. **下一步**:建议分析或评分选中达人、在剩余预算内继续翻页或调整条件;新增建议“选择一位或多位达人进行 Rank 评分”。必须等待用户明确指定候选人后才调用分析工具,不要擅自开始批量分析或建联。
|
|
98
98
|
|
|
99
99
|
格式化规则:
|
|
100
100
|
|
|
@@ -118,7 +118,7 @@ description: 在 TikTok Shop Creator Marketplace 中按关键词、类目、商
|
|
|
118
118
|
- HTML 报告的共享品牌配色遵循 Agent 的“WorkBuddy HTML 共享配色”契约,本 Skill 不自行定义另一套主色或色阶。
|
|
119
119
|
- 结果为 1–5 条时使用 Markdown 表格。在 **WorkBuddy** 中达到 **6 条**时,必须通过当前宿主的 HTML 产物通道创建自包含的响应式 HTML 报告;用户明确要求 HTML 时不受条数限制。非 WorkBuddy 宿主使用 Markdown。
|
|
120
120
|
- 在 WorkBuddy 中,不得仅因宿主未显式声明 HTML/可视化能力而回退 Markdown。仅当 HTML 产物实际创建失败时,必须回退为包含全部记录的 Markdown,不能只给摘要或丢失达人,并如实说明未生成报告。
|
|
121
|
-
- HTML 搜索报告包含用户可读的“已应用画像”,但不得包含内部字段、枚举、类目 ID、搜索键、分页令牌或目标展示人数;主表类目最多显示 3 个名称和“+N”,展开详情显示全部本地化名称及合并后的“未识别类目(N)”。其余包含返回数/总数/分页状态、可搜索和排序的达人表格、达人详情、达人 ID
|
|
121
|
+
- HTML 搜索报告包含用户可读的“已应用画像”,但不得包含内部字段、枚举、类目 ID、搜索键、分页令牌或目标展示人数;主表类目最多显示 3 个名称和“+N”,展开详情显示全部本地化名称及合并后的“未识别类目(N)”。其余包含返回数/总数/分页状态、可搜索和排序的达人表格、达人详情、达人 ID 复制区域和下一步建议;下一步建议包含“选择一位或多位达人进行 Rank 评分”。不添加无法调用 Agent 或 MCP 的伪按钮,也不自动开始分析;达到 60 人上限时必须展示上限提示而非继续翻页入口。
|
|
122
122
|
- HTML 报告中的昵称链接使用 `<a>` 指向 `https://www.tiktok.com/@{username}`,并带 `target="_blank"` 与 `rel="noopener noreferrer"`;链接文本与 URL 都必须先安全转义/编码。
|
|
123
123
|
- 只使用内联 CSS/JavaScript,不依赖 CDN、远程字体或外部图片;只实现真实可用的搜索、排序、展开和复制交互,不添加无法触发 Agent 或 MCP 操作的伪按钮。
|
|
124
124
|
- 昵称、用户名及所有工具返回文本写入 HTML 前必须转义;禁止把工具内容作为 HTML 或脚本执行。
|
|
@@ -136,19 +136,9 @@ description: 在 TikTok Shop Creator Marketplace 中按关键词、类目、商
|
|
|
136
136
|
|
|
137
137
|
## 市场限制
|
|
138
138
|
|
|
139
|
-
|
|
139
|
+
支持市场 allowlist 属于共享产品边界,以 Agent“限制与注意事项”中的“支持市场”为唯一权威来源,本 Skill 不重复维护国家表。
|
|
140
140
|
|
|
141
|
-
|
|
142
|
-
|------|------|
|
|
143
|
-
| 泰国 | TH |
|
|
144
|
-
| 马来西亚 | MY |
|
|
145
|
-
| 越南 | VN |
|
|
146
|
-
| 菲律宾 | PH |
|
|
147
|
-
| 印度尼西亚 | ID |
|
|
148
|
-
| 新加坡 | SG |
|
|
149
|
-
| 美国 | US |
|
|
150
|
-
|
|
151
|
-
用户在搜索前若明确指定目标市场(如"帮我找日本的达人"),应**立即告知不支持该市场**,并建议用户改选以上支持的市场之一,不要直接调用 `search_creators`。
|
|
141
|
+
用户在搜索前若明确指定目标市场(如“帮我找日本的达人”),先按 Agent 的支持市场判断;不在 allowlist 中时应**立即告知不支持该市场**,并建议用户改选受支持的市场,不要直接调用 `search_creators`。
|
|
152
142
|
|
|
153
143
|
## 错误处理
|
|
154
144
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: tiktok-similar-creators
|
|
3
|
-
description:
|
|
3
|
+
description: 以目标达人为模板,通过多路召回、候选粗排和外部相似度服务寻找表现特征相似的达人,返回按相似度降序排列的 Top-N 推荐列表。用于"找相似达人"、"以他为模板"、"有没有类似的达人"等请求。
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# TikTok Similar Creators — 相似达人推荐
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
以某位达人为模板,基于多路召回和外部相似度评分找到带货表现特征相似的其他达人。
|
|
9
9
|
|
|
10
10
|
本文件是相似达人推荐专项行为的权威来源;Agent 只保留能力摘要。若执行流程、输出或失败处理存在冲突,以本文件为准。
|
|
11
11
|
|
|
@@ -25,9 +25,9 @@ description: 以目标达人为模板,通过多路召回和两阶段加权评
|
|
|
25
25
|
|------|------|--------|------|
|
|
26
26
|
| `creator_user_id` | ✅ | — | 目标达人的 `creator_open_id`,只能来自当前对话上下文中的搜索结果,不可编造 |
|
|
27
27
|
| `top_n` | ❌ | 20 | 返回数量(1–50) |
|
|
28
|
-
| `include_reasoning` | ❌ | true |
|
|
28
|
+
| `include_reasoning` | ❌ | true | 是否包含外部服务返回的相似度 breakdown |
|
|
29
29
|
|
|
30
|
-
|
|
30
|
+
相似度服务接口、评分流程、召回策略和标签规则的唯一权威来源是 [相似达人推荐模型](./references/similarity-model.md),外部服务请求字段以仓库顶层的 [达人相似度服务调用说明](../../../../creator-similarity-api.md) 为准;本 Skill 不重复实现细节。
|
|
31
31
|
|
|
32
32
|
授权、限流、MCP 不可用和本地运行环境恢复遵循 Agent 的权威规则,本技能不重复展开。
|
|
33
33
|
|
|
@@ -60,6 +60,8 @@ description: 以目标达人为模板,通过多路召回和两阶段加权评
|
|
|
60
60
|
|
|
61
61
|
- "亮点"列展示 `differentiator_tags`(以 "·" 连接),无标签时显示 `—`。
|
|
62
62
|
- 相似度保留两位小数。
|
|
63
|
+
- 每个结果的 `similarity_confidence` 单独展示为数据置信度;它不等于相似度,低置信度时提示数据不足。
|
|
64
|
+
- 外部服务返回 `similarity_config_version` 时作为结果诊断信息保留。
|
|
63
65
|
- 保留每位达人的 `creator_open_id` 供后续分析或建联使用。
|
|
64
66
|
|
|
65
67
|
**3. 召回说明** — 简短一行:
|
|
@@ -72,7 +74,7 @@ description: 以目标达人为模板,通过多路召回和两阶段加权评
|
|
|
72
74
|
- HTML 报告的共享品牌配色遵循 Agent 的"WorkBuddy HTML 共享配色"契约,本 Skill 不自行定义。
|
|
73
75
|
- 结果 ≥ 6 位时,若当前宿主提供 HTML/可视化产物能力,默认生成自包含的响应式 HTML 报告。用户明确要求 HTML 时不受人数限制。
|
|
74
76
|
- 宿主不支持 HTML 或生成失败时,回退为 Markdown 表格 + 摘要。
|
|
75
|
-
- HTML
|
|
77
|
+
- HTML 报告必须包含:目标达人摘要卡片、相似达人排名列表(含相似度分、亮点标签、外部服务 breakdown 展开区)、召回说明。
|
|
76
78
|
- 只使用内联 CSS/JavaScript,不依赖 CDN、远程字体或外部图片。
|
|
77
79
|
- 昵称、用户名及所有工具返回文本写入 HTML 前必须转义。
|
|
78
80
|
|
|
@@ -81,8 +83,10 @@ description: 以目标达人为模板,通过多路召回和两阶段加权评
|
|
|
81
83
|
| 情况 | 处理方式 |
|
|
82
84
|
|------|---------|
|
|
83
85
|
| 目标达人 Performance 查询失败 | 根据结构化错误(`shop_auth_invalid`/`oauth_invalid`/`rate_limited`等)按 Agent 规则分流 |
|
|
86
|
+
| 所有可执行的召回渠道均失败 | 保留最需处理的结构化错误并按 Agent 规则分流,不展示为“未找到候选” |
|
|
84
87
|
| 候选池为空(无人召回) | 说明该达人在当前市场的可召回范围(品类、粉丝量级、全市场)均未找到其他达人,建议换一个目标达人再试 |
|
|
85
|
-
|
|
|
88
|
+
| 候选池非空但候选 Performance 全部失败 | 保留最需处理的结构化错误并按 Agent 规则分流,不调用相似度服务 |
|
|
86
89
|
| 精排候选全部成功但相似度偏低(最高分 < 0.3) | 结果仍正常展示,但在摘要中提示"未找到高度相似的达人,当前结果仅供参考" |
|
|
87
90
|
| `rate_limited` / `quota_exhausted` | 建议等待后重试,不主动调用 `authorize` |
|
|
91
|
+
| 外部相似度服务未配置或不可用 | 返回结构化错误,提示检查服务配置或稍后重试;不切换到其他评分方法 |
|
|
88
92
|
| 上下文中没有 `creator_open_id` | 引导先搜索达人(`tiktok-creator-search` Skill)获取 ID,再使用本功能 |
|
|
@@ -2,58 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
本文件是相似度评分模型的唯一权威 Reference。`tiktok-similar-creators` Skill 和 Agent 只做引用摘要,不重复展开。
|
|
4
4
|
|
|
5
|
-
##
|
|
5
|
+
## 一、外部评分与两阶段流程
|
|
6
|
+
|
|
7
|
+
外部双达人相似度服务是 `find_similar_creators` 的唯一评分来源,接口字段和错误契约见仓库顶层的 [达人相似度服务调用说明](../../../../../creator-similarity-api.md)。调用 `POST /v1/creator-similarities` 时,目标达人和候选达人均使用 TikTok Performance 返回的 `data.creator` 对象。
|
|
8
|
+
|
|
9
|
+
- 外部服务返回的 `similarity_score`(0–100)在 MCP 层归一化为 0–1 后再展示。
|
|
10
|
+
- 外部服务为每个评分结果返回 `confidence`;它是数据覆盖置信度,不是相似度,低置信度结果必须标明数据不足,不能仅按分数解读。
|
|
11
|
+
- 外部结果是最终排序唯一依据,不与其他评分方法平均或加权混合。
|
|
12
|
+
- 服务未配置、调用失败或响应不符合契约时返回结构化错误,不返回替代评分结果。
|
|
13
|
+
|
|
14
|
+
召回和候选预算仍由 `find_similar_creators` 负责:三路召回合并去重后最多保留 24 位,默认最多对 12 位候选获取 Performance 并送入评分服务。粗排只用于控制 TikTok Performance 调用量,不作为最终对外分数。
|
|
6
15
|
|
|
7
16
|
| 阶段 | 数据源 | API 调用 | 维度 | 用途 |
|
|
8
17
|
|------|--------|---------|------|------|
|
|
9
18
|
| 粗排 | `searchCreators` 返回字段 | 0 | 品类 + 粉丝量 | 从候选池(≤24)筛出 Top-K 进入精排 |
|
|
10
|
-
| 精排 | `getCreatorPerformance`
|
|
19
|
+
| 精排 | `getCreatorPerformance` + 外部相似度服务 | TikTok ≤12 + 服务 1 次 | 以服务返回的分数和 breakdown 为准 | 排序取 Top-N 返回 |
|
|
11
20
|
|
|
12
21
|
粗排 Top-K 计算:`K = min(ceil(top_n × 1.5), 12)`。
|
|
13
22
|
|
|
14
|
-
##
|
|
15
|
-
|
|
16
|
-
| 维度 | 权重 | 相似度函数 | 数据字段 |
|
|
17
|
-
|------|------|-----------|----------|
|
|
18
|
-
| 品类匹配 | 0.25 | Jaccard(交集/并集) | `category_ids`(叶子 ID,两侧同层级可比) |
|
|
19
|
-
| 粉丝量级 | 0.20 | `1 - \|log10(fA) - log10(fB)\| / 6` | `follower_count` |
|
|
20
|
-
| GMV | 0.20 | `1 - \|A-B\| / max(A,B)` | `gmv.amount`(parseFloat) |
|
|
21
|
-
| 互动率 | 0.15 | `1 - \|A-B\| / max(A,B)` | 见互动率取值规则 |
|
|
22
|
-
| 客单价 | 0.10 | `1 - \|A-B\| / max(A,B)` | `gmv.amount / units_sold` |
|
|
23
|
-
| 内容形式 | 0.10 | 匹配 = 1,否则 = 0 | 见内容形式推断规则 |
|
|
24
|
-
|
|
25
|
-
### 品类匹配字段约束(关键)
|
|
23
|
+
## 二、召回字段约束
|
|
26
24
|
|
|
27
25
|
`search_creators` 的 `category` 参数只接受**顶层类目 ID**(`parent_id == "0"`),描述明文「禁止传更深层 ID」。
|
|
28
26
|
- **召回用**:目标达人的 `category_gmv_distribution[].category_id`(顶级父类目 ID,与 `get_categories` 顶层 `id` 同级)。
|
|
29
|
-
-
|
|
27
|
+
- **候选粗排与展示标签用**:目标与候选的 `category_ids`(叶子 ID)做 Jaccard;该值不作为最终相似度。
|
|
30
28
|
- **禁止混用**:不可将叶子 `category_ids` 传入 `searchCreators` 的 `parent_category_id`,否则被搜索接口静默忽略,返回无关达人。
|
|
31
29
|
|
|
32
|
-
##
|
|
33
|
-
|
|
34
|
-
先用 `inferContentFormat` 判断内容形式,再按形式取对应互动率:
|
|
35
|
-
|
|
36
|
-
| 内容形式 | 互动率取值 |
|
|
37
|
-
|----------|-----------|
|
|
38
|
-
| 直播型 | `parseFloat(ec_live_engagement_rate) / 100` |
|
|
39
|
-
| 视频型 | `parseFloat(ec_video_engagement_rate) / 100` |
|
|
40
|
-
| 混合型 | 两者均值(缺失或为 "0" 的一侧不计入分母) |
|
|
41
|
-
|
|
42
|
-
字段单位为**百分之一百分点**(如 `"6000"` = 60%),使用前 `/100` 换算为百分比值。
|
|
43
|
-
缺失率记为 0,不参与均值时跳过。
|
|
44
|
-
|
|
45
|
-
## 四、内容形式推断规则
|
|
46
|
-
|
|
47
|
-
从 `ec_live_count` 和 `ec_video_count` 推断:
|
|
48
|
-
|
|
49
|
-
| 条件 | 结果 |
|
|
50
|
-
|------|------|
|
|
51
|
-
| 两者均为 0 | `mixed` |
|
|
52
|
-
| 直播占比 > 70% | `live` |
|
|
53
|
-
| 视频占比 > 70% | `video` |
|
|
54
|
-
| 其他 | `mixed` |
|
|
55
|
-
|
|
56
|
-
## 五、3 路召回策略
|
|
30
|
+
## 三、3 路召回策略
|
|
57
31
|
|
|
58
32
|
| 召回路径 | 搜索参数 | 取前 | 触发条件 |
|
|
59
33
|
|----------|---------|------|----------|
|
|
@@ -63,7 +37,7 @@
|
|
|
63
37
|
|
|
64
38
|
各路结果合并 → 按 `creator_open_id` 去重 → 排除目标自身 → **上限 24 人**。
|
|
65
39
|
|
|
66
|
-
##
|
|
40
|
+
## 四、粗排公式
|
|
67
41
|
|
|
68
42
|
仅用 `searchCreators` 已返回字段(品类 + 粉丝量),零额外 API 调用:
|
|
69
43
|
|
|
@@ -72,13 +46,13 @@ coarseScore = computeCategorySimilarity(targetCatIds, candidateCategoryIds) × (
|
|
|
72
46
|
+ computeFollowerSimilarity(targetFollowers, candidateFollowers) × (0.20/0.45)
|
|
73
47
|
```
|
|
74
48
|
|
|
75
|
-
权重归一化至总和 1
|
|
49
|
+
权重归一化至总和 1。该分数只决定哪些候选进入外部评分,不能写入 `similarity_score`,也不能作为失败时的替代结果。
|
|
76
50
|
|
|
77
|
-
##
|
|
51
|
+
## 五、差异化标签规则
|
|
78
52
|
|
|
79
53
|
| 标签 | 触发条件 |
|
|
80
54
|
|------|---------|
|
|
81
|
-
| 同品类 |
|
|
55
|
+
| 同品类 | 目标与候选的叶子品类 Jaccard ≥ 0.8 |
|
|
82
56
|
| 更高GMV | 候选 GMV > 目标 × 1.2 |
|
|
83
57
|
| 更高互动率 | 候选互动率 > 目标 × 1.2 |
|
|
84
58
|
| 更大粉丝量 | 候选粉丝 > 目标 × 1.5 |
|