从全网公开信息 + 抖音一手文案出发,蒸馏某人在指定领域的知识体系、观点与内容风格。
text
- [ ] Phase 0:确认目标(人、主题、深度模式、平台线索)
- [ ] Track A:全网搜索(始终执行)→ memory/[用户名]-全网素材.md
- [ ] Track B:抖音深度(standard/deep 且有抖音号时)→ memory/[用户名]-视频文案合集.md
- [ ] Phase 蒸馏:合并双轨 + 证据分级 → memory/[用户名]-[主题]观点蒸馏.md
- [ ] 输出 gbrain people/[slug]
向用户确认或从上下文推断:
字段说明人物昵称/真名/抖音号/主页 URL主题筛选领域(如:营养、健身、投资)筛选关键词保留含这些词的内容排除关键词剔除(如:切磋、带货、广告、纯娱乐)深度模式quick / standard(默认)/ deep平台线索已知 YouTube/小红书/公众号/课程名(可选)时间范围仅近 N 个月(可选)
模式条件执行quick未要求「全文案/全部视频」Track A → 蒸馏;跳过 Track Bstandard有抖音号或明确要求抖音文案Track A + Track B → 合并蒸馏deep用户说「深度/全面/调研报告」Track A + LDR + Track B(如有抖音)
长任务遵守
skills/planning-with-files: 每 2 次 search/fetch 后 将要点写入memory/[用户名]-全网素材.md。
并行 3–5 次 web_search:
text
"[昵称/真名] [主题] 是谁"
"抖音 [抖音号] 主页"
"[人名] [主题] site:youtube.com OR site:bilibili.com"
"[人名] [课程名/品牌名]"
若只有抖音号、无主页 URL: web_search "抖音 [抖音号] 主页"。
参考 references/search-queries.md,按用户主题选 6–10 条查询执行。每条取 top 3–5 结果,摘录标题、URL、snippet,立即落盘。
对公众号、知乎、访谈、课程介绍等可访问页面用 web_fetch。 不要用 web_fetch 抓抖音视频页(会被拦)。
每条素材记录:
markdown
| 来源 URL | 类型 | 摘要 | 可信度 |
skills/local-deep-research/SKILL.mdLDR_BASE_URL(默认 http://127.0.0.1:5000);不可用则告知用户并仅用 web_search 加深"[人名] [主题] 观点 访谈 课程 争议"scripts/ldr-research.sh start_research --query "..." --mode detailed --language zhget_status / get_result,将报告摘要追加到 全网素材.md,标注 [Source: LDR]用 browser 工具访问用户主页抓取一手文案。 抖音域名已加入 SSRF 白名单( *.douyin.com 等),不再被 navigation blocked by policy 拦截。
profile何时用登录态来源前置**openclaw(默认)常规蒸馏OpenClaw 自管浏览器,user-data 持久在 ~/.openclaw/browser/openclaw/user-data/在橙色 openclaw 窗口登录抖音 一次 即长期复用cloak-douyin**(可选)已在 CloakBrowser 登录抖音、想复用该会话attach 到常驻 CloakBrowser(CDP 127.0.0.1:9333)CloakBrowser 以 --remote-debugging-port=9333 常驻并已登录抖音
登录窗口提醒(避免再登错):两套浏览器 cookies 不互通。用
openclawprofile 时登录态必须在 橙色 openclaw 窗口 里;用cloak-douyin时登录态在 CloakBrowser。开工前先用 browser 工具snapshot主页确认是否已登录(看到「我的」/头像即已登录),未登录则提示用户在对应窗口扫码登录后再继续。调用 browser 工具时通过
profile参数选择:默认不传即openclaw;要复用 CloakBrowser 会话则传profile: "cloak-douyin"。
关键:抖音使用特定滚动容器,禁止 window.scrollTo:
javascript
const container = document.querySelector('.parent-route-container.route-scroll-container');
let prev = 0;
for (let i = 0; i < 30; i++) {
container.scrollTop = container.scrollHeight;
await new Promise(r => setTimeout(r, 2000));
const items = document.querySelectorAll('li a[href*="/video/"]');
if (items.length === prev) break;
prev = items.length;
}
提取标题与 URL:
javascript
const items = document.querySelectorAll('li a[href*="/video/"]');
return Array.from(items).map(a => ({
url: a.href,
title: a.querySelector('p')?.textContent?.trim() || ''
})).filter(x => x.title);
python
keywords = ['营养', '蛋白质', '碳水', ...] # 按用户主题
skip = ['切磋', 'VS', '实战', '带货', '广告', ...]
filtered = [v for v in videos if any(k in v['title'] for k in keywords)
and not any(s in v['title'] for s in skip)]
对每个筛选后的视频:
注意:间隔 2–3 秒/条;描述折叠则点「展开」;单条失败则跳过。
何时跳过 Track B:quick 模式;或无抖音号且用户只需「了解这个人」。
[确认]:抖音描述原文 / 可引用段落 / 多源一致[推断]:仅标题、仅 snippet、单源、或付费课未公开内容[冲突]:全网与抖音说法不一致时显式列出产物路径全网素材memory/[用户名]-全网素材.md视频文案memory/[用户名]-视频文案合集.md(有 Track B 时)蒸馏画像memory/[用户名]-[主题]观点蒸馏.mdgbrainpeople/[slug],slug: [拼音或英文]_[主题]
写入 gbrain 时遵循 skills/brain-ops/SKILL.md(来源标注、反向链接)。
markdown
# [用户名] - 全网素材
> 采集时间: YYYY-MM-DD
> 深度模式: quick | standard | deep
## 身份与平台
## 来源索引
| 来源 URL | 类型 | 摘要 | 可信度 |
## 按主题摘录
### [子主题]
- [确认/推断] ...
markdown
# [用户名] - [主题]视频文案合集
> 采集时间: YYYY-MM-DD
> 来源: [主页URL]
> 共采集 N 条相关视频
---
## 1. [视频标题]
**链接**: [url]
**描述**: [视频描述文字]
### 章节要点(AI字幕)
- [要点1]
markdown
# [用户名]([平台账号])观点蒸馏
> 蒸馏日期:YYYY-MM-DD
> 数据来源:全网搜索 + 抖音公开视频(+ LDR,如有)
## 1. 基本画像
## 2. 核心观点
## 3. 知识体系
## 4. 与主流的分歧
## 5. 常用论据
## 6. 内容风格
## 7. 对用户的实用建议
[用户名]:人物昵称(去掉特殊字符,用于文件名)[主题]:筛选领域(营养、健身、投资…)memory/:workspace 下 memory 目录navigation blocked by policy:确认 openclaw.json → browser.ssrfPolicy.hostnameAllowlist 含目标域名,改后需 openclaw gateway restartskills/local-deep-research/SKILL.mdskills/brain-ops/SKILL.mdskills/planning-with-files/SKILL.md