autocrew 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.
- package/HAMLETDEER.md +562 -0
- package/LICENSE +21 -0
- package/README.md +190 -0
- package/README_CN.md +190 -0
- package/adapters/openclaw/index.ts +68 -0
- package/bin/autocrew.mjs +23 -0
- package/bin/autocrew.ts +13 -0
- package/openclaw.plugin.json +36 -0
- package/package.json +74 -0
- package/skills/_writing-style/SKILL.md +68 -0
- package/skills/audience-profiler/SKILL.md +241 -0
- package/skills/content-attribution/SKILL.md +128 -0
- package/skills/content-review/SKILL.md +257 -0
- package/skills/cover-generator/SKILL.md +93 -0
- package/skills/humanizer-zh/SKILL.md +75 -0
- package/skills/intel-digest/SKILL.md +57 -0
- package/skills/intel-pull/SKILL.md +74 -0
- package/skills/manage-pipeline/SKILL.md +63 -0
- package/skills/memory-distill/SKILL.md +89 -0
- package/skills/onboarding/SKILL.md +117 -0
- package/skills/pipeline-status/SKILL.md +51 -0
- package/skills/platform-rewrite/SKILL.md +125 -0
- package/skills/pre-publish/SKILL.md +142 -0
- package/skills/publish-content/SKILL.md +500 -0
- package/skills/remix-content/SKILL.md +77 -0
- package/skills/research/SKILL.md +127 -0
- package/skills/setup/SKILL.md +353 -0
- package/skills/spawn-batch-writer/SKILL.md +66 -0
- package/skills/spawn-planner/SKILL.md +72 -0
- package/skills/spawn-writer/SKILL.md +60 -0
- package/skills/teardown/SKILL.md +144 -0
- package/skills/title-craft/SKILL.md +234 -0
- package/skills/topic-ideas/SKILL.md +105 -0
- package/skills/video-timeline/SKILL.md +117 -0
- package/skills/write-script/SKILL.md +232 -0
- package/skills/xhs-cover-review/SKILL.md +48 -0
- package/src/adapters/browser/browser-cdp.ts +260 -0
- package/src/adapters/browser/browser-relay.ts +236 -0
- package/src/adapters/browser/gateway-client.ts +148 -0
- package/src/adapters/browser/types.ts +36 -0
- package/src/adapters/image/gemini.ts +219 -0
- package/src/adapters/research/tikhub.ts +19 -0
- package/src/cli/banner.ts +18 -0
- package/src/cli/bootstrap.ts +33 -0
- package/src/cli/commands/adapt.ts +28 -0
- package/src/cli/commands/advance.ts +28 -0
- package/src/cli/commands/assets.ts +24 -0
- package/src/cli/commands/audit.ts +18 -0
- package/src/cli/commands/contents.ts +18 -0
- package/src/cli/commands/cover.ts +58 -0
- package/src/cli/commands/events.ts +17 -0
- package/src/cli/commands/humanize.ts +27 -0
- package/src/cli/commands/index.ts +80 -0
- package/src/cli/commands/init.ts +28 -0
- package/src/cli/commands/intel.ts +55 -0
- package/src/cli/commands/learn.ts +34 -0
- package/src/cli/commands/memory.ts +18 -0
- package/src/cli/commands/migrate.ts +24 -0
- package/src/cli/commands/open.ts +21 -0
- package/src/cli/commands/pipelines.ts +18 -0
- package/src/cli/commands/pre-publish.ts +27 -0
- package/src/cli/commands/profile.ts +31 -0
- package/src/cli/commands/research.ts +36 -0
- package/src/cli/commands/restore.ts +28 -0
- package/src/cli/commands/review.ts +61 -0
- package/src/cli/commands/start.ts +28 -0
- package/src/cli/commands/status.ts +14 -0
- package/src/cli/commands/templates.ts +15 -0
- package/src/cli/commands/topics.ts +18 -0
- package/src/cli/commands/trash.ts +28 -0
- package/src/cli/commands/upgrade.ts +48 -0
- package/src/cli/commands/versions.ts +24 -0
- package/src/cli/index.ts +40 -0
- package/src/data/sensitive-words-builtin.json +114 -0
- package/src/data/source-presets.yaml +54 -0
- package/src/e2e.test.ts +596 -0
- package/src/modules/auth/cookie-manager.ts +113 -0
- package/src/modules/cards/template-engine.ts +74 -0
- package/src/modules/cards/templates/comparison-table.ts +71 -0
- package/src/modules/cards/templates/data-chart.ts +76 -0
- package/src/modules/cards/templates/flow-chart.ts +49 -0
- package/src/modules/cards/templates/key-points.ts +59 -0
- package/src/modules/cover/prompt-builder.test.ts +157 -0
- package/src/modules/cover/prompt-builder.ts +212 -0
- package/src/modules/cover/ratio-adapter.test.ts +122 -0
- package/src/modules/cover/ratio-adapter.ts +104 -0
- package/src/modules/filter/sensitive-words.test.ts +72 -0
- package/src/modules/filter/sensitive-words.ts +212 -0
- package/src/modules/humanizer/zh.test.ts +75 -0
- package/src/modules/humanizer/zh.ts +175 -0
- package/src/modules/intel/collector.ts +19 -0
- package/src/modules/intel/collectors/competitor.test.ts +71 -0
- package/src/modules/intel/collectors/competitor.ts +65 -0
- package/src/modules/intel/collectors/rss.test.ts +56 -0
- package/src/modules/intel/collectors/rss.ts +70 -0
- package/src/modules/intel/collectors/trends.test.ts +80 -0
- package/src/modules/intel/collectors/trends.ts +107 -0
- package/src/modules/intel/collectors/web-search.test.ts +85 -0
- package/src/modules/intel/collectors/web-search.ts +81 -0
- package/src/modules/intel/integration.test.ts +203 -0
- package/src/modules/intel/intel-engine.test.ts +103 -0
- package/src/modules/intel/intel-engine.ts +96 -0
- package/src/modules/intel/source-config.test.ts +113 -0
- package/src/modules/intel/source-config.ts +131 -0
- package/src/modules/learnings/diff-tracker.test.ts +144 -0
- package/src/modules/learnings/diff-tracker.ts +189 -0
- package/src/modules/learnings/rule-distiller.ts +141 -0
- package/src/modules/memory/distill.ts +208 -0
- package/src/modules/migrate/legacy-migrate.test.ts +169 -0
- package/src/modules/migrate/legacy-migrate.ts +229 -0
- package/src/modules/pro/api-client.ts +192 -0
- package/src/modules/pro/gate.test.ts +110 -0
- package/src/modules/pro/gate.ts +104 -0
- package/src/modules/profile/creator-profile.test.ts +178 -0
- package/src/modules/profile/creator-profile.ts +248 -0
- package/src/modules/publish/douyin-api.ts +34 -0
- package/src/modules/publish/wechat-mp.ts +320 -0
- package/src/modules/publish/xiaohongshu-api.ts +127 -0
- package/src/modules/research/free-engine.ts +360 -0
- package/src/modules/timeline/markup-generator.ts +63 -0
- package/src/modules/timeline/parser.ts +275 -0
- package/src/modules/workflow/templates.ts +124 -0
- package/src/modules/writing/platform-rewrite.ts +190 -0
- package/src/modules/writing/title-hashtag.ts +385 -0
- package/src/runtime/context.test.ts +97 -0
- package/src/runtime/context.ts +129 -0
- package/src/runtime/events.test.ts +83 -0
- package/src/runtime/events.ts +104 -0
- package/src/runtime/hooks.ts +174 -0
- package/src/runtime/tool-runner.test.ts +204 -0
- package/src/runtime/tool-runner.ts +282 -0
- package/src/runtime/workflow-engine.test.ts +455 -0
- package/src/runtime/workflow-engine.ts +391 -0
- package/src/server/index.ts +409 -0
- package/src/server/start.ts +39 -0
- package/src/storage/local-store.test.ts +304 -0
- package/src/storage/local-store.ts +704 -0
- package/src/storage/pipeline-store.test.ts +363 -0
- package/src/storage/pipeline-store.ts +698 -0
- package/src/tools/asset.ts +96 -0
- package/src/tools/content-save.ts +276 -0
- package/src/tools/cover-review.ts +221 -0
- package/src/tools/humanize.ts +54 -0
- package/src/tools/init.ts +133 -0
- package/src/tools/intel.ts +92 -0
- package/src/tools/memory.ts +76 -0
- package/src/tools/pipeline-ops.ts +109 -0
- package/src/tools/pipeline.ts +168 -0
- package/src/tools/pre-publish.ts +232 -0
- package/src/tools/publish.ts +183 -0
- package/src/tools/registry.ts +198 -0
- package/src/tools/research.ts +304 -0
- package/src/tools/review.ts +305 -0
- package/src/tools/rewrite.ts +165 -0
- package/src/tools/status.ts +30 -0
- package/src/tools/timeline.ts +234 -0
- package/src/tools/topic-create.ts +50 -0
- package/src/types/providers.ts +69 -0
- package/src/types/timeline.test.ts +147 -0
- package/src/types/timeline.ts +83 -0
- package/src/utils/retry.test.ts +97 -0
- package/src/utils/retry.ts +85 -0
- package/templates/AGENTS.md +99 -0
- package/templates/SOUL.md +31 -0
- package/templates/TOOLS.md +76 -0
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: audience-profiler
|
|
3
|
+
description: |
|
|
4
|
+
深度受众分析。基于马斯洛需求层次,拆解受众的痛点、痒点、爽点。
|
|
5
|
+
Trigger: 受众分析, 用户画像, audience profile
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# /audience-profiler — 深度受众分析
|
|
9
|
+
|
|
10
|
+
> 独立的受众深度分析技能。基于马斯洛需求层次模型,系统拆解受众的痛点、痒点、爽点。
|
|
11
|
+
> 产出可直接用于选题的洞察,不是笼统的人口统计报告。
|
|
12
|
+
|
|
13
|
+
## 第一步:加载上下文
|
|
14
|
+
|
|
15
|
+
静默读取 `~/.autocrew/creator-profile.json`,提取:
|
|
16
|
+
- `industry` — 行业/领域
|
|
17
|
+
- `platforms` — 发布平台
|
|
18
|
+
- `audiencePersona` — 已有受众信息(core / adjacent / surprise)
|
|
19
|
+
- `contentGoals` — 内容目标
|
|
20
|
+
|
|
21
|
+
**如果没有受众信息**(`audiencePersona` 不存在或为空):
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
我需要先了解你的受众。
|
|
25
|
+
|
|
26
|
+
描述一个你最想影响的人——
|
|
27
|
+
他/她是干什么的、多大年纪、为什么会关注你的内容?
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
收集到基本信息后继续。
|
|
31
|
+
|
|
32
|
+
---
|
|
33
|
+
|
|
34
|
+
## 第二步:痛点分析(Pain Points — 未被说出的挫败感)
|
|
35
|
+
|
|
36
|
+
> 痛点不是抽象的"焦虑"或"困惑",是具体场景下的具体挫败。
|
|
37
|
+
|
|
38
|
+
### 拆解方式
|
|
39
|
+
|
|
40
|
+
把痛点拆到**二级场景**,不要停在一级分类:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
❌ 一级(太抽象):
|
|
44
|
+
"职场焦虑"
|
|
45
|
+
|
|
46
|
+
✅ 二级(具体场景):
|
|
47
|
+
"周一早上打开电脑,看到 37 封未读邮件,不知道先回哪封,
|
|
48
|
+
然后被老板 @了一条'这个方案什么时候出'——
|
|
49
|
+
那种又焦虑又愧疚的感觉。"
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### 输出格式
|
|
53
|
+
|
|
54
|
+
每个痛点:
|
|
55
|
+
|
|
56
|
+
| 字段 | 说明 |
|
|
57
|
+
|------|------|
|
|
58
|
+
| **场景** | 具体发生在什么时候、什么地方、正在干什么 |
|
|
59
|
+
| **情绪内核** | 这个场景下最深层的情绪是什么(焦虑?愧疚?无力?嫉妒?) |
|
|
60
|
+
| **内容机会** | 什么类型的内容能触及这个痛点(标题方向 + 内容角度) |
|
|
61
|
+
|
|
62
|
+
产出 **3-5 个痛点场景**。
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 第三步:痒点分析(Itch Points — 身份转变渴望)
|
|
67
|
+
|
|
68
|
+
> 痒点是"我想成为那样的人"的渴望。不是需求,是欲望。
|
|
69
|
+
|
|
70
|
+
### 拆解方式
|
|
71
|
+
|
|
72
|
+
每个痒点必须包含**金句示例**(受众会截图的那种句子):
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
当前身份:"每天加班到 9 点的打工人"
|
|
76
|
+
渴望身份:"可以自由安排时间、靠副业活得体面的人"
|
|
77
|
+
触发内容:看到别人说"我辞职第三个月,收入反而涨了"的那一刻
|
|
78
|
+
金句示例:"不是你不够努力,是你把努力用在了别人的梦想上。"
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### 输出格式
|
|
82
|
+
|
|
83
|
+
每个痒点:
|
|
84
|
+
|
|
85
|
+
| 字段 | 说明 |
|
|
86
|
+
|------|------|
|
|
87
|
+
| **当前身份** | TA 现在觉得自己是什么样的人 |
|
|
88
|
+
| **渴望身份** | TA 想变成什么样的人 |
|
|
89
|
+
| **触发内容** | 什么类型的内容会激活这种渴望 |
|
|
90
|
+
| **金句示例** | 一句 TA 会截图/收藏的话(punch-line) |
|
|
91
|
+
|
|
92
|
+
产出 **3-4 个痒点**。
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 第四步:爽点分析(Delight Points — 3 种类型)
|
|
97
|
+
|
|
98
|
+
> 爽点让受众看完内容后有"爽了"的感觉。分 3 种类型:
|
|
99
|
+
|
|
100
|
+
### 4.1 确认型(Validation)
|
|
101
|
+
|
|
102
|
+
> 验证受众已经相信的东西,让他们觉得"我早就这么想了"。
|
|
103
|
+
|
|
104
|
+
```
|
|
105
|
+
例:受众本来就觉得"读书没用"→ 你的内容说"真正有用的知识从来不在书里"
|
|
106
|
+
→ 受众爽感:"终于有人说了大实话"
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
内容机会:帮受众表达他们想说但说不好的观点。
|
|
110
|
+
|
|
111
|
+
### 4.2 优越型(Superiority)
|
|
112
|
+
|
|
113
|
+
> 让受众觉得自己比同龄人/同事/同圈层的人更早知道、更会判断。
|
|
114
|
+
|
|
115
|
+
```
|
|
116
|
+
例:你分享一个别人还没注意到的趋势
|
|
117
|
+
→ 受众转发时的心态:"看,我的信息源比你们高级"
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
内容机会:独家信息、提前预判、内行视角。
|
|
121
|
+
|
|
122
|
+
### 4.3 解放型(Liberation)
|
|
123
|
+
|
|
124
|
+
> 给受众"许可"——允许他们停止做某件他们本来就不想做的事。
|
|
125
|
+
|
|
126
|
+
```
|
|
127
|
+
例:"不用每天 6 点起床才叫自律"
|
|
128
|
+
→ 受众爽感:"终于不用逼自己了"
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
内容机会:打破虚假共识、拆解伪常识。
|
|
132
|
+
|
|
133
|
+
### 输出格式
|
|
134
|
+
|
|
135
|
+
每种类型产出 **1-2 个具体的爽点**,包含:
|
|
136
|
+
- 场景描述
|
|
137
|
+
- 受众的爽感反应
|
|
138
|
+
- 对应的内容方向
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## 第五步:马斯洛五层矩阵
|
|
143
|
+
|
|
144
|
+
> 将受众放到马斯洛需求层次上,找到每一层的内容切入角度。
|
|
145
|
+
|
|
146
|
+
### 矩阵格式
|
|
147
|
+
|
|
148
|
+
| 层次 | 受众在这一层的状态 | 内容角度 | 标题示例 |
|
|
149
|
+
|------|-------------------|---------|---------|
|
|
150
|
+
| **生存 (Survival)** | 最基本的经济/生活压力 | [切入点] | [标题] |
|
|
151
|
+
| **安全 (Safety)** | 对未来的不确定感 | [切入点] | [标题] |
|
|
152
|
+
| **归属 (Belonging)** | 想找到同频的人/圈子 | [切入点] | [标题] |
|
|
153
|
+
| **尊重 (Esteem)** | 想被认可、被看见 | [切入点] | [标题] |
|
|
154
|
+
| **自我实现 (Self-actualization)** | 更深层的意义追寻 | [切入点] | [标题] |
|
|
155
|
+
|
|
156
|
+
**注意**:
|
|
157
|
+
- 不是每个受众在每一层都有强需求,标注哪几层是最强的
|
|
158
|
+
- 标题示例必须用受众的语言,不能用学术语言
|
|
159
|
+
- 每个标题通过 scroll-stop 测试:受众刷到这个标题会停下来吗?
|
|
160
|
+
|
|
161
|
+
---
|
|
162
|
+
|
|
163
|
+
## 第六步:产出 3 个选题
|
|
164
|
+
|
|
165
|
+
> 目标:分析不是终点,选题才是。
|
|
166
|
+
|
|
167
|
+
从不同的马斯洛层次中各选一个,产出 3 个选题:
|
|
168
|
+
|
|
169
|
+
每个选题包含:
|
|
170
|
+
|
|
171
|
+
| 字段 | 说明 |
|
|
172
|
+
|------|------|
|
|
173
|
+
| **标题** | ≤20 字,scroll-stop 测试通过 |
|
|
174
|
+
| **Hook** | 开头 3 秒怎么抓人 |
|
|
175
|
+
| **命中的痛点/痒点/爽点** | 关联到上面分析的哪个具体点 |
|
|
176
|
+
| **对应马斯洛层次** | 这个选题满足哪一层需求 |
|
|
177
|
+
| **为什么 works** | 一句话说明这个选题的杀伤力来源 |
|
|
178
|
+
|
|
179
|
+
调用 `autocrew_topic create` 保存每个选题:
|
|
180
|
+
```json
|
|
181
|
+
{
|
|
182
|
+
"action": "create",
|
|
183
|
+
"title": "...",
|
|
184
|
+
"description": "hook + 命中的痛痒爽点 + 为什么 works",
|
|
185
|
+
"tags": ["audience-profiler", "maslow-level"],
|
|
186
|
+
"source": "audience_analysis"
|
|
187
|
+
}
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## 第七步:写入 creator-profile.json
|
|
193
|
+
|
|
194
|
+
更新 `audiencePersona` 字段,加入深度分析数据:
|
|
195
|
+
|
|
196
|
+
```json
|
|
197
|
+
{
|
|
198
|
+
"audiencePersona": {
|
|
199
|
+
"core": { "...existing..." },
|
|
200
|
+
"adjacent": { "...existing..." },
|
|
201
|
+
"surprise": { "...existing..." },
|
|
202
|
+
"deepAnalysis": {
|
|
203
|
+
"painPoints": [
|
|
204
|
+
{ "scenario": "...", "emotionalCore": "...", "contentOpportunity": "..." }
|
|
205
|
+
],
|
|
206
|
+
"itchPoints": [
|
|
207
|
+
{ "currentIdentity": "...", "desiredIdentity": "...", "triggerContent": "...", "punchLine": "..." }
|
|
208
|
+
],
|
|
209
|
+
"delightPoints": {
|
|
210
|
+
"validation": ["..."],
|
|
211
|
+
"superiority": ["..."],
|
|
212
|
+
"liberation": ["..."]
|
|
213
|
+
},
|
|
214
|
+
"maslowStrengths": ["belonging", "esteem"],
|
|
215
|
+
"analysisDate": "ISO date"
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## 输出语言
|
|
224
|
+
|
|
225
|
+
所有分析内容、标题示例、金句示例均使用中文。
|
|
226
|
+
术语可以保留英文(如 Maslow、scroll-stop),但描述和示例必须是受众的语言。
|
|
227
|
+
|
|
228
|
+
## 工具依赖
|
|
229
|
+
|
|
230
|
+
- `autocrew_topic` — 保存选题到选题库(`create` action)
|
|
231
|
+
- 文件系统读写 — 读取和更新 `creator-profile.json`
|
|
232
|
+
|
|
233
|
+
## 关联技能
|
|
234
|
+
|
|
235
|
+
- **setup** — `/setup` 的 Phase 0.5 做基础受众画像,本技能做深度分析
|
|
236
|
+
- **topic-ideas** — 本技能产出的选题存入同一个选题库
|
|
237
|
+
- **write-script** — 写作时可以引用痛痒爽点来强化共鸣
|
|
238
|
+
|
|
239
|
+
## Changelog
|
|
240
|
+
|
|
241
|
+
- 2026-04-02: v1 — 创建深度受众分析技能。基于马斯洛需求层次 + 痛点/痒点/爽点三维分析框架。
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: content-attribution
|
|
3
|
+
description: |
|
|
4
|
+
内容归因分析 — 对已发布内容的表现数据进行归因,提炼学习,反哺创作。当平台数据回收后自动触发,或用户手动要求分析。
|
|
5
|
+
trigger: 当用户说"分析数据"、"这条内容表现怎么样"、"归因"、"复盘"时触发
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Content Attribution(内容归因)
|
|
9
|
+
|
|
10
|
+
> 内容飞轮的核心环节:数据 → 归因 → 学习 → 下一条更好。
|
|
11
|
+
|
|
12
|
+
## 触发方式
|
|
13
|
+
|
|
14
|
+
1. Chrome Relay 回收平台数据后自动建议执行(待实现)
|
|
15
|
+
2. 用户手动提供数据并要求分析
|
|
16
|
+
3. 用户说 "复盘" / "这条效果怎么样"
|
|
17
|
+
|
|
18
|
+
## 归因流程
|
|
19
|
+
|
|
20
|
+
### Step 1: 加载内容和数据
|
|
21
|
+
|
|
22
|
+
1. 获取内容详情:`autocrew_content action=get id={content_id}`
|
|
23
|
+
2. 获取 performance_data(如果已录入)
|
|
24
|
+
3. 加载内容的 hypothesis 和 experimentType
|
|
25
|
+
|
|
26
|
+
### Step 2: 表现评级
|
|
27
|
+
|
|
28
|
+
根据平台基准和历史数据(如果有):
|
|
29
|
+
|
|
30
|
+
| 评级 | 条件 |
|
|
31
|
+
|------|------|
|
|
32
|
+
| 🔥 爆款 (viral) | 数据显著超出历史均值 2x+ |
|
|
33
|
+
| ✅ 达标 (on_target) | 数据在历史均值 0.8x-2x 范围 |
|
|
34
|
+
| ⚠️ 低于预期 (below_expectation) | 数据低于历史均值 0.8x |
|
|
35
|
+
|
|
36
|
+
如果没有历史数据,让用户自评或提供平台同类内容基准。
|
|
37
|
+
|
|
38
|
+
### Step 3: 核心归因
|
|
39
|
+
|
|
40
|
+
分析内容本身 + 数据表现,给出单一核心归因(不要给多个原因,强制选最重要的一个):
|
|
41
|
+
|
|
42
|
+
| 归因 | 判断依据 |
|
|
43
|
+
|------|---------|
|
|
44
|
+
| strong_title | 标题点击率高,但完播率/阅读率一般 |
|
|
45
|
+
| good_hook | 前3秒/前段留存高 |
|
|
46
|
+
| right_topic | 选题命中了当前热点或受众痛点 |
|
|
47
|
+
| timing | 发布时间恰好命中流量高峰 |
|
|
48
|
+
| luck | 以上都不突出,可能被算法随机推荐 |
|
|
49
|
+
|
|
50
|
+
### Step 4: 验证假设
|
|
51
|
+
|
|
52
|
+
对比内容的 `hypothesis` 和实际数据:
|
|
53
|
+
|
|
54
|
+
- **confirmed**: 数据支持假设
|
|
55
|
+
- **rejected**: 数据否定假设
|
|
56
|
+
- **inconclusive**: 数据不足以判断
|
|
57
|
+
|
|
58
|
+
### Step 5: 提炼一句话学习
|
|
59
|
+
|
|
60
|
+
格式:"{具体发现},在{平台}上对{人群}有效/无效"
|
|
61
|
+
|
|
62
|
+
例如:
|
|
63
|
+
- "反常识标题在小红书上完播率+40%,对王总人群有效"
|
|
64
|
+
- "纯方法论内容在抖音上完播率低,需要加故事包装"
|
|
65
|
+
|
|
66
|
+
### Step 6: 保存归因
|
|
67
|
+
|
|
68
|
+
更新内容的 meta:
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"action": "update",
|
|
73
|
+
"id": "{content_id}",
|
|
74
|
+
"performance_data": { "views": 0, "likes": 0 }
|
|
75
|
+
}
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
归因结果存入 pipeline meta.yaml 的 `performanceLearnings[]`。
|
|
79
|
+
|
|
80
|
+
### Step 7: 检查学习沉淀阈值
|
|
81
|
+
|
|
82
|
+
如果 `performanceLearnings` 已积累 5+ 条:
|
|
83
|
+
1. 扫描所有 learnings,寻找重复出现的 pattern
|
|
84
|
+
2. 发现 pattern 后提示用户确认
|
|
85
|
+
3. 确认后写入 `creator-profile.json` 的 `writingRules[]`:
|
|
86
|
+
```json
|
|
87
|
+
{
|
|
88
|
+
"rule": "{提炼的规则}",
|
|
89
|
+
"source": "auto_distilled",
|
|
90
|
+
"confidence": 0.8,
|
|
91
|
+
"createdAt": "{ISO timestamp}"
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## 输出格式
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
## 📊 内容归因报告
|
|
99
|
+
|
|
100
|
+
**内容:** {title} ({content_id})
|
|
101
|
+
**平台:** {platform}
|
|
102
|
+
**发布时间:** {published_at}
|
|
103
|
+
|
|
104
|
+
### 数据概览
|
|
105
|
+
| 指标 | 数值 | vs 均值 |
|
|
106
|
+
|------|------|---------|
|
|
107
|
+
| 播放量 | {N} | {+/-}% |
|
|
108
|
+
| 完播率 | {N}% | {+/-}% |
|
|
109
|
+
| 点赞 | {N} | {+/-}% |
|
|
110
|
+
| 收藏 | {N} | {+/-}% |
|
|
111
|
+
| 评论 | {N} | {+/-}% |
|
|
112
|
+
|
|
113
|
+
### 表现评级:{🔥/✅/⚠️} {rating}
|
|
114
|
+
|
|
115
|
+
### 核心归因:{attribution}
|
|
116
|
+
{一段解释}
|
|
117
|
+
|
|
118
|
+
### 假设验证
|
|
119
|
+
- 假设:{hypothesis}
|
|
120
|
+
- 结果:{confirmed/rejected/inconclusive}
|
|
121
|
+
- {解释}
|
|
122
|
+
|
|
123
|
+
### 💡 一句话学习
|
|
124
|
+
{learning}
|
|
125
|
+
|
|
126
|
+
### 📝 累计学习 ({N}/5 → 达到阈值自动提炼规则)
|
|
127
|
+
{list of recent learnings}
|
|
128
|
+
```
|
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: content-review
|
|
3
|
+
description: 内容审核 skill — 整合敏感词扫描 + 去 AI 味检查 + 质量评分,输出审核报告并联动状态机
|
|
4
|
+
trigger: 当用户说"审核"、"review"、"检查内容"、"内容审核"时触发
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Content Review Skill
|
|
8
|
+
|
|
9
|
+
对内容执行完整审核流程,输出审核报告 + 一键修复建议。
|
|
10
|
+
|
|
11
|
+
## 触发条件
|
|
12
|
+
|
|
13
|
+
- 用户说"审核"、"review"、"检查内容"、"内容审核"
|
|
14
|
+
- 内容状态流转到 `draft_ready` 时自动建议执行
|
|
15
|
+
- 用户手动指定 content ID 要求审核
|
|
16
|
+
|
|
17
|
+
## 审核流程
|
|
18
|
+
|
|
19
|
+
**前置加载:** 审核前先加载 `HAMLETDEER.md` 中的 Clock Audit Checklist 和质量标准。
|
|
20
|
+
|
|
21
|
+
按以下顺序执行 6 项检查,每项独立评分:
|
|
22
|
+
|
|
23
|
+
### Step 0: 时钟节奏审核(视频内容)
|
|
24
|
+
|
|
25
|
+
如果审核的是视频脚本,执行 HAMLETDEER.md 中的 **Clock Audit Checklist**:
|
|
26
|
+
|
|
27
|
+
- [ ] 12:00 (Hook) — 前 3 秒能停住滑动吗?
|
|
28
|
+
- [ ] 3:00 (Escalation) — 能量是在上升还是在消退?
|
|
29
|
+
- [ ] 6:00 (Payload/Pivot) — 核心价值有没有在这里交付?
|
|
30
|
+
- [ ] 9:00 (Climax/Push) — 这是不是最强的一刻?能驱动收藏/分享/关注吗?
|
|
31
|
+
- [ ] 没有死区 — 是否存在连续 15 秒没有新信息、没有能量变化的段落?
|
|
32
|
+
- [ ] HKRR 对齐 — 短视频是否只选了一个 HKRR 元素?长视频是否四个元素都有体现?
|
|
33
|
+
- [ ] 微操技巧 — 是否在时钟位之间使用了至少 2 种微观留人技巧(开放循环/信息缺口/视觉锚点/断裂感)?
|
|
34
|
+
|
|
35
|
+
**评分规则:**
|
|
36
|
+
- 6/6 通过 → ✅ 节奏合格
|
|
37
|
+
- 4-5/6 通过 → ⚠️ 建议优化(标注具体时钟位)
|
|
38
|
+
- ≤3/6 通过 → ❌ 脚本需要重写
|
|
39
|
+
|
|
40
|
+
### Step 1: 敏感词扫描
|
|
41
|
+
|
|
42
|
+
调用 `autocrew_content` tool:
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
action: "review_scan" (如果已实现)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
或直接使用敏感词模块逻辑:
|
|
49
|
+
|
|
50
|
+
1. 读取内容的 `body` 字段
|
|
51
|
+
2. 扫描内置敏感词库(政治、暴力、色情、医疗宣称、金融宣称)
|
|
52
|
+
3. 扫描平台特定限流词(根据 content 的 `platform` 字段)
|
|
53
|
+
4. 扫描用户自定义词库 `~/.autocrew/sensitive-words/custom.txt`
|
|
54
|
+
5. 输出命中词列表 + 建议替换
|
|
55
|
+
|
|
56
|
+
**评分规则:**
|
|
57
|
+
- 0 个命中 → ✅ 通过
|
|
58
|
+
- 仅平台限流词 → ⚠️ 建议修改(不阻断)
|
|
59
|
+
- 政治/暴力/色情命中 → ❌ 必须修改
|
|
60
|
+
|
|
61
|
+
### Step 2: 平台合规检查
|
|
62
|
+
|
|
63
|
+
根据 `platform` 字段检查平台特有规则:
|
|
64
|
+
|
|
65
|
+
**小红书:**
|
|
66
|
+
- 标题是否含 emoji(推荐)
|
|
67
|
+
- 正文是否超过 1000 字(建议精简)
|
|
68
|
+
- 是否包含引流词(私信、加微信等)
|
|
69
|
+
|
|
70
|
+
**抖音:**
|
|
71
|
+
- 文案是否超过 300 字
|
|
72
|
+
- 是否包含竞品品牌名
|
|
73
|
+
|
|
74
|
+
**微信公众号:**
|
|
75
|
+
- 是否包含诱导分享/关注词汇
|
|
76
|
+
- 标题是否超过 64 字符
|
|
77
|
+
|
|
78
|
+
### Step 3: 去 AI 味检查
|
|
79
|
+
|
|
80
|
+
调用 `humanizeZh()` 函数对内容做一次检测(dry-run 模式):
|
|
81
|
+
|
|
82
|
+
1. 统计 AI 味指标:
|
|
83
|
+
- 套话词频(值得一提、综上所述、赋能、闭环等)
|
|
84
|
+
- 顺序词频(首先/其次/最后)
|
|
85
|
+
- "我们"开头句子占比
|
|
86
|
+
- 平均句长(中文字符数)
|
|
87
|
+
2. 输出 AI 味评分(0-100,越低越好)
|
|
88
|
+
|
|
89
|
+
**评分规则:**
|
|
90
|
+
- 0-20 → ✅ 自然
|
|
91
|
+
- 21-50 → ⚠️ 有轻微 AI 痕迹,建议润色
|
|
92
|
+
- 51+ → ❌ AI 味明显,建议用 humanizer-zh 处理
|
|
93
|
+
|
|
94
|
+
### Step 4: 质量评分
|
|
95
|
+
|
|
96
|
+
评估内容质量的 4 个维度:
|
|
97
|
+
|
|
98
|
+
1. **信息密度**(0-25 分)
|
|
99
|
+
- 每段是否有具体数据/案例/观点
|
|
100
|
+
- 是否有空泛的废话段落
|
|
101
|
+
|
|
102
|
+
2. **Hook 强度**(0-25 分)
|
|
103
|
+
- 开头第一句是否有吸引力
|
|
104
|
+
- 是否在前 3 行建立了阅读动机
|
|
105
|
+
|
|
106
|
+
3. **CTA 清晰度**(0-25 分)
|
|
107
|
+
- 结尾是否有明确的行动号召
|
|
108
|
+
- CTA 是否与内容主题一致
|
|
109
|
+
|
|
110
|
+
4. **可读性**(0-25 分)
|
|
111
|
+
- 段落长度是否适中
|
|
112
|
+
- 是否有适当的分段和留白
|
|
113
|
+
- 是否使用了 emoji/符号辅助阅读(平台相关)
|
|
114
|
+
|
|
115
|
+
**总分 = 4 项之和(0-100)**
|
|
116
|
+
|
|
117
|
+
### Step 4.5: 标题公式检查
|
|
118
|
+
|
|
119
|
+
检查标题是否命中至少一个标题公式:
|
|
120
|
+
|
|
121
|
+
| 公式 | 模式 |
|
|
122
|
+
|------|------|
|
|
123
|
+
| 数字+结果 | 包含具体数字+结果描述 |
|
|
124
|
+
| 反常识 | 反直觉/反常识声明 |
|
|
125
|
+
| 身份+痛点 | 身份标签+痛点描述 |
|
|
126
|
+
| 悬念缺口 | 未完结/省略号/悬念 |
|
|
127
|
+
| 对比结构 | A vs B 对比 |
|
|
128
|
+
| 共鸣提问 | "为什么…" 式提问 |
|
|
129
|
+
|
|
130
|
+
**评分规则:**
|
|
131
|
+
- 命中 1+ 个公式 → ✅ 标题公式合格
|
|
132
|
+
- 未命中任何公式 → ⚠️ 建议优化标题
|
|
133
|
+
|
|
134
|
+
### Step 4.6: 评论触发点检查
|
|
135
|
+
|
|
136
|
+
检查内容是否包含至少 1 个评论触发点:
|
|
137
|
+
|
|
138
|
+
- 争议埋点(故意留一个可讨论的观点)
|
|
139
|
+
- 未答问题(提出但不完全解答,引导评论区补充)
|
|
140
|
+
- 金句钩子(一句值得截图/转发的话)
|
|
141
|
+
|
|
142
|
+
**评分规则:**
|
|
143
|
+
- 有 1+ 个触发点 → ✅ 通过
|
|
144
|
+
- 无触发点 → ⚠️ 建议添加,评论量直接影响算法推荐
|
|
145
|
+
|
|
146
|
+
### Step 4.7: 完播率微操检查
|
|
147
|
+
|
|
148
|
+
检查是否使用了至少 2 种微观留人技巧:
|
|
149
|
+
|
|
150
|
+
- 开放循环(Open Loop)— 前面抛问题,延迟回答
|
|
151
|
+
- 信息缺口(Curiosity Gap)— 段落结尾有前向动力
|
|
152
|
+
- 视觉锚点(Visual Anchor)— 段间高密度独立金句
|
|
153
|
+
- 断裂感(Rhythm Break)— 长段落中突然超短句
|
|
154
|
+
|
|
155
|
+
**评分规则:**
|
|
156
|
+
- 使用 2+ 种 → ✅ 微操合格
|
|
157
|
+
- 使用 1 种 → ⚠️ 建议增加留人手段
|
|
158
|
+
- 未使用 → ❌ 缺乏微观留人技巧
|
|
159
|
+
|
|
160
|
+
### Step 4.8: 流量假设检查
|
|
161
|
+
|
|
162
|
+
检查内容是否有流量假设:
|
|
163
|
+
|
|
164
|
+
- `hypothesis` 字段存在且非空 → ✅ 通过
|
|
165
|
+
- `hypothesis` 缺失 → ⚠️ 建议补充,无假设无法形成数据闭环
|
|
166
|
+
|
|
167
|
+
### Step 4.9: 内容支柱对齐检查
|
|
168
|
+
|
|
169
|
+
如果 creator-profile.json 配置了 `contentPillars`:
|
|
170
|
+
|
|
171
|
+
1. 检查这条内容是否标注了所属支柱
|
|
172
|
+
2. 检查最近 10 条内容的支柱分布是否偏离目标 `contentRatio`
|
|
173
|
+
- 偏离 <15% → ✅ 分布健康
|
|
174
|
+
- 偏离 15-30% → ⚠️ 建议调整下一条内容方向
|
|
175
|
+
- 偏离 >30% → ❌ 内容方向严重偏离定位
|
|
176
|
+
|
|
177
|
+
未配置 contentPillars 时跳过此步骤。
|
|
178
|
+
|
|
179
|
+
### Step 5: 输出审核报告
|
|
180
|
+
|
|
181
|
+
格式:
|
|
182
|
+
|
|
183
|
+
```markdown
|
|
184
|
+
## 📋 内容审核报告
|
|
185
|
+
|
|
186
|
+
**内容:** {title} ({content_id})
|
|
187
|
+
**平台:** {platform}
|
|
188
|
+
**审核时间:** {timestamp}
|
|
189
|
+
|
|
190
|
+
### 1. 敏感词扫描 {✅/⚠️/❌}
|
|
191
|
+
{详细结果}
|
|
192
|
+
|
|
193
|
+
### 2. 平台合规 {✅/⚠️/❌}
|
|
194
|
+
{详细结果}
|
|
195
|
+
|
|
196
|
+
### 3. AI 味检测 {✅/⚠️/❌}
|
|
197
|
+
AI 味评分:{score}/100
|
|
198
|
+
{详细结果}
|
|
199
|
+
|
|
200
|
+
### 4. 质量评分
|
|
201
|
+
总分:{score}/100
|
|
202
|
+
- 信息密度:{n}/25
|
|
203
|
+
- Hook 强度:{n}/25
|
|
204
|
+
- CTA 清晰度:{n}/25
|
|
205
|
+
- 可读性:{n}/25
|
|
206
|
+
|
|
207
|
+
### 5. 标题公式 {✅/⚠️}
|
|
208
|
+
{详细结果}
|
|
209
|
+
|
|
210
|
+
### 6. 评论触发点 {✅/⚠️}
|
|
211
|
+
{详细结果}
|
|
212
|
+
|
|
213
|
+
### 7. 完播率微操 {✅/⚠️/❌}
|
|
214
|
+
{详细结果}
|
|
215
|
+
|
|
216
|
+
### 8. 流量假设 {✅/⚠️}
|
|
217
|
+
{详细结果}
|
|
218
|
+
|
|
219
|
+
### 9. 内容支柱对齐 {✅/⚠️/❌/跳过}
|
|
220
|
+
{详细结果}
|
|
221
|
+
|
|
222
|
+
### 📌 审核结论
|
|
223
|
+
{APPROVED / NEEDS_REVISION}
|
|
224
|
+
|
|
225
|
+
### 🔧 修复建议
|
|
226
|
+
{如果需要修改,列出具体建议}
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
## 状态机联动
|
|
230
|
+
|
|
231
|
+
审核完成后,根据结果自动建议状态流转:
|
|
232
|
+
|
|
233
|
+
- **全部通过** → 建议 `reviewing → approved`
|
|
234
|
+
```
|
|
235
|
+
autocrew_content action=transition content_id={id} target_status=approved
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
- **需要修改** → 建议 `reviewing → revision`
|
|
239
|
+
```
|
|
240
|
+
autocrew_content action=transition content_id={id} target_status=revision diff_note="审核未通过: {原因摘要}"
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
- 用户确认修改后 → `revision → reviewing`(重新审核)
|
|
244
|
+
|
|
245
|
+
## 与 Learnings 联动
|
|
246
|
+
|
|
247
|
+
每次审核产生的修改建议,如果用户采纳并修改了内容:
|
|
248
|
+
|
|
249
|
+
1. Diff Tracker 自动记录 before/after
|
|
250
|
+
2. Rule Distiller 检查是否达到提炼阈值(5+ 次同类修改)
|
|
251
|
+
3. 达到阈值的模式自动写入 `creator-profile.json` 的 `writingRules`
|
|
252
|
+
|
|
253
|
+
## 注意事项
|
|
254
|
+
|
|
255
|
+
- 审核是建议性的,用户可以 `force` 跳过
|
|
256
|
+
- 敏感词库会持续更新,鼓励用户维护 `custom.txt`
|
|
257
|
+
- 质量评分是 AI 辅助评估,不是绝对标准
|