@talesofai/neta-skills 0.6.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/CHANGELOG.md +47 -0
- package/LICENSE +21 -0
- package/README.en.md +234 -0
- package/README.md +237 -0
- package/bin/apis/activity.js +14 -0
- package/bin/apis/artifact.js +64 -0
- package/bin/apis/audio.js +10 -0
- package/bin/apis/collection.js +87 -0
- package/bin/apis/config.js +49 -0
- package/bin/apis/feeds.js +34 -0
- package/bin/apis/gpt.js +10 -0
- package/bin/apis/hashtag.js +23 -0
- package/bin/apis/index.js +62 -0
- package/bin/apis/prompt.js +120 -0
- package/bin/apis/recsys.js +29 -0
- package/bin/apis/space.js +48 -0
- package/bin/apis/task.js +21 -0
- package/bin/apis/tcp.js +16 -0
- package/bin/apis/types.js +76 -0
- package/bin/apis/user.js +45 -0
- package/bin/apis/verse.js +18 -0
- package/bin/cli.js +16 -0
- package/bin/commands/community/create_comment.cmd.en_us.yml +4 -0
- package/bin/commands/community/create_comment.cmd.js +40 -0
- package/bin/commands/community/create_comment.cmd.zh_cn.yml +3 -0
- package/bin/commands/community/favor_collection.cmd.en_us.yml +4 -0
- package/bin/commands/community/favor_collection.cmd.js +29 -0
- package/bin/commands/community/favor_collection.cmd.zh_cn.yml +3 -0
- package/bin/commands/community/get_fan_list.cmd.en_us.yml +4 -0
- package/bin/commands/community/get_fan_list.cmd.js +36 -0
- package/bin/commands/community/get_fan_list.cmd.zh_cn.yml +3 -0
- package/bin/commands/community/get_hashtag_characters.cmd.en_us.yml +4 -0
- package/bin/commands/community/get_hashtag_characters.cmd.js +46 -0
- package/bin/commands/community/get_hashtag_characters.cmd.zh_cn.yml +3 -0
- package/bin/commands/community/get_hashtag_collections.cmd.en_us.yml +6 -0
- package/bin/commands/community/get_hashtag_collections.cmd.js +54 -0
- package/bin/commands/community/get_hashtag_collections.cmd.zh_cn.yml +5 -0
- package/bin/commands/community/get_hashtag_info.cmd.en_us.yml +4 -0
- package/bin/commands/community/get_hashtag_info.cmd.js +42 -0
- package/bin/commands/community/get_hashtag_info.cmd.zh_cn.yml +3 -0
- package/bin/commands/community/get_subscribe_list.cmd.en_us.yml +4 -0
- package/bin/commands/community/get_subscribe_list.cmd.js +36 -0
- package/bin/commands/community/get_subscribe_list.cmd.zh_cn.yml +3 -0
- package/bin/commands/community/like_collection.cmd.en_us.yml +4 -0
- package/bin/commands/community/like_collection.cmd.js +29 -0
- package/bin/commands/community/like_collection.cmd.zh_cn.yml +4 -0
- package/bin/commands/community/list_space_topics.cmd.en_us.yml +7 -0
- package/bin/commands/community/list_space_topics.cmd.js +39 -0
- package/bin/commands/community/list_space_topics.cmd.zh_cn.yml +6 -0
- package/bin/commands/community/list_spaces.cmd.en_us.yml +4 -0
- package/bin/commands/community/list_spaces.cmd.js +19 -0
- package/bin/commands/community/list_spaces.cmd.zh_cn.yml +3 -0
- package/bin/commands/community/read_collection.cmd.en_us.yml +4 -0
- package/bin/commands/community/read_collection.cmd.js +83 -0
- package/bin/commands/community/read_collection.cmd.zh_cn.yml +3 -0
- package/bin/commands/community/request_interactive_feed.cmd.en_us.yml +4 -0
- package/bin/commands/community/request_interactive_feed.cmd.js +54 -0
- package/bin/commands/community/request_interactive_feed.cmd.zh_cn.yml +5 -0
- package/bin/commands/community/subscribe_user.cmd.en_us.yml +4 -0
- package/bin/commands/community/subscribe_user.cmd.js +33 -0
- package/bin/commands/community/subscribe_user.cmd.zh_cn.yml +3 -0
- package/bin/commands/community/suggest_categories.cmd.en_us.yml +4 -0
- package/bin/commands/community/suggest_categories.cmd.js +26 -0
- package/bin/commands/community/suggest_categories.cmd.zh_cn.yml +3 -0
- package/bin/commands/community/suggest_content.cmd.en_us.yml +5 -0
- package/bin/commands/community/suggest_content.cmd.js +59 -0
- package/bin/commands/community/suggest_content.cmd.zh_cn.yml +4 -0
- package/bin/commands/community/suggest_keywords.cmd.en_us.yml +4 -0
- package/bin/commands/community/suggest_keywords.cmd.js +26 -0
- package/bin/commands/community/suggest_keywords.cmd.zh_cn.yml +3 -0
- package/bin/commands/community/suggest_tags.cmd.en_us.yml +4 -0
- package/bin/commands/community/suggest_tags.cmd.js +26 -0
- package/bin/commands/community/suggest_tags.cmd.zh_cn.yml +3 -0
- package/bin/commands/community/validate_tax_path.cmd.en_us.yml +4 -0
- package/bin/commands/community/validate_tax_path.cmd.js +24 -0
- package/bin/commands/community/validate_tax_path.cmd.zh_cn.yml +3 -0
- package/bin/commands/creative/edit_colleciton.cmd.en_us.yml +11 -0
- package/bin/commands/creative/edit_colleciton.cmd.js +140 -0
- package/bin/commands/creative/edit_colleciton.cmd.zh_cn.yml +10 -0
- package/bin/commands/creative/make_image.cmd.en_us.yml +20 -0
- package/bin/commands/creative/make_image.cmd.js +58 -0
- package/bin/commands/creative/make_image.cmd.zh_cn.yml +19 -0
- package/bin/commands/creative/make_song.cmd.en_us.yml +8 -0
- package/bin/commands/creative/make_song.cmd.js +53 -0
- package/bin/commands/creative/make_song.cmd.zh_cn.yml +7 -0
- package/bin/commands/creative/make_video.cmd.en_us.yml +17 -0
- package/bin/commands/creative/make_video.cmd.js +54 -0
- package/bin/commands/creative/make_video.cmd.zh_cn.yml +16 -0
- package/bin/commands/creative/publish_collection.cmd.en_us.yml +10 -0
- package/bin/commands/creative/publish_collection.cmd.js +101 -0
- package/bin/commands/creative/publish_collection.cmd.zh_cn.yml +9 -0
- package/bin/commands/creative/remove_background.cmd.en_us.yml +10 -0
- package/bin/commands/creative/remove_background.cmd.js +74 -0
- package/bin/commands/creative/remove_background.cmd.zh_cn.yml +9 -0
- package/bin/commands/creative/request_character_or_elementum.cmd.en_us.yml +23 -0
- package/bin/commands/creative/request_character_or_elementum.cmd.js +108 -0
- package/bin/commands/creative/request_character_or_elementum.cmd.zh_cn.yml +22 -0
- package/bin/commands/creative/search_tcp.cmd.en_us.yml +16 -0
- package/bin/commands/creative/search_tcp.cmd.js +53 -0
- package/bin/commands/creative/search_tcp.cmd.zh_cn.yml +15 -0
- package/bin/commands/factory.js +15 -0
- package/bin/commands/load.js +157 -0
- package/bin/utils/errors.js +61 -0
- package/bin/utils/json.js +8 -0
- package/bin/utils/lang.js +8 -0
- package/bin/utils/parse_meta.js +16 -0
- package/bin/utils/polling.js +17 -0
- package/bin/utils/prompts.js +186 -0
- package/package.json +77 -0
- package/skills/neta/SKILL.md +119 -0
- package/skills/neta-community/SKILL.md +123 -0
- package/skills/neta-creative/SKILL.md +118 -0
- package/skills/neta-space/SKILL.md +129 -0
- package/skills/neta-suggest/SKILL.md +490 -0
- package/skills/zh_cn/neta/SKILL.md +111 -0
- package/skills/zh_cn/neta/references/character-search.md +234 -0
- package/skills/zh_cn/neta/references/collection-remix.md +40 -0
- package/skills/zh_cn/neta/references/community-exploration.md +636 -0
- package/skills/zh_cn/neta/references/hashtag-research.md +295 -0
- package/skills/zh_cn/neta/references/image-generation.md +121 -0
- package/skills/zh_cn/neta/references/interactive-feed.md +377 -0
- package/skills/zh_cn/neta/references/social-interactive.md +73 -0
- package/skills/zh_cn/neta/references/song-creation.md +247 -0
- package/skills/zh_cn/neta/references/song-mv.md +198 -0
- package/skills/zh_cn/neta/references/space.md +90 -0
- package/skills/zh_cn/neta/references/video-generation.md +221 -0
- package/skills/zh_cn/neta-community/SKILL.md +109 -0
- package/skills/zh_cn/neta-community/references/character-search.md +233 -0
- package/skills/zh_cn/neta-community/references/hashtag-research.md +295 -0
- package/skills/zh_cn/neta-community/references/interactive-feed.md +377 -0
- package/skills/zh_cn/neta-community/references/social-interactive.md +73 -0
- package/skills/zh_cn/neta-creative/SKILL.md +105 -0
- package/skills/zh_cn/neta-creative/references/character-search.md +233 -0
- package/skills/zh_cn/neta-creative/references/collection-remix.md +40 -0
- package/skills/zh_cn/neta-creative/references/image-generation.md +121 -0
- package/skills/zh_cn/neta-creative/references/song-creation.md +247 -0
- package/skills/zh_cn/neta-creative/references/song-mv.md +198 -0
- package/skills/zh_cn/neta-creative/references/video-generation.md +221 -0
- package/skills/zh_cn/neta-space/SKILL.md +126 -0
- package/skills/zh_cn/neta-suggest/SKILL.md +662 -0
|
@@ -0,0 +1,377 @@
|
|
|
1
|
+
# 互动玩法推荐列表最佳实践
|
|
2
|
+
|
|
3
|
+
## 概述
|
|
4
|
+
|
|
5
|
+
`request_interactive_feed` 是一个强大的互动玩法内容推荐接口,支持多种场景的自动判断。本文档介绍如何高效使用这个技能。
|
|
6
|
+
|
|
7
|
+
## 核心概念
|
|
8
|
+
|
|
9
|
+
### 场景自动判断机制
|
|
10
|
+
|
|
11
|
+
接口根据传入参数自动判断场景,无需手动指定 Scene 枚举:
|
|
12
|
+
|
|
13
|
+
- **提供 `collection_uuid`**:进入相关性场景
|
|
14
|
+
- **提供 `target_user_uuid`**:进入个人主页场景
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
- **无特殊参数**:默认首页互动流主模式
|
|
18
|
+
|
|
19
|
+
### 关键参数说明
|
|
20
|
+
|
|
21
|
+
- **`collection_uuid`**:最重要的场景控制参数
|
|
22
|
+
- `page_index=0`:获取单个作品的详细信息(单体接口)
|
|
23
|
+
- `page_index>0`:获取与该作品相关的其他作品(相关推荐)
|
|
24
|
+
|
|
25
|
+
- **`page_index`**:不仅控制分页,还影响场景类型
|
|
26
|
+
- `0`:通常用于获取详情或首屏
|
|
27
|
+
- `>0`:用于获取相关推荐或继续浏览
|
|
28
|
+
|
|
29
|
+
- **`biz_trace_id`**:保持会话连续性
|
|
30
|
+
- 首次请求:不传或传空
|
|
31
|
+
- 后续请求:使用上一次返回的 `biz_trace_id`
|
|
32
|
+
|
|
33
|
+
## 常见使用场景
|
|
34
|
+
|
|
35
|
+
### 1. 获取首页推荐列表(默认场景)
|
|
36
|
+
|
|
37
|
+
最基础的用法,用于浏览首页互动流。
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# 获取首页推荐
|
|
41
|
+
neta-cli request_interactive_feed --page_index 0 --page_size 10
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**特点:**
|
|
45
|
+
- 不需要额外参数
|
|
46
|
+
- 返回个性化的推荐内容
|
|
47
|
+
- 适合用户打开 APP 时的默认展示
|
|
48
|
+
|
|
49
|
+
### 2. 查看单个作品详情
|
|
50
|
+
|
|
51
|
+
当需要获取某个作品的完整信息时使用。
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# 获取单个作品详情
|
|
55
|
+
neta-cli read_collection --uuid "目标作品 UUID"
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### 3. 获取相似作品推荐
|
|
59
|
+
|
|
60
|
+
基于某个作品获取相关推荐内容。
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
# 获取相似作品(从第 1 页开始)
|
|
64
|
+
neta-cli request_interactive_feed \
|
|
65
|
+
--page_index 1 \
|
|
66
|
+
--page_size 10 \
|
|
67
|
+
--collection_uuid "种子作品 UUID"
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
**特点:**
|
|
71
|
+
- 基于内容相似度推荐
|
|
72
|
+
- 适合"看了又看"场景
|
|
73
|
+
|
|
74
|
+
### 4. 查看原作及同款子作品
|
|
75
|
+
|
|
76
|
+
查看某个作品的原作以及所有同款二创作品。
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
# 获取原作及全部同款
|
|
80
|
+
neta-cli request_interactive_feed \
|
|
81
|
+
--page_index 0 \
|
|
82
|
+
--page_size 20 \
|
|
83
|
+
--scene 'relation_feed_child' \
|
|
84
|
+
--target_collection_uuid "目标合集 UUID" \
|
|
85
|
+
--collection_uuid "目标合集 UUID"
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**特点:**
|
|
89
|
+
- 需要同时提供 `collection_uuid` 和 `target_collection_uuid`
|
|
90
|
+
- 指定 `scene='relation_feed_child'`
|
|
91
|
+
- 返回原作信息和所有同款作品
|
|
92
|
+
|
|
93
|
+
### 5. 查看用户个人主页
|
|
94
|
+
|
|
95
|
+
获取指定用户的作品集。
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# 获取用户主页
|
|
99
|
+
neta-cli request_interactive_feed \
|
|
100
|
+
--page_index 0 \
|
|
101
|
+
--page_size 20 \
|
|
102
|
+
--scene 'personal_feed' \
|
|
103
|
+
--target_user_uuid "用户 UUID"
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
**特点:**
|
|
107
|
+
- 必须提供 `target_user_uuid`
|
|
108
|
+
- 指定 `scene='personal_feed'`
|
|
109
|
+
- 返回该用户的所有作品
|
|
110
|
+
|
|
111
|
+
### 6. 评论区查看子作品
|
|
112
|
+
|
|
113
|
+
在评论区查看某个作品的子作品列表。
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
# 获取评论区子作品
|
|
117
|
+
neta-cli request_interactive_feed \
|
|
118
|
+
--page_index 0 \
|
|
119
|
+
--page_size 20 \
|
|
120
|
+
--scene 'relation_feed_same' \
|
|
121
|
+
--collection_uuid "父作品 UUID"
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
**特点:**
|
|
125
|
+
- 指定 `scene='relation_feed_same'`
|
|
126
|
+
- 基于父子关系筛选
|
|
127
|
+
- 适合"同系列作品"场景
|
|
128
|
+
|
|
129
|
+
## 翻页连续性维护
|
|
130
|
+
|
|
131
|
+
为了保持推荐结果的一致性和连续性,需要正确使用 `biz_trace_id`。
|
|
132
|
+
|
|
133
|
+
### 正确的翻页流程
|
|
134
|
+
|
|
135
|
+
**核心原则:使用第一次请求返回的 biz_trace_id,后续所有请求都使用这个值。**
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
# 第 1 次请求(首页)
|
|
139
|
+
neta-cli request_interactive_feed \
|
|
140
|
+
--page_index 0 \
|
|
141
|
+
--page_size 10 > /tmp/page0.json
|
|
142
|
+
|
|
143
|
+
# 从返回结果中提取 biz_trace_id
|
|
144
|
+
BIZ_TRACE_ID=$(cat /tmp/page0.json | jq -r '.page_data.biz_trace_id')
|
|
145
|
+
|
|
146
|
+
# 第 2 次请求(下一页)- 使用相同的 biz_trace_id
|
|
147
|
+
neta-cli request_interactive_feed \
|
|
148
|
+
--page_index 1 \
|
|
149
|
+
--page_size 10 \
|
|
150
|
+
--biz_trace_id "$BIZ_TRACE_ID"
|
|
151
|
+
|
|
152
|
+
# 第 3 次请求 - 继续使用同一个 biz_trace_id
|
|
153
|
+
neta-cli request_interactive_feed \
|
|
154
|
+
--page_index 2 \
|
|
155
|
+
--page_size 10 \
|
|
156
|
+
--biz_trace_id "$BIZ_TRACE_ID"
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### 错误示例
|
|
160
|
+
|
|
161
|
+
**❌ 错误 1:每次都用上一次的返回值**
|
|
162
|
+
```bash
|
|
163
|
+
# 第 1 页
|
|
164
|
+
neta-cli request_interactive_feed --page_index 0 > /tmp/page0.json
|
|
165
|
+
BIZ_TRACE_ID_0=$(cat /tmp/page0.json | jq -r '.page_data.biz_trace_id')
|
|
166
|
+
|
|
167
|
+
# 第 2 页(正确:使用第 1 页返回的)
|
|
168
|
+
neta-cli request_interactive_feed --page_index 1 --biz_trace_id "$BIZ_TRACE_ID_0" > /tmp/page1.json
|
|
169
|
+
BIZ_TRACE_ID_1=$(cat /tmp/page1.json | jq -r '.page_data.biz_trace_id')
|
|
170
|
+
|
|
171
|
+
# 第 3 页(错误:使用了第 2 页返回的,应该一直用第 1 页的)
|
|
172
|
+
neta-cli request_interactive_feed --page_index 2 --biz_trace_id "$BIZ_TRACE_ID_1"
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**❌ 错误 2:完全不传 biz_trace_id**
|
|
176
|
+
```bash
|
|
177
|
+
# 每次都开启新的会话,推荐内容会不连续
|
|
178
|
+
neta-cli request_interactive_feed --page_index 0
|
|
179
|
+
neta-cli request_interactive_feed --page_index 1 # 没有 biz_trace_id
|
|
180
|
+
neta-cli request_interactive_feed --page_index 2 # 没有 biz_trace_id
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
## 参数组合技巧
|
|
184
|
+
|
|
185
|
+
### 组合 1:基础浏览
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
neta-cli request_interactive_feed \
|
|
189
|
+
--page_index 0 \
|
|
190
|
+
--page_size 10
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
### 组合 2:个人主页 + 翻页
|
|
194
|
+
|
|
195
|
+
```bash
|
|
196
|
+
# 第 1 页
|
|
197
|
+
neta-cli request_interactive_feed \
|
|
198
|
+
--page_index 0 \
|
|
199
|
+
--page_size 20 \
|
|
200
|
+
--scene 'personal_feed' \
|
|
201
|
+
--target_user_uuid "user-uuid"
|
|
202
|
+
|
|
203
|
+
# 第 2 页(使用返回的 biz_trace_id)
|
|
204
|
+
neta-cli request_interactive_feed \
|
|
205
|
+
--page_index 1 \
|
|
206
|
+
--page_size 20 \
|
|
207
|
+
--scene 'personal_feed' \
|
|
208
|
+
--target_user_uuid "user-uuid" \
|
|
209
|
+
--biz_trace_id "从上一页获取"
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### 组合 3:精确场景控制
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
# 查看某作品的同款二创
|
|
216
|
+
neta-cli request_interactive_feed \
|
|
217
|
+
--page_index 0 \
|
|
218
|
+
--page_size 15 \
|
|
219
|
+
--scene 'relation_feed_same' \
|
|
220
|
+
--collection_uuid "parent-work-uuid"
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## 输出数据结构
|
|
224
|
+
|
|
225
|
+
### module_list 模块类型
|
|
226
|
+
|
|
227
|
+
返回的 `module_list` 包含不同类型的模块:
|
|
228
|
+
|
|
229
|
+
1. **NORMAL** - 普通作品模块
|
|
230
|
+
- `template_id: "NORMAL"`
|
|
231
|
+
- 包含完整的作品信息、封面图、作者信息等
|
|
232
|
+
|
|
233
|
+
2. **DRAFT** - 草稿模块
|
|
234
|
+
- `template_id: "DRAFT"`
|
|
235
|
+
- 用户未完成的创作草稿
|
|
236
|
+
|
|
237
|
+
3. **SPACE** - 空间入口模块
|
|
238
|
+
- `template_id: "into_space"`
|
|
239
|
+
- 引导用户进入特定空间
|
|
240
|
+
|
|
241
|
+
### 关键数据字段
|
|
242
|
+
|
|
243
|
+
每个模块项包含以下字段:
|
|
244
|
+
|
|
245
|
+
- **data_id**: 模块唯一标识
|
|
246
|
+
- **module_id**: 模块类型(NORMAL/DRAFT/SPACE)
|
|
247
|
+
- **template_id**: 模板类型
|
|
248
|
+
- **json_data**: 具体数据对象,根据 template_id 不同包含不同的字段
|
|
249
|
+
- uuid: 作品 UUID
|
|
250
|
+
- name: 作品名称
|
|
251
|
+
- coverUrl: 封面图 URL
|
|
252
|
+
- 等其他字段...
|
|
253
|
+
|
|
254
|
+
## 性能优化建议
|
|
255
|
+
|
|
256
|
+
### 1. 合理设置 page_size
|
|
257
|
+
|
|
258
|
+
- **首页浏览**:10-20(平衡加载速度和流量)
|
|
259
|
+
- **个人主页**:20-30(用户有明确目的)
|
|
260
|
+
- **相关推荐**:10-15(快速试错)
|
|
261
|
+
- **单个详情**:1(只获取一个)
|
|
262
|
+
|
|
263
|
+
### 2. 缓存策略
|
|
264
|
+
|
|
265
|
+
缓存推荐结果,避免重复请求:
|
|
266
|
+
|
|
267
|
+
```bash
|
|
268
|
+
# 缓存第一页结果
|
|
269
|
+
neta-cli request_interactive_feed --page_index 0 > /tmp/feed_cache.json
|
|
270
|
+
|
|
271
|
+
# 使用缓存(从文件读取)
|
|
272
|
+
cat /tmp/feed_cache.json | jq '.module_list'
|
|
273
|
+
```
|
|
274
|
+
|
|
275
|
+
**实际应用中可以使用文件系统或数据库来缓存结果。**
|
|
276
|
+
|
|
277
|
+
### 3. 预加载策略
|
|
278
|
+
|
|
279
|
+
在用户浏览当前页时,后台预加载下一页:
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
# 获取当前页
|
|
283
|
+
neta-cli request_interactive_feed --page_index 0 > /tmp/page0.json &
|
|
284
|
+
|
|
285
|
+
# 同时预加载下一页(后台任务)
|
|
286
|
+
neta-cli request_interactive_feed --page_index 1 > /tmp/page1.prefetch.json &
|
|
287
|
+
wait
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
**这样可以提升用户体验,减少等待时间。**
|
|
291
|
+
|
|
292
|
+
## 调试技巧
|
|
293
|
+
|
|
294
|
+
### 1. 验证场景是否正确
|
|
295
|
+
|
|
296
|
+
检查返回的 `module_list` 内容是否符合预期:
|
|
297
|
+
- 首页应该有多样化的内容
|
|
298
|
+
- 个人主页应该只有该用户的作品
|
|
299
|
+
- 相关推荐应该与种子作品相似
|
|
300
|
+
|
|
301
|
+
### 2. 检查 biz_trace_id 一致性
|
|
302
|
+
|
|
303
|
+
验证请求和返回的 biz_trace_id 是否一致:
|
|
304
|
+
|
|
305
|
+
```bash
|
|
306
|
+
# 请求时指定 biz_trace_id
|
|
307
|
+
neta-cli request_interactive_feed \
|
|
308
|
+
--page_index 1 \
|
|
309
|
+
--biz_trace_id "your-biz-trace-id" > /tmp/response.json
|
|
310
|
+
|
|
311
|
+
# 检查返回的 biz_trace_id
|
|
312
|
+
cat /tmp/response.json | jq '.page_data.biz_trace_id'
|
|
313
|
+
|
|
314
|
+
# 两者应该相同(除非服务端主动更新)
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### 3. 使用日志调试
|
|
318
|
+
|
|
319
|
+
```bash
|
|
320
|
+
# 开启 debug 日志查看请求参数
|
|
321
|
+
DEBUG=* neta-cli request_interactive_feed --page_index 0
|
|
322
|
+
```
|
|
323
|
+
|
|
324
|
+
## 常见问题
|
|
325
|
+
|
|
326
|
+
### Q1: 为什么返回的结果为空?
|
|
327
|
+
|
|
328
|
+
**可能原因:**
|
|
329
|
+
- 场景参数组合不正确
|
|
330
|
+
- `collection_uuid` 或 `target_user_uuid` 无效
|
|
331
|
+
- 该场景下确实没有内容
|
|
332
|
+
|
|
333
|
+
**解决方案:**
|
|
334
|
+
- 先尝试默认场景(不加任何参数)
|
|
335
|
+
- 验证 UUID 是否有效
|
|
336
|
+
- 检查 `page_index` 是否过大
|
|
337
|
+
|
|
338
|
+
### Q2: biz_trace_id 应该用哪一个?
|
|
339
|
+
|
|
340
|
+
**原则:使用第一次请求返回的 biz_trace_id**
|
|
341
|
+
|
|
342
|
+
```bash
|
|
343
|
+
# ✅ 正确:一直使用第一次返回的 biz_trace_id
|
|
344
|
+
neta-cli request_interactive_feed --page_index 0 > /tmp/page0.json
|
|
345
|
+
BIZ_TRACE_ID=$(cat /tmp/page0.json | jq -r '.page_data.biz_trace_id')
|
|
346
|
+
|
|
347
|
+
neta-cli request_interactive_feed --page_index 1 --biz_trace_id "$BIZ_TRACE_ID"
|
|
348
|
+
neta-cli request_interactive_feed --page_index 2 --biz_trace_id "$BIZ_TRACE_ID"
|
|
349
|
+
|
|
350
|
+
# ❌ 错误:每次都用上一次的返回值
|
|
351
|
+
neta-cli request_interactive_feed --page_index 0 > /tmp/page0.json
|
|
352
|
+
BIZ_TRACE_ID_0=$(cat /tmp/page0.json | jq -r '.page_data.biz_trace_id')
|
|
353
|
+
|
|
354
|
+
neta-cli request_interactive_feed --page_index 1 --biz_trace_id "$BIZ_TRACE_ID_0" > /tmp/page1.json
|
|
355
|
+
BIZ_TRACE_ID_1=$(cat /tmp/page1.json | jq -r '.page_data.biz_trace_id')
|
|
356
|
+
|
|
357
|
+
neta-cli request_interactive_feed --page_index 2 --biz_trace_id "$BIZ_TRACE_ID_1" # 错误!应该用 BIZ_TRACE_ID_0
|
|
358
|
+
```
|
|
359
|
+
|
|
360
|
+
### Q3: 如何区分 NORMAL 模块中的不同内容类型?
|
|
361
|
+
|
|
362
|
+
通过 `json_data` 中的字段判断:
|
|
363
|
+
- 检查 `has_video` 判断是否有视频
|
|
364
|
+
- 检查 `bgm_uuid` 判断是否有背景音乐
|
|
365
|
+
- 检查 `is_interactive` 判断是否是交互式作品
|
|
366
|
+
|
|
367
|
+
## 总结
|
|
368
|
+
|
|
369
|
+
使用 `request_interactive_feed` 的关键点:
|
|
370
|
+
|
|
371
|
+
1. **理解场景自动判断**:通过参数组合自动切换场景
|
|
372
|
+
2. **掌握 page_index 语义**:0 通常是详情,>0 是推荐
|
|
373
|
+
3. **维护 biz_trace_id**:保持会话连续性
|
|
374
|
+
4. **合理设置 page_size**:根据场景选择合适的大小
|
|
375
|
+
5. **善用 scene 参数**:精确控制特定场景
|
|
376
|
+
|
|
377
|
+
通过遵循这些最佳实践,你可以更高效地使用这个技能,获得更好的推荐效果。
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
## 社交互动技能
|
|
2
|
+
|
|
3
|
+
### 1. 社区互动
|
|
4
|
+
|
|
5
|
+
#### like_collection - 点赞/取消点赞作品
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# 点赞作品
|
|
9
|
+
neta-cli like_collection --uuid "目标作品 UUID"
|
|
10
|
+
|
|
11
|
+
# 取消点赞
|
|
12
|
+
neta-cli like_collection --uuid "目标作品 UUID" --is_cancel true
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
#### favor_collection - 收藏/取消收藏作品
|
|
16
|
+
|
|
17
|
+
```bash
|
|
18
|
+
# 收藏作品
|
|
19
|
+
neta-cli favor_collection --uuid "目标作品 UUID"
|
|
20
|
+
|
|
21
|
+
# 取消收藏
|
|
22
|
+
neta-cli favor_collection --uuid "目标作品 UUID" --is_cancel true
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
#### create_comment - 发布评论
|
|
26
|
+
|
|
27
|
+
支持对作品、评论发布评论
|
|
28
|
+
|
|
29
|
+
**参数说明:**
|
|
30
|
+
- `content`: 评论内容(1-500 字)
|
|
31
|
+
- `parent_uuid`: 父级对象 UUID
|
|
32
|
+
- `parent_type`: 父级类型(collection/comment)
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# 对作品发表评论(主评论)
|
|
36
|
+
neta-cli create_comment \
|
|
37
|
+
--parent_uuid "目标作品 UUID" \
|
|
38
|
+
--parent_type "collection" \
|
|
39
|
+
--content "老师,这个作品真的好棒啊!"
|
|
40
|
+
|
|
41
|
+
# 对评论进行回复(楼中楼)
|
|
42
|
+
neta-cli create_comment \
|
|
43
|
+
--parent_uuid "目标评论 UUID" \
|
|
44
|
+
--parent_type "comment" \
|
|
45
|
+
--content "同意楼上的观点!"
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**注意:** `parent_type` 只支持 `collection`(作品)和 `comment`(评论),不支持角色或元素。
|
|
49
|
+
|
|
50
|
+
### 2. 用户互动
|
|
51
|
+
|
|
52
|
+
#### subscribe_user - 关注/取消关注用户
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
# 关注用户
|
|
56
|
+
neta-cli subscribe_user --user_uuid "目标用户 UUID" --is_cancel false
|
|
57
|
+
|
|
58
|
+
# 取消关注
|
|
59
|
+
neta-cli subscribe_user --user_uuid "目标用户 UUID" --is_cancel true
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
#### get_subscribe_list - 查看我关注的人
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
neta-cli get_subscribe_list --page_index 0 --page_size 10
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
#### get_fan_list - 查看我的粉丝
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
neta-cli get_fan_list --page_index 0 --page_size 10
|
|
72
|
+
```
|
|
73
|
+
|
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
# 歌曲生成最佳实践
|
|
2
|
+
|
|
3
|
+
适用于 `make_song` 命令。
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 提示词结构
|
|
8
|
+
|
|
9
|
+
**推荐格式:**
|
|
10
|
+
```
|
|
11
|
+
[音乐风格] + [情绪/氛围] + [节奏/速度] + [乐器/元素] + [主题/场景]
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
**示例:**
|
|
15
|
+
```
|
|
16
|
+
欢快的 J-Pop 风格,充满活力的少女感,中快节奏,电子合成器和鼓点,关于友情和梦想的主题
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 音乐风格参考
|
|
22
|
+
|
|
23
|
+
| 风格 | 描述示例 |
|
|
24
|
+
|------|----------|
|
|
25
|
+
| J-Pop | "欢快的 J-Pop,青春活力,电子合成器" |
|
|
26
|
+
| 民谣 | "温柔的城市民谣,吉他伴奏,清新自然" |
|
|
27
|
+
| 电子 | "动感电子舞曲,强烈节拍,未来感" |
|
|
28
|
+
| 摇滚 | "激情摇滚,电吉他独奏,充满力量" |
|
|
29
|
+
| 古典 | "优雅的钢琴曲,舒缓节奏,浪漫氛围" |
|
|
30
|
+
| R&B | "节奏蓝调,慵懒嗓音,都市夜景" |
|
|
31
|
+
| 古风 | "中国风,古筝笛子,诗意悠扬" |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## 情绪/氛围词汇
|
|
36
|
+
|
|
37
|
+
| 情绪 | 示例描述 |
|
|
38
|
+
|------|----------|
|
|
39
|
+
| 欢快 | "充满活力"、"阳光明媚"、"积极向上" |
|
|
40
|
+
| 忧伤 | "淡淡的忧伤"、"怀念过去"、"雨夜" |
|
|
41
|
+
| 浪漫 | "温柔甜蜜"、"月光下"、"初恋感觉" |
|
|
42
|
+
| 激昂 | "热血沸腾"、"战斗意志"、"永不放弃" |
|
|
43
|
+
| 宁静 | "平和安详"、"清晨森林"、"冥想" |
|
|
44
|
+
| 神秘 | "神秘莫测"、"古老传说"、"魔法氛围" |
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## 歌词格式模板
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
[Verse 1]
|
|
52
|
+
主歌第一段,叙述故事背景
|
|
53
|
+
4-8 行,建议押韵
|
|
54
|
+
|
|
55
|
+
[Pre-Chorus]
|
|
56
|
+
预副歌,情绪铺垫
|
|
57
|
+
2-4 行
|
|
58
|
+
|
|
59
|
+
[Chorus]
|
|
60
|
+
副歌,高潮部分,记忆点
|
|
61
|
+
4-8 行,重复性强
|
|
62
|
+
|
|
63
|
+
[Verse 2]
|
|
64
|
+
主歌第二段,故事发展
|
|
65
|
+
4-8 行
|
|
66
|
+
|
|
67
|
+
[Chorus]
|
|
68
|
+
副歌重复
|
|
69
|
+
|
|
70
|
+
[Bridge]
|
|
71
|
+
桥段,情绪转折或升华
|
|
72
|
+
2-4 行
|
|
73
|
+
|
|
74
|
+
[Chorus]
|
|
75
|
+
副歌最后一次(可升调)
|
|
76
|
+
|
|
77
|
+
[Outro]
|
|
78
|
+
结尾,渐弱
|
|
79
|
+
2-4 行
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 歌词示例
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
[Verse 1]
|
|
88
|
+
清晨的阳光洒在窗前
|
|
89
|
+
微风吹过熟悉的街道
|
|
90
|
+
想起昨天你的笑脸
|
|
91
|
+
心中涌起温暖感觉
|
|
92
|
+
|
|
93
|
+
[Pre-Chorus]
|
|
94
|
+
时光悄悄流转
|
|
95
|
+
我们的故事继续
|
|
96
|
+
|
|
97
|
+
[Chorus]
|
|
98
|
+
一起走过春夏秋冬
|
|
99
|
+
手牵手看遍世间风景
|
|
100
|
+
无论未来多么遥远
|
|
101
|
+
这份友情永远不变
|
|
102
|
+
|
|
103
|
+
[Verse 2]
|
|
104
|
+
放学后的咖啡厅角落
|
|
105
|
+
分享着彼此的梦想
|
|
106
|
+
你说要成为歌手
|
|
107
|
+
我说要环游世界
|
|
108
|
+
|
|
109
|
+
[Chorus]
|
|
110
|
+
一起走过春夏秋冬
|
|
111
|
+
手牵手看遍世间风景
|
|
112
|
+
无论未来多么遥远
|
|
113
|
+
这份友情永远不变
|
|
114
|
+
|
|
115
|
+
[Bridge]
|
|
116
|
+
即使有一天各奔东西
|
|
117
|
+
这份回忆永远珍藏
|
|
118
|
+
|
|
119
|
+
[Chorus]
|
|
120
|
+
一起走过春夏秋冬
|
|
121
|
+
手牵手看遍世间风景
|
|
122
|
+
无论未来多么遥远
|
|
123
|
+
这份友情永远不变
|
|
124
|
+
|
|
125
|
+
[Outro]
|
|
126
|
+
谢谢你陪伴的每一天
|
|
127
|
+
我们的故事继续书写
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## 常见用例
|
|
133
|
+
|
|
134
|
+
### 角色主题曲
|
|
135
|
+
|
|
136
|
+
```bash
|
|
137
|
+
neta-cli make_song \
|
|
138
|
+
--prompt "角色专属主题曲,J-Pop 风格,活泼可爱,魔法少女感,电子合成器,明快节奏" \
|
|
139
|
+
--lyrics "[歌词内容...]"
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### 背景音乐
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
neta-cli make_song \
|
|
146
|
+
--prompt "轻柔的钢琴背景音乐,宁静安详,适合阅读,舒缓节奏" \
|
|
147
|
+
--lyrics "[纯音乐可省略歌词或使用简单的哼唱]"
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### 战斗曲
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
neta-cli make_song \
|
|
154
|
+
--prompt "激昂的战斗曲,摇滚风格,电吉他,强烈鼓点,热血沸腾" \
|
|
155
|
+
--lyrics "[Verse 1]
|
|
156
|
+
燃烧吧斗志
|
|
157
|
+
冲破黑暗黎明
|
|
158
|
+
..."
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### 抒情歌曲
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
neta-cli make_song \
|
|
165
|
+
--prompt "温柔的抒情歌曲,民谣风格,吉他伴奏,清新自然,淡淡忧伤" \
|
|
166
|
+
--lyrics "[Verse 1]
|
|
167
|
+
雨后的街道
|
|
168
|
+
一个人走着
|
|
169
|
+
..."
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## 歌词写作技巧
|
|
175
|
+
|
|
176
|
+
### 1. 押韵
|
|
177
|
+
|
|
178
|
+
句尾押韵让歌曲更流畅:
|
|
179
|
+
```
|
|
180
|
+
清晨的阳光洒在窗前 (qián)
|
|
181
|
+
微风吹过熟悉的街道 (dào)
|
|
182
|
+
想起昨天你的笑脸 (liǎn)
|
|
183
|
+
心中涌起温暖感觉 (jué)
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
### 2. 意象具体
|
|
187
|
+
|
|
188
|
+
使用具体的意象而非抽象概念:
|
|
189
|
+
- ❌ "我很开心"
|
|
190
|
+
- ✅ "阳光洒在窗前,微风吹过街道"
|
|
191
|
+
|
|
192
|
+
### 3. 情感递进
|
|
193
|
+
|
|
194
|
+
从主歌到副歌情感逐渐升华:
|
|
195
|
+
```
|
|
196
|
+
Verse: 叙述故事
|
|
197
|
+
Pre-Chorus: 情绪铺垫
|
|
198
|
+
Chorus: 情感爆发
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### 4. 重复记忆点
|
|
202
|
+
|
|
203
|
+
副歌要有容易记住的核心句:
|
|
204
|
+
```
|
|
205
|
+
一起走过春夏秋冬
|
|
206
|
+
手牵手看遍世间风景
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
---
|
|
210
|
+
|
|
211
|
+
## 参数限制
|
|
212
|
+
|
|
213
|
+
| 参数 | 限制 |
|
|
214
|
+
|------|------|
|
|
215
|
+
| prompt | 10-2000 字符 |
|
|
216
|
+
| lyrics | 10-3500 字符 |
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
## 常见问题
|
|
221
|
+
|
|
222
|
+
### Q: 歌词太长怎么办?
|
|
223
|
+
|
|
224
|
+
**A:**
|
|
225
|
+
- 精简到 3500 字符以内
|
|
226
|
+
- 优先保留主歌和副歌
|
|
227
|
+
- 可以省略部分重复段落
|
|
228
|
+
|
|
229
|
+
### Q: 纯音乐如何生成?
|
|
230
|
+
|
|
231
|
+
**A:**
|
|
232
|
+
- 歌词可以填写简单的哼唱词(如"啦~")
|
|
233
|
+
- 或者填写简短的氛围描述
|
|
234
|
+
- 重点在 prompt 中描述音乐风格
|
|
235
|
+
|
|
236
|
+
### Q: 如何保持风格一致性?
|
|
237
|
+
|
|
238
|
+
**A:**
|
|
239
|
+
- 保存成功的 prompt 模板
|
|
240
|
+
- 使用相似的风格描述词汇
|
|
241
|
+
- 参考同类型的成功作品
|
|
242
|
+
|
|
243
|
+
---
|
|
244
|
+
|
|
245
|
+
## 相关文档
|
|
246
|
+
|
|
247
|
+
- [歌曲 MV](./song-mv.md) - 结合歌曲和视频制作完整 MV
|