@9000ai/cli 0.1.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.
Files changed (62) hide show
  1. package/dist/client.d.ts +10 -0
  2. package/dist/client.js +45 -0
  3. package/dist/commands/auth.d.ts +2 -0
  4. package/dist/commands/auth.js +18 -0
  5. package/dist/commands/config.d.ts +2 -0
  6. package/dist/commands/config.js +30 -0
  7. package/dist/commands/feedback.d.ts +2 -0
  8. package/dist/commands/feedback.js +48 -0
  9. package/dist/commands/monitor.d.ts +2 -0
  10. package/dist/commands/monitor.js +101 -0
  11. package/dist/commands/search.d.ts +2 -0
  12. package/dist/commands/search.js +135 -0
  13. package/dist/commands/task.d.ts +2 -0
  14. package/dist/commands/task.js +20 -0
  15. package/dist/commands/transcribe.d.ts +2 -0
  16. package/dist/commands/transcribe.js +59 -0
  17. package/dist/config.d.ts +8 -0
  18. package/dist/config.js +37 -0
  19. package/dist/index.d.ts +2 -0
  20. package/dist/index.js +25 -0
  21. package/dist/output.d.ts +6 -0
  22. package/dist/output.js +49 -0
  23. package/dist/postinstall.d.ts +5 -0
  24. package/dist/postinstall.js +17 -0
  25. package/dist/utils/format.d.ts +1 -0
  26. package/dist/utils/format.js +16 -0
  27. package/package.json +31 -0
  28. package/skills/9000AI-hub/SKILL.md +195 -0
  29. package/skills/9000AI-hub/configure.py +56 -0
  30. package/skills/9000AI-hub/init/SKILL.md +130 -0
  31. package/skills/9000AI-hub/init/templates/CLAUDE.md +24 -0
  32. package/skills/9000AI-hub/init/templates/agents/README.md +7 -0
  33. package/skills/9000AI-hub/init/templates/agents/content-agent.md +181 -0
  34. package/skills/9000AI-hub/init/templates/claims/README.md +91 -0
  35. package/skills/9000AI-hub/init/templates/claims/claims.json +7 -0
  36. package/skills/9000AI-hub/init/templates/guide.md +185 -0
  37. package/skills/9000AI-hub/init/templates/inbox/README.md +26 -0
  38. package/skills/9000AI-hub/init/templates/profile/identity.md +8 -0
  39. package/skills/9000AI-hub/init/templates/profile/product.md +26 -0
  40. package/skills/9000AI-hub/init/templates/profile/topics.md +7 -0
  41. package/skills/9000AI-hub/init/templates/profile/voice.md +8 -0
  42. package/skills/9000AI-hub/init/templates/projects/README.md +5 -0
  43. package/skills/9000AI-hub/references/env.example +5 -0
  44. package/skills/9000AI-hub/references/runner-spec-v1.md +138 -0
  45. package/skills/9000AI-hub/shared/__init__.py +1 -0
  46. package/skills/9000AI-hub/shared/runner.py +135 -0
  47. package/skills/douyin-monitor/SKILL.md +112 -0
  48. package/skills/douyin-monitor/agents/openai.yaml +3 -0
  49. package/skills/douyin-monitor/references/endpoints.md +104 -0
  50. package/skills/douyin-monitor/scripts/douyin_monitor_api.py +273 -0
  51. package/skills/douyin-topic-discovery/SKILL.md +146 -0
  52. package/skills/douyin-topic-discovery/agents/openai.yaml +3 -0
  53. package/skills/douyin-topic-discovery/references/endpoints.md +127 -0
  54. package/skills/douyin-topic-discovery/scripts/douyin_topic_discovery_api.py +497 -0
  55. package/skills/douyin-topic-discovery/workflow/topic-research.md +216 -0
  56. package/skills/feedback/SKILL.md +69 -0
  57. package/skills/feedback/references/endpoints.md +46 -0
  58. package/skills/feedback/scripts/feedback_api.py +93 -0
  59. package/skills/video-transcription/SKILL.md +108 -0
  60. package/skills/video-transcription/agents/openai.yaml +3 -0
  61. package/skills/video-transcription/references/endpoints.md +82 -0
  62. package/skills/video-transcription/scripts/video_transcription_api.py +183 -0
