@scorehub/creator-outreach 1.4.0 → 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,6 +1,6 @@
1
1
  {
2
2
  "name": "tiktok-creator-outreach",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
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",
@@ -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",
@@ -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
  > - 按品类、用户名或昵称
@@ -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
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@scorehub/creator-outreach",
3
- "version": "1.4.0",
3
+ "version": "1.5.0",
4
4
  "description": "ScoreHub AI TikTok达人营销专家 Tiky — Agent 定义 + Skills 配置",
5
5
  "engines": {
6
6
  "node": ">=18"
@@ -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
 
@@ -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
+ 标签按触发条件从上到下顺序展示。