AI SkillHub — 全自动知识策展系统
命令格式
!skill <URL> ← 自动模式,AI 自动归纳关键词和分类
!skill <关键词> <URL> ← 手动模式,用户指定关键词
⚡ 第零步:立即回复用户(不得跳过)
收到命令的第一件事是回复:
✅ 收到!正在处理「{URL}」,请稍等...
然后才开始执行下面的步骤。
🗺️ 平台识别 → 执行卡速查表
先看 URL,匹配平台,直接跳到对应执行卡,不要阅读其他部分。
| URL 特征 | 平台 | 执行卡 |
|---|
youtube.com 或 youtu.be | YouTube | → [执行卡 A] |
bilibili.com | B站 | → [执行卡 B] |
mp.weixin.qq.com | 微信公众号 | → [执行卡 C] |
douyin.com 或 v.douyin.com | 抖音 | → [执行卡 D] |
| 其他所有网址 | 通用网页 | → [执行卡 E] |
[执行卡 A] YouTube
A1. 先跑字幕脚本(必须第一步,不得绕过)
python3 ~/.openclaw/scripts/yt_transcript.py "{url}"
结果判断:
✅ 输出包含 "transcript" 字段 → 提取成功,将 transcript 内容作为正文,进入 [Step 4 归类]
❌ 输出包含 "error" 字段 → 字幕不可用,进入 A2
A2. 字幕失败 → 通知用户运行本地流水线
告知用户:
⚠️ 该视频没有字幕,需要在你的 Windows 本地下载音频后转写。
请在你的电脑上打开 PowerShell,运行:
powershell -ExecutionPolicy Bypass -File "C:\Users\admin\Documents\trae_projects\vps skill\yt_local_pipeline.ps1" "{url}" tiny
运行完成后,会在当前目录生成 yt_transcript_XXXXXX.txt 文件。
请把文件内容粘贴回来,我继续处理。
收到用户粘贴的内容后,将其作为正文,进入 [Step 4 归类]。
[执行卡 B] B站
B1. 检查 cookies 并下载音频
BILI_COOKIES="$HOME/.openclaw/cookies/bilibili.txt"
if [ -f "$BILI_COOKIES" ]; then
COOKIES_ARG="--cookies $BILI_COOKIES"
else
COOKIES_ARG=""
fi
python3 -m yt_dlp -x --audio-format mp3 --audio-quality 5 \
$COOKIES_ARG \
-o /tmp/content_audio.mp3 \
"{url}" 2>&1
结果判断:
✅ 下载成功 → 进入 B2
❌ 下载失败且 cookies 不存在 → 告知用户:
❌ B站下载失败:需要登录 cookies。
cookies 文件应在:~/.openclaw/cookies/bilibili.txt
请联系管理员重新导出 cookies 后重试。
B2. Whisper 转写
python3 -c "
import whisper
model = whisper.load_model('tiny')
result = model.transcribe('/tmp/content_audio.mp3', language='zh')
with open('/tmp/原始内容.txt', 'w', encoding='utf-8') as f:
f.write(result['text'])
print('转写完成,字数:', len(result['text']))
"
模型选择:默认 tiny。用户明确说「用 small」「用 medium」时才替换。
转写完成后,将 /tmp/原始内容.txt 内容作为正文,进入 [Step 4 归类]。
[执行卡 C] 微信公众号
C1. 第一步:必须先跑 wx_extract.py(不得跳过,不得用其他工具替代)
python3 ~/.openclaw/scripts/wx_extract.py "{url}"
结果判断:
✅ 输出 JSON 包含 "content" 字段且无 "error" 字段 → 提取成功,将 content 内容作为正文,进入 [Step 4 归类]
❌ 输出包含 "error": "blocked" 字段 → 进入 C2
C2. 第二步:extract_content_from_websites 浏览器模式
extract_content_from_websites(
url="{url}",
mode="browser_only",
prompt="提取微信公众号文章完整正文,包括标题和所有段落"
)
✅ 成功 → 将结果作为正文,进入 [Step 4 归类]
❌ 失败 → 进入 C3
C3. 第三步:搜索引擎缓存
使用 batch_web_search 搜索:
"{文章标题}" 全文
"{url中的短ID}" site:weixin.sogou.com
✅ 找到完整内容 → 使用,注明「内容来自搜索缓存」,进入 [Step 4 归类]
❌ 未找到 → 进入 C4
C4. 最终兜底:请用户提供
⚠️ 该微信文章受谷歌云 IP 限制,自动抓取失败。
请在微信中打开文章,复制全文后粘贴给我,我继续处理。
[执行卡 D] 抖音
直接告知用户,不要尝试任何下载:
❌ 抖音视频无法处理。
原因:当前服务器(美国 Google Cloud IP)被抖音 API 封锁,无论是否有 cookies 均无效。
建议:若该内容同时发布在 B站或 YouTube,请提供对应链接。
[执行卡 E] 通用网页(知乎 / 小红书 / 其他)
E1. extract_content_from_websites
extract_content_from_websites(
url="{url}",
mode="browser_only",
prompt="提取这个页面的完整正文内容,包括标题、所有段落,不要省略任何内容"
)
✅ 成功 → 进入 [Step 4 归类]
❌ 失败 → 进入 E2
E2. 搜索引擎兜底
batch_web_search("{页面标题} 全文")
✅ 找到 → 进入 [Step 4 归类]
❌ 找不到 → 告知用户无法提取,请求直接粘贴内容
[Step 4] 自动归类(仅自动模式)
手动模式(用户提供了关键词)跳过此步。
用 llm-task 分析内容,确定 keyword 和 category:
{
"prompt": "你是一个知识分类专家。请根据以下内容,输出:\n1. keyword(关键词):2-6个字,概括内容主题,中文或英文均可,作为文件夹名使用(不含特殊字符)\n2. category(分类):从以下分类中选一个最合适的:编程开发 / 法律金融 / 内容创作 / 商业运营 / 效率工具 / 健康生活 / 教育学习 / 其他\n3. reason(理由):一句话说明分类依据\n\n【内容标题】:{title}\n【内容摘要(前500字)】:{content[:500]}\n\n严格按 JSON 格式输出:{\"keyword\": \"...\", \"category\": \"...\", \"reason\": \"...\"}",
"model": "minimax/auto"
}
[Step 5] 保存原始内容
写入 /tmp/原始内容.md:
# 原始内容记录
## 来源信息
- URL:{url}
- 平台:{platform}
- 关键词:{keyword}
- 分类:{category}
- 归类方式:{自动归类 / 用户指定}
- 提取时间:{datetime}
- 提取方式:{方式,例:YouTube字幕API / B站yt-dlp+Whisper(tiny) / wx_extract.py / 本地流水线+Whisper(tiny)}
## 内容正文
{完整内容,一字不删}
[Step 6] 事实抽取
用 llm-task 扫描全文,重点检测财务/结果类关键词:
{
"prompt": "你是一个事实抽取专家。从以下内容中抽取所有关键事件,特别关注【结果、状态、金额、是否成功】。\n\n必须扫描:追回、退款、退回、赔付、胜诉、执行成功、失败、已追回、已退款、钱、款、金额、赔偿\n\n输出格式:\n## 关键事件\n| 事件 | 结果状态 | 证据句子 | 时间/金额 |\n\n## financial_outcome\n- has_financial_outcome: true/false\n- outcome_summary:\n- evidence_sentence:\n\n注意:必须逐句扫描,不得跳段",
"input": "{原始内容全文}"
}
[Step 7] 生成 SKILL.md
写入 /tmp/SKILL.md:
# {关键词} Skill
## ⚠️ 关键结果
{如果 has_financial_outcome=true,用粗体标注结果}
## 核心事件
{从 Step 6 events 转化}
## 详细内容
{结构化总结}
## 重要事实清单
{其他关键事实}
[Step 8] 推送 GitHub
export GITHUB_TOKEN=$(grep GITHUB_TOKEN ~/.openclaw/.env | cut -d= -f2)
export GITHUB_REPO=$(grep GITHUB_REPO ~/.openclaw/.env | cut -d= -f2)
export GITHUB_BRANCH=$(grep GITHUB_BRANCH ~/.openclaw/.env | cut -d= -f2-)
rm -rf /tmp/skillhub_repo
git clone "https://${GITHUB_TOKEN}@github.com/${GITHUB_REPO}.git" /tmp/skillhub_repo
mkdir -p "/tmp/skillhub_repo/skills/{category}/{keyword}"
cp /tmp/原始内容.md "/tmp/skillhub_repo/skills/{category}/{keyword}/原始内容.md"
cp /tmp/SKILL.md "/tmp/skillhub_repo/skills/{category}/{keyword}/SKILL.md"
cd /tmp/skillhub_repo
git config user.email "openclaw@bot"
git config user.name "OpenClaw Bot"
git add .
git commit -m "Add skill [{category}/{keyword}] - $(date '+%Y-%m-%d')"
git push origin ${GITHUB_BRANCH:-main}
rm -rf /tmp/skillhub_repo
完成通知
✅ Skill 已保存:【{keyword}】
🏷️ 分类:{category}
📄 原始内容:skills/{category}/{keyword}/原始内容.md
🧠 分析摘要:skills/{category}/{keyword}/SKILL.md
📦 来源:{url}
🔗 GitHub:https://github.com/{GITHUB_REPO}/tree/main/skills/{category}/{keyword}
📌 提取方式:{方式}
🚫 禁止事项(违反即为错误)
- 禁止对 YouTube 直接用 yt-dlp 下载——VPS 是谷歌云 IP,必然 403,不要尝试
- 禁止对微信公众号跳过 wx_extract.py——必须先跑脚本,不能直接用浏览器工具或 llm-task
- 禁止用
llm-task 访问任何 URL——llm-task 只做文本推理,没有联网能力
- 禁止对抖音尝试任何下载——直接告知用户不可用
- 禁止只推送一个文件——必须同时推送
原始内容.md + SKILL.md
- 禁止省略或截断原始内容——原始内容必须一字不删全量保存
工具与环境
| 工具/路径 | 用途 |
|---|
python3 ~/.openclaw/scripts/yt_transcript.py | YouTube 字幕提取 |
python3 ~/.openclaw/scripts/wx_extract.py | 微信公众号提取 |
python3 -m yt_dlp | B站/西瓜视频音频下载 |
whisper(Python 库) | 音频转写 |
~/.openclaw/cookies/bilibili.txt | B站登录 cookies |
~/.openclaw/.env | GitHub Token / Repo 配置 |
C:\...\yt_local_pipeline.ps1 | YouTube 无字幕时本地下载流水线(用户在 Windows 本地运行) |
exec | 在 VPS 执行 shell 命令 |
extract_content_from_websites | 网页/浏览器内容提取 |
batch_web_search | 搜索引擎兜底 |
llm-task | 纯文本推理(不能联网) |