@@ -0,0 +1,112 @@
1
+ ---
2
+ name: douyin-monitor-9000AI
3
+ description: 当用户要管理抖音主页监控对象、提交主页监控任务、查看运行历史或回看结果时使用。这个 skill 只负责主页监控这一项业务能力。
4
+ triggers:
5
+ - 抖音主页监控
6
+ - 主页监控
7
+ - 对标账号监控
8
+ - 监控抖音主页
9
+ - 查看主页监控结果
10
+ - /douyin 监控
11
+ - /douyin 主页监控
12
+ - /douyin-monitor-9000AI
13
+ - /douyin 监控 9000AI
14
+ role: operator
15
+ scope: execution
16
+ output-format: task-oriented
17
+ ---
18
+
19
+ # 抖音主页监控 Skill
20
+
21
+ 这个 skill 对应一整套主页监控能力,不只是提交异步任务。
22
+
23
+ ## 适用范围
24
+
25
+ 用于:
26
+ - 查看当前 key 和能力
27
+ - 新建监控对象
28
+ - 查看监控对象列表
29
+ - 修改、启停、重置、删除监控对象
30
+ - 提交主页监控任务
31
+ - 查看运行历史和单次运行详情
32
+ - 查看任务状态和任务结果
33
+
34
+ ## 工作方式
35
+
36
+ 主页监控的"提交运行"是异步任务,标准动作是:
37
+ 1. 先确认或创建监控对象
38
+ 2. 提交后台任务
39
+ 3. 拿到 `task_id` 和 `run_id`
40
+ 4. 告诉用户任务已在后台运行
41
+ 5. 稍后回查运行详情、任务状态或任务结果
42
+
43
+ 如果用户只是管理监控对象或查看历史,不需要走异步等待。
44
+
45
+ 推荐话术:
46
+ - "我已经帮你提交了主页监控任务,任务号是 `<task_id>`,运行号是 `<run_id>`。这条任务会在后台跑,我们先继续别的事情,稍后我再回来查结果。"
47
+
48
+ ## 配置
49
+
50
+ 通过 CLI 统一管理:
51
+
52
+ ```bash
53
+ 9000ai config set --base-url http://127.0.0.1:8025 --api-key <key>
54
+ 9000ai config show
55
+ ```
56
+
57
+ 也支持环境变量:
58
+
59
+ ```text
60
+ 9000AI_BASE_URL
61
+ 9000AI_API_KEY
62
+ ```
63
+
64
+ ## 中文输入约束
65
+
66
+ 如果要提交中文名称、关注方向、备注,优先使用 UTF-8 编码的 JSON 文件。
67
+
68
+ 推荐方式:
69
+ - 把请求体写进 `creator.json`、`creator_update.json`、`run_request.json`
70
+ - 确保文件保存为 UTF-8
71
+ - 再用 `--json-file` 提交
72
+
73
+ 不推荐方式:
74
+ - 在终端里直接内联一大段中文 JSON
75
+
76
+ 后端会拦截明显疑似乱码的内容,要求重新用 UTF-8 提交。
77
+
78
+ ## 命令
79
+
80
+ 查看帮助:
81
+
82
+ ```bash
83
+ 9000ai monitor --help
84
+ ```
85
+
86
+ 常用命令:
87
+
88
+ ```bash
89
+ 9000ai config set --base-url http://127.0.0.1:8025 --api-key <key>
90
+ 9000ai auth whoami
91
+ 9000ai auth capabilities
92
+ 9000ai monitor list-creators
93
+ 9000ai monitor create-creator --json-file creator.json
94
+ 9000ai monitor update-creator --creator-id <creator_id> --json-file creator_update.json
95
+ 9000ai monitor enable-creator --creator-id <creator_id>
96
+ 9000ai monitor disable-creator --creator-id <creator_id>
97
+ 9000ai monitor reset-creator --creator-id <creator_id>
98
+ 9000ai monitor delete-creator --creator-id <creator_id>
99
+ 9000ai monitor submit --json-file run_request.json
100
+ 9000ai monitor list-runs
101
+ 9000ai monitor run-detail --run-id <run_id>
102
+ 9000ai task status --task-id <task_id>
103
+ 9000ai task results --task-id <task_id>
104
+ ```
105
+
106
+ ## 参考
107
+
108
+ 接口和请求体示例见:
109
+
110
+ ```text
111
+ douyin-monitor-9000AI/references/endpoints.md
112
+ ```
@@ -0,0 +1,3 @@
1
+ display_name: douyin-monitor-9000AI
2
+ short_description: 通过 /douyin-monitor-9000AI 提交主页监控任务并回查结果
3
+ default_prompt: 帮我通过 /douyin-monitor-9000AI 提交抖音主页监控任务,拿到 task_id 后稍后回查结果。
@@ -0,0 +1,104 @@
1
+ # 抖音主页监控接口
2
+
3
+ 基础地址默认:
4
+
5
+ ```text
6
+ http://127.0.0.1:8025
7
+ ```
8
+
9
+ 所有接口都需要:
10
+
11
+ ```text
12
+ X-API-Key: <你的 key>
13
+ ```
14
+
15
+ 本地固定配置文件:
16
+
17
+ ```text
18
+ douyin-monitor-9000AI/local/config.json
19
+ ```
20
+
21
+ ## 鉴权与能力
22
+
23
+ ```text
24
+ GET /api/v1/auth/me
25
+ GET /api/v1/auth/capability-permissions
26
+ ```
27
+
28
+ ## 监控对象管理
29
+
30
+ ```text
31
+ GET /api/v1/douyin/monitor/creators
32
+ POST /api/v1/douyin/monitor/creators
33
+ GET /api/v1/douyin/monitor/creators/{creator_id}
34
+ PATCH /api/v1/douyin/monitor/creators/{creator_id}
35
+ DELETE /api/v1/douyin/monitor/creators/{creator_id}
36
+ POST /api/v1/douyin/monitor/creators/{creator_id}/enable
37
+ POST /api/v1/douyin/monitor/creators/{creator_id}/disable
38
+ POST /api/v1/douyin/monitor/creators/{creator_id}/reset
39
+ ```
40
+
41
+ 新增监控对象请求体示例:
42
+
43
+ ```json
44
+ {
45
+ "name": "李一般",
46
+ "sec_user_id": "MS4wLjABAAAA1wMuf3tRz1UJFVViYSmD7J9Y8M8zCEs4Clv9STQdjjU",
47
+ "focus": "热点对标账号",
48
+ "notes": "AI 热点与话题表达",
49
+ "enabled": true
50
+ }
51
+ ```
52
+
53
+ 更新监控对象请求体示例:
54
+
55
+ ```json
56
+ {
57
+ "notes": "已更新备注",
58
+ "enabled": true
59
+ }
60
+ ```
61
+
62
+ ## 运行任务
63
+
64
+ ```text
65
+ POST /api/v1/douyin/monitor/run
66
+ GET /api/v1/douyin/monitor/runs
67
+ GET /api/v1/douyin/monitor/runs/{run_id}
68
+ GET /api/v1/tasks/{task_id}
69
+ GET /api/v1/tasks/{task_id}/results
70
+ ```
71
+
72
+ 提交监控任务示例:
73
+
74
+ ```json
75
+ {
76
+ "creator_ids": [
77
+ "b2d7bc00-26fa-4b78-9029-6ace9f85fc8f"
78
+ ],
79
+ "count": 12,
80
+ "sort_type": 0,
81
+ "top": 20,
82
+ "force_fresh": false
83
+ }
84
+ ```
85
+
86
+ 也可以直接传 creators:
87
+
88
+ ```json
89
+ {
90
+ "creators": [
91
+ {
92
+ "name": "李一般",
93
+ "sec_user_id": "MS4wLjABAAAA1wMuf3tRz1UJFVViYSmD7J9Y8M8zCEs4Clv9STQdjjU",
94
+ "focus": "热点对标账号",
95
+ "notes": "AI 热点与话题表达",
96
+ "enabled": true
97
+ }
98
+ ],
99
+ "count": 12,
100
+ "sort_type": 0,
101
+ "top": 20,
102
+ "force_fresh": false
103
+ }
104
+ ```
@@ -0,0 +1,273 @@
1
+ from __future__ import annotations
2
+
3
+ import argparse
4
+ import sys
5
+ from pathlib import Path
6
+
7
+ REPO_ROOT = Path(__file__).resolve().parents[2]
8
+ HUB_ROOT = REPO_ROOT / "9000AI-hub-9000AI"
9
+ if str(HUB_ROOT) not in sys.path:
10
+ sys.path.insert(0, str(HUB_ROOT))
11
+
12
+ from shared.runner import ( # noqa: E402
13
+ ModuleSpec,
14
+ configure_stdout_encoding,
15
+ load_json_file,
16
+ print_json,
17
+ request_json,
18
+ resolve_api_key,
19
+ resolve_base_url,
20
+ save_local_config,
21
+ )
22
+
23
+ SKILL_ROOT = Path(__file__).resolve().parents[1]
24
+ MODULE_SPEC = ModuleSpec(
25
+ module="douyin-monitor",
26
+ skill_root=SKILL_ROOT,
27
+ )
28
+
29
+
30
+ def build_parser() -> argparse.ArgumentParser:
31
+ parser = argparse.ArgumentParser(description="Douyin monitor API client")
32
+ parser.add_argument("--base-url", default=None)
33
+ parser.add_argument("--api-key", default=None)
34
+ subparsers = parser.add_subparsers(dest="command", required=True)
35
+
36
+ subparsers.add_parser("configure", help="写入本地配置文件")
37
+ subparsers.add_parser("whoami", help="查看当前 key 对应的调用方")
38
+ subparsers.add_parser("capabilities", help="查看当前 key 开通的能力")
39
+ subparsers.add_parser("list-creators", help="查看监控对象列表")
40
+
41
+ create_creator = subparsers.add_parser("create-creator", help="新增监控对象")
42
+ create_creator.add_argument("--json-file", required=True)
43
+
44
+ get_creator = subparsers.add_parser("get-creator", help="查看单个监控对象")
45
+ get_creator.add_argument("--creator-id", required=True)
46
+
47
+ update_creator = subparsers.add_parser("update-creator", help="修改监控对象")
48
+ update_creator.add_argument("--creator-id", required=True)
49
+ update_creator.add_argument("--json-file", required=True)
50
+
51
+ delete_creator = subparsers.add_parser("delete-creator", help="删除监控对象")
52
+ delete_creator.add_argument("--creator-id", required=True)
53
+
54
+ enable_creator = subparsers.add_parser("enable-creator", help="启用监控对象")
55
+ enable_creator.add_argument("--creator-id", required=True)
56
+
57
+ disable_creator = subparsers.add_parser("disable-creator", help="停用监控对象")
58
+ disable_creator.add_argument("--creator-id", required=True)
59
+
60
+ reset_creator = subparsers.add_parser("reset-creator", help="重置监控对象状态")
61
+ reset_creator.add_argument("--creator-id", required=True)
62
+
63
+ submit = subparsers.add_parser("submit", help="提交主页监控任务")
64
+ submit.add_argument("--json-file", required=True)
65
+
66
+ list_runs = subparsers.add_parser("list-runs", help="查看运行历史")
67
+ list_runs.add_argument("--page", type=int, default=1)
68
+ list_runs.add_argument("--page-size", type=int, default=20)
69
+ list_runs.add_argument("--status", default=None)
70
+
71
+ run_detail = subparsers.add_parser("run-detail", help="查看单次运行详情")
72
+ run_detail.add_argument("--run-id", required=True)
73
+
74
+ task = subparsers.add_parser("task", help="查看任务状态")
75
+ task.add_argument("--task-id", required=True)
76
+
77
+ results = subparsers.add_parser("results", help="查看任务结果")
78
+ results.add_argument("--task-id", required=True)
79
+ return parser
80
+
81
+
82
+ def main() -> None:
83
+ configure_stdout_encoding()
84
+ parser = build_parser()
85
+ args = parser.parse_args()
86
+
87
+ if args.command == "configure":
88
+ if not args.base_url or not args.api_key:
89
+ raise SystemExit("configure 需要同时传 --base-url 和 --api-key")
90
+ save_local_config(MODULE_SPEC, base_url=args.base_url, api_key=args.api_key)
91
+ print_json({"message": "配置已写入", "config_path": str(MODULE_SPEC.config_path)})
92
+ return
93
+
94
+ base_url = resolve_base_url(MODULE_SPEC, args.base_url)
95
+ api_key = resolve_api_key(MODULE_SPEC, args.api_key)
96
+
97
+ if args.command == "whoami":
98
+ print_json(
99
+ request_json(MODULE_SPEC, method="GET", base_url=base_url, api_key=api_key, path="/api/v1/auth/me")
100
+ )
101
+ return
102
+
103
+ if args.command == "capabilities":
104
+ print_json(
105
+ request_json(
106
+ MODULE_SPEC,
107
+ method="GET",
108
+ base_url=base_url,
109
+ api_key=api_key,
110
+ path="/api/v1/auth/capability-permissions",
111
+ )
112
+ )
113
+ return
114
+
115
+ if args.command == "list-creators":
116
+ print_json(
117
+ request_json(
118
+ MODULE_SPEC,
119
+ method="GET",
120
+ base_url=base_url,
121
+ api_key=api_key,
122
+ path="/api/v1/douyin/monitor/creators",
123
+ )
124
+ )
125
+ return
126
+
127
+ if args.command == "create-creator":
128
+ print_json(
129
+ request_json(
130
+ MODULE_SPEC,
131
+ method="POST",
132
+ base_url=base_url,
133
+ api_key=api_key,
134
+ path="/api/v1/douyin/monitor/creators",
135
+ payload=load_json_file(args.json_file),
136
+ )
137
+ )
138
+ return
139
+
140
+ if args.command == "get-creator":
141
+ print_json(
142
+ request_json(
143
+ MODULE_SPEC,
144
+ method="GET",
145
+ base_url=base_url,
146
+ api_key=api_key,
147
+ path=f"/api/v1/douyin/monitor/creators/{args.creator_id}",
148
+ )
149
+ )
150
+ return
151
+
152
+ if args.command == "update-creator":
153
+ print_json(
154
+ request_json(
155
+ MODULE_SPEC,
156
+ method="PATCH",
157
+ base_url=base_url,
158
+ api_key=api_key,
159
+ path=f"/api/v1/douyin/monitor/creators/{args.creator_id}",
160
+ payload=load_json_file(args.json_file),
161
+ )
162
+ )
163
+ return
164
+
165
+ if args.command == "delete-creator":
166
+ print_json(
167
+ request_json(
168
+ MODULE_SPEC,
169
+ method="DELETE",
170
+ base_url=base_url,
171
+ api_key=api_key,
172
+ path=f"/api/v1/douyin/monitor/creators/{args.creator_id}",
173
+ )
174
+ )
175
+ return
176
+
177
+ if args.command == "enable-creator":
178
+ print_json(
179
+ request_json(
180
+ MODULE_SPEC,
181
+ method="POST",
182
+ base_url=base_url,
183
+ api_key=api_key,
184
+ path=f"/api/v1/douyin/monitor/creators/{args.creator_id}/enable",
185
+ )
186
+ )
187
+ return
188
+
189
+ if args.command == "disable-creator":
190
+ print_json(
191
+ request_json(
192
+ MODULE_SPEC,
193
+ method="POST",
194
+ base_url=base_url,
195
+ api_key=api_key,
196
+ path=f"/api/v1/douyin/monitor/creators/{args.creator_id}/disable",
197
+ )
198
+ )
199
+ return
200
+
201
+ if args.command == "reset-creator":
202
+ print_json(
203
+ request_json(
204
+ MODULE_SPEC,
205
+ method="POST",
206
+ base_url=base_url,
207
+ api_key=api_key,
208
+ path=f"/api/v1/douyin/monitor/creators/{args.creator_id}/reset",
209
+ )
210
+ )
211
+ return
212
+
213
+ if args.command == "submit":
214
+ print_json(
215
+ request_json(
216
+ MODULE_SPEC,
217
+ method="POST",
218
+ base_url=base_url,
219
+ api_key=api_key,
220
+ path="/api/v1/douyin/monitor/run",
221
+ payload=load_json_file(args.json_file),
222
+ )
223
+ )
224
+ return
225
+
226
+ if args.command == "list-runs":
227
+ query = f"/api/v1/douyin/monitor/runs?page={args.page}&page_size={args.page_size}"
228
+ if args.status:
229
+ query += f"&status={args.status}"
230
+ print_json(
231
+ request_json(MODULE_SPEC, method="GET", base_url=base_url, api_key=api_key, path=query)
232
+ )
233
+ return
234
+
235
+ if args.command == "run-detail":
236
+ print_json(
237
+ request_json(
238
+ MODULE_SPEC,
239
+ method="GET",
240
+ base_url=base_url,
241
+ api_key=api_key,
242
+ path=f"/api/v1/douyin/monitor/runs/{args.run_id}",
243
+ )
244
+ )
245
+ return
246
+
247
+ if args.command == "task":
248
+ print_json(
249
+ request_json(
250
+ MODULE_SPEC,
251
+ method="GET",
252
+ base_url=base_url,
253
+ api_key=api_key,
254
+ path=f"/api/v1/tasks/{args.task_id}",
255
+ )
256
+ )
257
+ return
258
+
259
+ if args.command == "results":
260
+ print_json(
261
+ request_json(
262
+ MODULE_SPEC,
263
+ method="GET",
264
+ base_url=base_url,
265
+ api_key=api_key,
266
+ path=f"/api/v1/tasks/{args.task_id}/results",
267
+ )
268
+ )
269
+ return
270
+
271
+
272
+ if __name__ == "__main__":
273
+ main()
@@ -0,0 +1,146 @@
1
+ ---
2
+ name: douyin-topic-discovery-9000AI
3
+ description: 当用户要获取抖音热点榜、按关键词搜索抖音搜索流,或者把候选结果落到本地 output 文件供后续分析脚本继续消费时使用。这个 skill 只负责抖音选题发现,不负责业务判断。
4
+ triggers:
5
+ - 抖音热点榜
6
+ - 抖音热榜
7
+ - 抖音搜索流
8
+ - 抖音关键词搜索
9
+ - 抖音选题发现
10
+ - /douyin 热榜
11
+ - /douyin 搜索
12
+ - /douyin 选题
13
+ - /douyin-topic-discovery-9000AI
14
+ - /douyin 搜索 9000AI
15
+ role: operator
16
+ scope: execution
17
+ output-format: file-oriented
18
+ ---
19
+
20
+ # 抖音选题发现 Skill
21
+
22
+ 这个 skill 对应一个能力:`douyin_topic_discovery`。
23
+
24
+ ## 先看变量名
25
+
26
+ 不要去别的文档里猜变量名。这个 skill 固定只认中台统一变量:
27
+
28
+ ```text
29
+ 9000AI_BASE_URL
30
+ 9000AI_API_KEY
31
+ ```
32
+
33
+ 请求头里的 key 名固定是:
34
+
35
+ ```text
36
+ X-API-Key
37
+ ```
38
+
39
+ 读取优先级固定是:
40
+
41
+ ```text
42
+ 1. 命令行参数
43
+ 2. 9000AI_BASE_URL / 9000AI_API_KEY
44
+ 3. douyin-topic-discovery-9000AI/local/config.json
45
+ ```
46
+
47
+ 本地配置文件的字段名固定是:
48
+
49
+ ```json
50
+ {
51
+ "base_url": "http://127.0.0.1:8025",
52
+ "api_key": "sk-xxx"
53
+ }
54
+ ```
55
+
56
+ ## 批量选题调研
57
+
58
+ 当用户让你围绕某个主题批量调研、搜索选题素材时,请先阅读工作流文档(参考这个流程,跟用户说按照这个流程是否有问题?):
59
+
60
+ - `douyin-topic-discovery-9000AI/workflow/topic-research.md`
61
+
62
+ 按该文档的阶段逐步执行,不要跳步。
63
+
64
+ ## 当前范围
65
+
66
+ 用于:
67
+ - 获取抖音热点榜
68
+ - 按关键词搜索抖音搜索流
69
+ - 把结果落到 `output/` 目录
70
+ - 让后续脚本按文件继续消费
71
+ - 批量选题调研(按工作流文档执行)
72
+
73
+ 不负责:
74
+ - 自动生成推荐结论
75
+
76
+ ## 工作方式
77
+
78
+ 标准动作是:
79
+ 1. 调热榜或搜索流 API
80
+ 2. 把结果写到 `douyin-topic-discovery-9000AI/output/`
81
+ 3. 对话里只展示摘要和少量关键字段
82
+
83
+ `search` 现在是真异步:
84
+ 1. 先提交 `batch`
85
+ 2. 立即返回 `batch_id`
86
+ 3. 需要结果时,再用 `batch-result` 查询
87
+ 4. 查询到结果后,再落 `latest_search.json/tsv`
88
+
89
+ ## 配置
90
+
91
+ 优先推荐直接配中台统一环境变量:
92
+
93
+ ```powershell
94
+ $env:9000AI_BASE_URL = "http://127.0.0.1:8025"
95
+ $env:9000AI_API_KEY = "sk-xxx"
96
+ ```
97
+
98
+ 或者通过 CLI 写入配置:
99
+
100
+ ```bash
101
+ 9000ai config set --base-url http://127.0.0.1:8025 --api-key <key>
102
+ ```
103
+
104
+ ## 输出目录
105
+
106
+ 固定输出到:
107
+
108
+ ```text
109
+ output/
110
+ ```
111
+
112
+ 常用文件:
113
+ - `latest_hot.json`
114
+ - `latest_hot.tsv`
115
+ - `latest_search.json`
116
+ - `latest_search.tsv`
117
+
118
+ ## 命令
119
+
120
+ 查看帮助:
121
+
122
+ ```bash
123
+ 9000ai search --help
124
+ ```
125
+
126
+ 常用命令:
127
+
128
+ ```bash
129
+ 9000ai config set --base-url http://127.0.0.1:8025 --api-key <key>
130
+ 9000ai auth whoami
131
+ 9000ai auth capabilities
132
+ 9000ai search hot --type society --count 20
133
+ 9000ai search keyword "AI创业" "副业" --sort 0 --time 7 --content-type 1 --filter-duration 0 --min-likes 200 --min-comments 20
134
+ 9000ai search batch-result --batch-id <batch_id>
135
+ 9000ai search list-output
136
+ 9000ai search show-result --input latest_search --row 3
137
+ 9000ai search export-media --input latest_search --row 3
138
+ ```
139
+
140
+ 搜索结果数量规则:
141
+ - `search` 每个关键词默认抓取 `30` 条
142
+ - 后端会基于 `search_general_v3` 自动翻页聚合,不需要额外传分页参数
143
+
144
+ ## 一句话总结
145
+
146
+ 这是一个”热榜 + search_general_v3 搜索流”的抖音选题发现 skill。
@@ -0,0 +1,3 @@
1
+ display_name: douyin-topic-discovery-9000AI
2
+ short_description: 通过 /douyin-topic-discovery-9000AI 获取热点榜和搜索流结果,并落到本地 output 文件
3
+ default_prompt: 帮我通过 /douyin-topic-discovery-9000AI 查抖音热点榜或搜索流,把结果落到 output 文件里,再给我一个简短摘要。