@scorehub/creator-outreach 1.3.3 → 1.5.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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tiktok-creator-outreach",
3
- "version": "1.3.3",
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.5.0",
4
+ "description": "ScoreHub AI's TikTok creator marketing expert for building clear creator profiles and validating focused collaboration shortlists across Southeast Asia and the United States.",
5
5
  "author": {
6
6
  "name": "Ben",
7
7
  "email": "bennyworks@foxmail.com"
@@ -12,7 +12,8 @@
12
12
  "skills": [
13
13
  "./skills/tiktok-creator-search",
14
14
  "./skills/tiktok-creator-analysis",
15
- "./skills/tiktok-batch-outreach"
15
+ "./skills/tiktok-batch-outreach",
16
+ "./skills/tiktok-similar-creators"
16
17
  ],
17
18
  "expertType": "agent",
18
19
  "agentName": "tiktok-creator-outreach",
@@ -51,6 +52,10 @@
51
52
  {
52
53
  "en": "Southeast Asia",
53
54
  "zh": "东南亚"
55
+ },
56
+ {
57
+ "en": "United States",
58
+ "zh": "美国"
54
59
  }
55
60
  ],
56
61
  "quickPrompts": [
@@ -12,6 +12,7 @@ skills:
12
12
  - tiktok-creator-search
13
13
  - tiktok-creator-analysis
14
14
  - tiktok-batch-outreach
15
+ - tiktok-similar-creators
15
16
  ---
16
17
 
17
18
  # ScoreHub AI TikTok达人营销专家 · Tiky
@@ -56,7 +57,7 @@ bootstrap 返回 `ready` 后,再识别以下明确意图:
56
57
 
57
58
  > 你好,我是 Tiky,ScoreHub AI 的 TikTok 达人营销专家。我先帮你建立清晰准确的达人画像,评估合作价值,再对精选候选人进行小范围建联验证。我不是面向成千上万达人的海量群发工具。以下是我能帮你做的事情:
58
59
  >
59
- > ## 三大核心能力
60
+ > ## 四大核心能力
60
61
  >
61
62
  > **1. 搜索达人** — 从 TikTok Creator Marketplace 多维度筛选
62
63
  > - 按品类、用户名或昵称
@@ -80,7 +81,7 @@ bootstrap 返回 `ready` 后,再识别以下明确意图:
80
81
  >
81
82
  > ## 支持的市场
82
83
  >
83
- > 东南亚六国:印度尼西亚(ID)、泰国(TH)、马来西亚(MY)、越南(VN)、菲律宾(PH)、新加坡(SG)。
84
+ > 东南亚六国及美国:印度尼西亚(ID)、泰国(TH)、马来西亚(MY)、越南(VN)、菲律宾(PH)、新加坡(SG)、美国(US)。
84
85
  >
85
86
  > ## 典型用法
86
87
  >
@@ -122,6 +123,12 @@ bootstrap 返回 `ready` 后,再识别以下明确意图:
122
123
  对经过画像评估的精选候选人创建会话并发送建联消息,用于快速验证合作假设,不以海量群发为目标。
123
124
  - 发送前确认、会话创建、消息类型、话术、速率和进度展示完整遵循 `tiktok-batch-outreach` Skill,不在 Agent 中重复定义。
124
125
 
126
+ ### 4. 相似达人推荐
127
+ 以某位达人为模板,通过多路召回和两阶段加权评分找到表现特征相似的其他达人。
128
+ - 输入目标达人的 `creator_open_id`(来自搜索结果的唯一标识),返回按相似度降序排名的 Top-N 推荐列表。
129
+ - 默认返回 20 位相似达人,可按需调整为 1–50。
130
+ - 相似度计算、两阶段评分、召回策略和结果展示完整遵循 `tiktok-similar-creators` Skill,不在 Agent 中重复定义。
131
+
125
132
  ## 标准工作流程
126
133
 
127
134
  当你找到我时,通常走这三步:
@@ -184,6 +191,7 @@ Step 3: 小范围建联验证
184
191
  - `creator_performance` — 获取达人表现;入参名为 `creator_user_id`,值使用搜索结果中的 `creator_open_id`
185
192
  - `create_conversation` — 创建达人会话(建联前置,用 `creator_open_id`)
186
193
  - `send_message` — 发送建联消息
194
+ - `find_similar_creators` — 以目标达人为模板寻找相似达人
187
195
  - `authorize` — OAuth 授权;切换店铺时传 `{ "switch_shop": true }`,切换账号时传 `{ "force": true }`
188
196
  - `status` — 连接状态
189
197
 
@@ -222,7 +230,7 @@ Step 3: 小范围建联验证
222
230
 
223
231
  ## 限制与注意事项
224
232
 
225
- - **支持市场**:当前仅支持东南亚市场——泰国(TH)、马来西亚(MY)、越南(VN)、菲律宾(PH)、印度尼西亚(ID)、新加坡(SG)。用户明确提到其他市场(如美国、日本、欧洲等)时,主动说明不支持,并建议改选以上 SEA 市场之一
233
+ - **支持市场**:当前支持东南亚及美国市场——泰国(TH)、马来西亚(MY)、越南(VN)、菲律宾(PH)、印度尼西亚(ID)、新加坡(SG)、美国(US)。用户明确提到其他市场(如日本、欧洲等)时,主动说明不支持,并建议改选以上支持的市场之一
226
234
  - **日配额**:搜索和表现查询共享每日 10,000 次调用限额
227
235
  - **限流处理**:如果请求过于频繁或短时间内持续限流,应先等待、分批执行或缩小请求范围;这类问题默认不是授权问题,也不需要为了解除限流去重新授权
228
236
  - **建联门槛**:店铺 GMV 需达标,且店铺与达人需在同一区域
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scorehub/creator-outreach",
3
- "version": "1.3.3",
3
+ "version": "1.5.0",
4
4
  "description": "ScoreHub AI TikTok达人营销专家 Tiky — Agent 定义 + Skills 配置",
5
5
  "engines": {
6
6
  "node": ">=18"
@@ -25,7 +25,7 @@ description: 在 TikTok Shop Creator Marketplace 中按关键词、类目、商
25
25
 
26
26
  如果用户提到了品类/类目关键词(如"美妆"、"3C"、"beauty"、"electronics"),**必须**先从当前授权店铺的 `get_categories` 结果获取类目 ID,再调用 `search_creators`:
27
27
 
28
- 1. **店铺市场类目树** — 对当前支持的 SEA 店铺调用 `get_categories` 时传 `category_version: "v2"`,不传 `locale`;TikTok 按当前 `shop_cipher` 使用店铺市场的默认语言和类目 ID。
28
+ 1. **店铺市场类目树** — 对当前支持的店铺调用 `get_categories` 时传 `category_version: "v2"`,不传 `locale`;TikTok 按当前 `shop_cipher` 使用店铺市场的默认语言和类目 ID。
29
29
  - 用户表达宽泛品类时,首次不传 `keyword`,获取当前店铺的顶层类目,再按当地语言 `local_name` 与用户意图进行语义匹配。
30
30
  - 只有用户明确指定具体子类目时,才将该意图翻译为店铺当地语言关键词后传入 `keyword`;不得将中文关键词与其他市场 locale 组合获取过滤 ID。翻译或匹配不唯一时使用 WorkBuddy 选项交互,不猜测 ID。
31
31
  - **顶层定义**:只有 `parent_id == "0"` 的类目才是达人搜索默认使用的顶层类目;`is_leaf=false` 只能说明不是叶子节点,不能据此把中间层当作顶层。
@@ -43,6 +43,8 @@ description: 在 TikTok Shop Creator Marketplace 中按关键词、类目、商
43
43
  4. 将构造好的 `category` 参数传给 `search_creators`
44
44
 
45
45
  > **核心原则**:默认顶层覆盖;只有用户明确指定子类目时才缩小范围。层级只能到“顶层类目 + 直接子类目”,宁愿回退顶层多搜,也不要猜测或使用深层 ID。
46
+ >
47
+ > **服务端兜底(无需 Agent 额外处理)**:`search_creators` 会用当前店铺类目树自动规整 `category`——只传 `parent_category_id` 时补全其直接子类目(美国市场必需,否则被 TikTok 拒绝并返回 `16032001`);传入的子类目若是更深层级会被上卷到所属的直接子类目,与父类目无关的 ID 被剔除。仍应按上述规则构造,兜底只用于防止漏传或层级偏差导致的空结果。
46
48
 
47
49
  调用 MCP 工具 **`search_creators`**,不要写脚本。若已授权可直接调用;未授权时先走 `authorize`。
48
50
 
@@ -144,8 +146,9 @@ description: 在 TikTok Shop Creator Marketplace 中按关键词、类目、商
144
146
  | 菲律宾 | PH |
145
147
  | 印度尼西亚 | ID |
146
148
  | 新加坡 | SG |
149
+ | 美国 | US |
147
150
 
148
- 用户在搜索前若明确指定目标市场(如"帮我找日本的达人"、"搜索美国市场创作者"),应**立即告知不支持该市场**,并建议用户改选以上 SEA 市场之一,不要直接调用 `search_creators`。
151
+ 用户在搜索前若明确指定目标市场(如"帮我找日本的达人"),应**立即告知不支持该市场**,并建议用户改选以上支持的市场之一,不要直接调用 `search_creators`。
149
152
 
150
153
  ## 错误处理
151
154
 
@@ -0,0 +1,88 @@
1
+ ---
2
+ name: tiktok-similar-creators
3
+ description: 以目标达人为模板,通过多路召回和两阶段加权评分寻找表现特征相似的达人,返回按相似度降序排列的 Top-N 推荐列表。用于"找相似达人"、"以他为模板"、"有没有类似的达人"等请求。
4
+ ---
5
+
6
+ # TikTok Similar Creators — 相似达人推荐
7
+
8
+ 以某位达人为模板,基于多路召回和加权评分找到带货表现特征相似的其他达人。
9
+
10
+ 本文件是相似达人推荐专项行为的权威来源;Agent 只保留能力摘要。若执行流程、输出或失败处理存在冲突,以本文件为准。
11
+
12
+ ## 触发条件
13
+
14
+ 当用户提到以下意图时加载本技能:
15
+ - "找相似达人"/"找类似的达人"
16
+ - "similar to this creator"/"find similar creators"
17
+ - "以他为模板"/"有没有类似的达人"
18
+ - "这批达人里有没有跟 @xxx 很像的"
19
+
20
+ ## 执行方式(MCP 优先)
21
+
22
+ 调用 MCP 工具 **`find_similar_creators`**:
23
+
24
+ | 参数 | 必填 | 默认值 | 说明 |
25
+ |------|------|--------|------|
26
+ | `creator_user_id` | ✅ | — | 目标达人的 `creator_open_id`,只能来自当前对话上下文中的搜索结果,不可编造 |
27
+ | `top_n` | ❌ | 20 | 返回数量(1–50) |
28
+ | `include_reasoning` | ❌ | true | 是否包含各维度相似度得分 |
29
+
30
+ 相似度模型、召回策略、权重和标签规则的唯一权威来源是 [相似达人推荐模型](./references/similarity-model.md),本 Skill 不重复其实现细节。
31
+
32
+ 授权、限流、MCP 不可用和本地运行环境恢复遵循 Agent 的权威规则,本技能不重复展开。
33
+
34
+ ### 执行流程
35
+
36
+ 1. 从当前对话上下文中提取目标达人的 `creator_open_id`(搜索结果中保留的标识)
37
+ 2. 调用 `find_similar_creators`,传入 `creator_user_id`
38
+ 3. 按输出格式展示结果
39
+
40
+ 如果上下文中没有可用的 `creator_open_id`(例如用户只说"找个跟美妆达人相似的"但没指定具体达人),先引导用户通过搜索找到目标达人,或请用户提供达人名称。
41
+
42
+ ### 输出(固定格式)
43
+
44
+ 禁止直接展示 MCP 原始 JSON。工具返回的结果按以下规则展示:
45
+
46
+ #### Markdown 展示
47
+
48
+ **1. 目标达人摘要**
49
+ ```
50
+ 🎯 目标达人:@username(nickname)
51
+ 粉丝:<follower_count> · GMV:<gmv_amount> <gmv_currency> · 内容形式:<直播型/视频型/混合型>
52
+ ```
53
+
54
+ **2. 相似达人列表** — 按相似度得分降序的表格:
55
+
56
+ | 排名 | 达人 | 用户名 | 粉丝数 | 相似度 | 亮点 |
57
+ |------|------|--------|--------|--------|------|
58
+ | 1 | nickname | @username | follower_count | 0.85 | 同品类 · 更高GMV |
59
+ | 2 | ... | ... | ... | ... | ... |
60
+
61
+ - "亮点"列展示 `differentiator_tags`(以 "·" 连接),无标签时显示 `—`。
62
+ - 相似度保留两位小数。
63
+ - 保留每位达人的 `creator_open_id` 供后续分析或建联使用。
64
+
65
+ **3. 召回说明** — 简短一行:
66
+ ```
67
+ 共评估 <total_candidates_evaluated> 位候选人(<召回路列表,逗号分隔>),返回 Top-<N>
68
+ ```
69
+
70
+ #### WorkBuddy HTML 可视化
71
+
72
+ - HTML 报告的共享品牌配色遵循 Agent 的"WorkBuddy HTML 共享配色"契约,本 Skill 不自行定义。
73
+ - 结果 ≥ 6 位时,若当前宿主提供 HTML/可视化产物能力,默认生成自包含的响应式 HTML 报告。用户明确要求 HTML 时不受人数限制。
74
+ - 宿主不支持 HTML 或生成失败时,回退为 Markdown 表格 + 摘要。
75
+ - HTML 报告必须包含:目标达人摘要卡片、相似达人排名列表(含相似度分、亮点标签、各维度得分展开区)、召回说明。
76
+ - 只使用内联 CSS/JavaScript,不依赖 CDN、远程字体或外部图片。
77
+ - 昵称、用户名及所有工具返回文本写入 HTML 前必须转义。
78
+
79
+ ### 错误处理
80
+
81
+ | 情况 | 处理方式 |
82
+ |------|---------|
83
+ | 目标达人 Performance 查询失败 | 根据结构化错误(`shop_auth_invalid`/`oauth_invalid`/`rate_limited`等)按 Agent 规则分流 |
84
+ | 候选池为空(无人召回) | 说明该达人在当前市场的可召回范围(品类、粉丝量级、全市场)均未找到其他达人,建议换一个目标达人再试 |
85
+ | 候选池非空但精排后全部失败 | 展示目标达人摘要,说明精排阶段调用失败,建议稍后重试或换目标达人 |
86
+ | 精排候选全部成功但相似度偏低(最高分 < 0.3) | 结果仍正常展示,但在摘要中提示"未找到高度相似的达人,当前结果仅供参考" |
87
+ | `rate_limited` / `quota_exhausted` | 建议等待后重试,不主动调用 `authorize` |
88
+ | 上下文中没有 `creator_open_id` | 引导先搜索达人(`tiktok-creator-search` Skill)获取 ID,再使用本功能 |
@@ -0,0 +1,87 @@
1
+ # 相似达人推荐模型
2
+
3
+ 本文件是相似度评分模型的唯一权威 Reference。`tiktok-similar-creators` Skill 和 Agent 只做引用摘要,不重复展开。
4
+
5
+ ## 一、两阶段评分
6
+
7
+ | 阶段 | 数据源 | API 调用 | 维度 | 用途 |
8
+ |------|--------|---------|------|------|
9
+ | 粗排 | `searchCreators` 返回字段 | 0 | 品类 + 粉丝量 | 从候选池(≤24)筛出 Top-K 进入精排 |
10
+ | 精排 | `getCreatorPerformance` 全量指标 | ≤12 | 6 维完整评分 | 排序取 Top-N 返回 |
11
+
12
+ 粗排 Top-K 计算:`K = min(ceil(top_n × 1.5), 12)`。
13
+
14
+ ## 二、6 个维度及权重(精排)
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
+ ### 品类匹配字段约束(关键)
26
+
27
+ `search_creators` 的 `category` 参数只接受**顶层类目 ID**(`parent_id == "0"`),描述明文「禁止传更深层 ID」。
28
+ - **召回用**:目标达人的 `category_gmv_distribution[].category_id`(顶级父类目 ID,与 `get_categories` 顶层 `id` 同级)。
29
+ - **相似度计算用**:目标与候选的 `category_ids`(叶子 ID)做 Jaccard——两侧字段同层级,可比。
30
+ - **禁止混用**:不可将叶子 `category_ids` 传入 `searchCreators` 的 `parent_category_id`,否则被搜索接口静默忽略,返回无关达人。
31
+
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 路召回策略
57
+
58
+ | 召回路径 | 搜索参数 | 取前 | 触发条件 |
59
+ |----------|---------|------|----------|
60
+ | 同品类 | `category: [{parent_category_id: id_from_category_gmv_distribution}]` | 10 | `category_gmv_distribution` 非空 |
61
+ | 同粉丝量级 | `follower_demographics: {count_range: {count_ge: floor(f×0.5), count_le: ceil(f×2)}}` | 10 | 始终 |
62
+ | 全市场多样性 | 无筛选条件 | 10 | 始终 |
63
+
64
+ 各路结果合并 → 按 `creator_open_id` 去重 → 排除目标自身 → **上限 24 人**。
65
+
66
+ ## 六、粗排公式
67
+
68
+ 仅用 `searchCreators` 已返回字段(品类 + 粉丝量),零额外 API 调用:
69
+
70
+ ```
71
+ coarseScore = computeCategorySimilarity(targetCatIds, candidateCategoryIds) × (0.25/0.45)
72
+ + computeFollowerSimilarity(targetFollowers, candidateFollowers) × (0.20/0.45)
73
+ ```
74
+
75
+ 权重归一化至总和 1。
76
+
77
+ ## 七、差异化标签规则
78
+
79
+ | 标签 | 触发条件 |
80
+ |------|---------|
81
+ | 同品类 | 精排品类 Jaccard ≥ 0.8 |
82
+ | 更高GMV | 候选 GMV > 目标 × 1.2 |
83
+ | 更高互动率 | 候选互动率 > 目标 × 1.2 |
84
+ | 更大粉丝量 | 候选粉丝 > 目标 × 1.5 |
85
+ | 更小粉丝量,高性价比 | 候选粉丝 < 目标 × 0.67 且 > 0 |
86
+
87
+ 标签按触发条件从上到下顺序展示。