508 lines
11 KiB
Markdown
508 lines
11 KiB
Markdown
---
|
||
name: obsidian-kb
|
||
description: Detect and process video/article links (Bilibili, YouTube, Zhihu) for Obsidian KB. Auto-trigger on URLs: /kb-add, /kb-process, /kb-inbox, /kb-status.
|
||
version: 1.0.0
|
||
author: OpenClaw
|
||
---
|
||
|
||
# SKILL.md - Obsidian KB Skill
|
||
|
||
## 元数据
|
||
|
||
- **名称**: obsidian-kb
|
||
- **版本**: 1.0.0
|
||
- **描述**: 多源内容知识库维护系统,支持长视频分段分析
|
||
- **作者**: OpenClaw
|
||
|
||
## 自动触发规则
|
||
|
||
当检测到以下内容时,本技能会自动激活:
|
||
|
||
### 触发模式
|
||
|
||
1. **B站视频链接**
|
||
- 完整URL: `https://www.bilibili.com/video/BV*`
|
||
- 短链接: `https://b23.tv/*` (会提示用户提供完整URL或BV号)
|
||
- BV号: `BV*` (直接支持)
|
||
|
||
2. **YouTube视频链接**
|
||
- 完整URL: `https://www.youtube.com/watch?v=*`
|
||
- 短链接: `https://youtu.be/*`
|
||
|
||
3. **知乎文章链接**
|
||
- 专栏文章: `https://zhuanlan.zhihu.com/p/*`
|
||
- 回答: `https://www.zhihu.com/question/*/answer/*`
|
||
|
||
### 自动触发流程
|
||
|
||
当用户发送匹配上述模式的链接时:
|
||
|
||
1. **检测链接** → 识别内容类型(B站/YouTube/知乎)
|
||
2. **提取元数据** → 获取标题、作者、时长等信息
|
||
3. **显示预览** → 向用户展示内容概要
|
||
4. **询问确认** → "是否添加到收件箱并处理?(y/n)"
|
||
5. **用户确认后** → 自动执行 `/kb-add` 命令添加内容
|
||
6. **可选处理** → 根据用户选择,是否立即执行 `/kb-process`
|
||
|
||
### 批量处理
|
||
|
||
支持一次发送多个链接,系统会:
|
||
- 检测所有匹配的模式
|
||
- 显示所有识别到的内容预览
|
||
- 询问用户是否批量添加
|
||
- 显示处理进度
|
||
|
||
### 短链接友好提示
|
||
|
||
检测到短链接时,显示引导信息:
|
||
|
||
**单个短链接:**
|
||
```
|
||
🔗 检测到短链接
|
||
|
||
⚠️ 由于反爬虫保护,短链接无法自动解析
|
||
|
||
📍 短链接: https://b23.tv/xxxxx
|
||
|
||
📱 手机用户:
|
||
1. 点击/打开链接
|
||
2. 在浏览器地址栏复制完整 URL
|
||
3. 发送给助手
|
||
|
||
💻 桌面用户:
|
||
1. 发送 BV 号(如:BV1jcFqz7EFW)
|
||
2. 或使用完整 URL
|
||
|
||
💡 提示:完整 URL 格式为:https://www.bilibili.com/video/BVxxxxx
|
||
```
|
||
|
||
**多个短链接:**
|
||
```
|
||
⚠️ 检测到短链接
|
||
|
||
[1] B站短链接: https://b23.tv/abc123
|
||
需要完整URL或BV号
|
||
|
||
[2] bit.ly: https://bit.ly/test
|
||
需要完整URL
|
||
|
||
💡 建议:
|
||
- 在浏览器打开链接后复制完整URL
|
||
- 或者直接发送BV号(仅限B站)
|
||
```
|
||
|
||
**技术说明:**
|
||
- B站短链接(b23.tv)有反爬虫保护,无法直接解析
|
||
- 本技能使用 `shortlink_resolver.py` 模块检测短链接
|
||
- 提供 Playwright 可选方案(需额外安装)
|
||
```bash
|
||
pip install playwright
|
||
playwright install chromium
|
||
```
|
||
|
||
## 命令列表
|
||
|
||
| 命令 | 描述 | 用法 |
|
||
|------|------|------|
|
||
| `/kb-add` | 添加单个视频/文章 | `/kb-add <URL> [--process] [--yes]` |
|
||
| `/kb-subscribe` | 订阅内容源 | `/kb-subscribe <platform> <type> <id>` |
|
||
| `/kb-inbox` | 查看收件箱 | `/kb-inbox [--limit N] [--sort score\|date]` |
|
||
| `/kb-process` | 处理内容 | `/kb-process [content_id\|all]` |
|
||
| `/kb-skip` | 跳过内容 | `/kb-skip <content_id> [--reason "..."]` |
|
||
| `/kb-status` | 查看状态 | `/kb-status` |
|
||
| `/kb-search` | 搜索知识库 | `/kb-search <query> [--in-tags]` |
|
||
|
||
## 快速开始
|
||
|
||
### 方式1: 自动触发(推荐)
|
||
|
||
直接发送视频链接或文章链接,技能会自动识别并处理:
|
||
|
||
```
|
||
# B站视频(完整URL)
|
||
https://www.bilibili.com/video/BV1xx411c7mD
|
||
|
||
# B站视频(BV号)
|
||
BV1xx411c7mD
|
||
|
||
# B站短链接(会提示完整URL)
|
||
https://b23.tv/xxxxx
|
||
|
||
# YouTube视频
|
||
https://www.youtube.com/watch?v=dQw4w9WgXcQ
|
||
|
||
# 知乎文章
|
||
https://zhuanlan.zhihu.com/p/123456789
|
||
```
|
||
|
||
### 启用字幕生成(可选)
|
||
|
||
如果视频没有字幕,可以启用本地字幕生成功能:
|
||
|
||
```bash
|
||
# 1. 安装依赖
|
||
pip install openai-whisper yt-dlp torch
|
||
|
||
# 2. 启用配置(编辑 config.yaml)
|
||
subtitle:
|
||
enabled: true
|
||
model: base # 推荐使用 base 模型
|
||
```
|
||
|
||
**说明:**
|
||
- 使用 Whisper 本地模型,数据不上传,隐私安全
|
||
- 首次使用会自动下载模型文件(~74MB)
|
||
- 10分钟视频约需 2-5 分钟处理时间(取决于硬件)
|
||
- 生成的字幕会自动缓存,重复使用无需重新生成
|
||
|
||
**详细文档:** 见 `SUBTITLE_FEATURE.md`
|
||
|
||
### 方式2: 使用命令
|
||
|
||
显式调用命令添加内容:
|
||
|
||
```bash
|
||
# 添加单个视频
|
||
/kb-add "https://www.bilibili.com/video/BV1xx411c7mD"
|
||
|
||
# 添加并立即处理
|
||
/kb-add "https://www.bilibili.com/video/BV1xx411c7mD" --process
|
||
|
||
# 跳过确认提示
|
||
/kb-add BV1xx411c7mD --yes
|
||
```
|
||
|
||
## 命令详解
|
||
|
||
### /kb-add
|
||
|
||
快速添加单个视频到收件箱。
|
||
|
||
**用法:**
|
||
```
|
||
/kb-add BV1xx411c7mD
|
||
/kb-add "https://www.bilibili.com/video/BV1xx411c7mD"
|
||
/kb-add "https://www.bilibili.com/video/BV1xx411c7mD" --process
|
||
/kb-add BV1xx411c7mD --yes
|
||
```
|
||
|
||
**参数:**
|
||
- `<URL>` - 视频URL或BV号
|
||
- 完整URL: `https://www.bilibili.com/video/BVxxxxx`
|
||
- BV号: `BVxxxxx`
|
||
- 短链接: `https://b23.tv/xxxxx`(显示友好提示)
|
||
- `--process` - 添加后立即处理
|
||
- `--yes` - 跳过确认提示
|
||
|
||
**输出示例:**
|
||
```
|
||
📥 正在添加视频: BV1xx411c7mD
|
||
→ 标题: Python编程入门教程
|
||
→ UP主: CodeMaster
|
||
→ 时长: 3600秒
|
||
→ 获取字幕... ✅
|
||
|
||
✅ 视频已添加到收件箱!
|
||
Content ID: abc123def456
|
||
|
||
💡 使用以下命令处理:
|
||
python3 src/cli.py process abc123def456
|
||
或:
|
||
python3 src/cli.py process all
|
||
```
|
||
|
||
### /kb-subscribe
|
||
|
||
订阅一个内容源,支持自动获取更新。
|
||
|
||
**用法:**
|
||
```
|
||
/kb-subscribe bilibili:fav:12345678
|
||
/kb-subscribe bilibili:up:123456
|
||
/kb-subscribe youtube:channel:UCxxx
|
||
/kb-subscribe zhihu:collection:12345
|
||
```
|
||
|
||
**支持的源:**
|
||
- `bilibili:fav:<fav_id>` - Bilibili 收藏夹
|
||
- `bilibili:up:<mid>` - Bilibili UP主
|
||
- `youtube:channel:<channel_id>` - YouTube 频道
|
||
- `zhihu:collection:<collection_id>` - 知乎收藏夹
|
||
|
||
### /kb-inbox
|
||
|
||
显示待处理的内容列表。
|
||
|
||
**用法:**
|
||
```
|
||
/kb-inbox
|
||
/kb-inbox --limit 10
|
||
/kb-inbox --status new
|
||
```
|
||
|
||
**输出示例:**
|
||
```
|
||
📥 收件箱 (5 items)
|
||
────────────────────
|
||
1. BV1xx411c7mD | Python入门教程 | ⭐ 85 | 📝 一句话摘要...
|
||
2. BV2yy522c8nE | React Hooks详解 | ⭐ 92 | 📝 一句话摘要...
|
||
```
|
||
|
||
### /kb-process
|
||
|
||
处理内容,生成 Obsidian 笔记。
|
||
|
||
**用法:**
|
||
```
|
||
/kb-process --all # 处理所有待处理项
|
||
/kb-process BV1xx411c7mD # 处理指定内容
|
||
/kb-process --id BV1xx411c7mD # 同上
|
||
```
|
||
|
||
**处理流程:**
|
||
1. 轻量扫描 → 生成一句话摘要和评分
|
||
2. 深度分析 → 生成详细内容(长视频会分段)
|
||
3. 选择模板 → 根据类型和时长
|
||
4. 生成笔记 → Markdown 格式
|
||
5. Git 同步 → 提交到 Obsidian
|
||
|
||
### /kb-skip
|
||
|
||
跳过指定内容,不进行处理。
|
||
|
||
**用法:**
|
||
```
|
||
/kb-skip BV1xx411c7mD
|
||
```
|
||
|
||
### /kb-status
|
||
|
||
显示系统状态和统计信息。
|
||
|
||
**用法:**
|
||
```
|
||
/kb-status
|
||
```
|
||
|
||
**输出示例:**
|
||
```
|
||
📊 Obsidian KB 状态
|
||
────────────────────
|
||
收件箱: 12 待处理 / 45 已完成
|
||
Git同步: ✅ 已启用 (最后同步: 5分钟前)
|
||
订阅源: 3 个活跃
|
||
存储: 128MB / 1GB
|
||
```
|
||
|
||
### /kb-search
|
||
|
||
搜索已处理的内容。
|
||
|
||
**用法:**
|
||
```
|
||
/kb-search python tutorial
|
||
/kb-search "machine learning" --tag ai
|
||
```
|
||
|
||
## 配置说明
|
||
|
||
### 配置文件位置
|
||
|
||
优先级:
|
||
1. `./config.yaml` (当前目录)
|
||
2. `~/.obsidian-kb/config.yaml`
|
||
3. `~/.config/obsidian-kb/config.yaml`
|
||
|
||
### 配置项
|
||
|
||
```yaml
|
||
# AI 配置
|
||
ai:
|
||
provider: openai # AI 提供商
|
||
model: gpt-4 # 模型名称
|
||
api_key: sk-... # API Key (建议使用环境变量)
|
||
|
||
# 存储配置
|
||
storage:
|
||
inbox_dir: inbox # 收件箱目录
|
||
topics_dir: topics # 主题目录
|
||
data_dir: data # 数据目录
|
||
|
||
# Git 同步配置
|
||
git:
|
||
enabled: true # 启用 Git 同步
|
||
vault_path: ~/ObsidianVault # Obsidian 知识库路径
|
||
remote: origin # 远程仓库名
|
||
branch: main # 分支名
|
||
auto_commit: true # 自动提交
|
||
commit_message_template: "Update from obsidian-kb: {count} items"
|
||
|
||
# 分段配置
|
||
chunking:
|
||
enabled: true # 启用长视频分段
|
||
chunk_duration_seconds: 900 # 分段时长 (15分钟)
|
||
max_chunk_duration_seconds: 1800 # 最大分段时长
|
||
long_video_threshold: 1800 # 长视频阈值 (30分钟)
|
||
|
||
# 字幕生成配置(新增)
|
||
subtitle:
|
||
enabled: false # 是否启用自动生成字幕
|
||
model: base # Whisper 模型大小: tiny/base/small/medium/large
|
||
language: null # 语言代码: zh/en/null(自动检测)
|
||
cache_dir: cache/subtitles # 字幕缓存目录
|
||
audio_cache_dir: cache/audio # 音频缓存目录
|
||
|
||
# 数据源配置
|
||
sources:
|
||
bilibili:
|
||
enabled: true
|
||
cookie: '' # Bilibili Cookie (可选)
|
||
youtube:
|
||
enabled: false
|
||
api_key: '' # YouTube API Key
|
||
zhihu:
|
||
enabled: false
|
||
cookie: '' # 知乎 Cookie (可选)
|
||
```
|
||
|
||
### 环境变量
|
||
|
||
可以使用环境变量覆盖配置:
|
||
|
||
```bash
|
||
export OPENAI_API_KEY="sk-..."
|
||
export AI_MODEL="gpt-4"
|
||
export OBSIDIAN_VAULT_PATH="/path/to/vault"
|
||
export BILIBILI_COOKIE="..."
|
||
```
|
||
|
||
## 模板变量
|
||
|
||
### 通用变量
|
||
|
||
所有模板可用:
|
||
- `{{ title }}` - 标题
|
||
- `{{ source }}` - 来源 (bilibili/youtube/zhihu)
|
||
- `{{ url }}` - 原始 URL
|
||
- `{{ author }}` - 作者/UP主
|
||
- `{{ duration }}` - 时长
|
||
- `{{ date }}` - 日期
|
||
- `{{ tags }}` - 标签列表
|
||
- `{{ one_liner }}` - 一句话摘要
|
||
- `{{ summary }}` - 详细摘要
|
||
- `{{ key_points }}` - 核心要点列表
|
||
- `{{ quality_score }}` - 质量评分
|
||
|
||
### 教程视频额外变量
|
||
|
||
仅 `tutorial_video.md` 可用:
|
||
- `{{ prerequisites }}` - 前置知识列表
|
||
- `{{ outline }}` - 分段大纲列表
|
||
- `{{ section.title }}` - 分段标题
|
||
- `{{ section.time_range }}` - 时间段
|
||
- `{{ section.summary }}` - 分段摘要
|
||
- `{{ section.code_snippet }}` - 代码片段
|
||
- `{{ section.code_language }}` - 代码语言
|
||
- `{{ pitfalls }}` - 常见坑点列表
|
||
- `{{ practice_advice }}` - 实践建议列表
|
||
|
||
## 输出格式
|
||
|
||
### 轻量视频输出
|
||
|
||
```markdown
|
||
---
|
||
title: "视频标题"
|
||
source: "bilibili"
|
||
url: "https://..."
|
||
author: "UP主"
|
||
duration: "10:30"
|
||
date: "2024-01-01T00:00:00"
|
||
tags:
|
||
- python
|
||
- tutorial
|
||
---
|
||
|
||
#python #tutorial
|
||
|
||
**一句话摘要**: 这是一句摘要
|
||
|
||
## 摘要
|
||
详细摘要内容...
|
||
|
||
## 核心要点
|
||
1. 要点一
|
||
2. 要点二
|
||
```
|
||
|
||
### 教程视频输出
|
||
|
||
```markdown
|
||
---
|
||
title: "Python 完整教程"
|
||
source: "bilibili"
|
||
url: "https://..."
|
||
up主: "CodeMaster"
|
||
duration: "2:30:00"
|
||
quality_score: 95
|
||
---
|
||
|
||
## 🎯 一句话总结
|
||
...
|
||
|
||
## 📚 前置知识
|
||
- 基础编程概念
|
||
- Python 环境搭建
|
||
|
||
## 📝 步骤详解
|
||
### 环境配置 [00:00-15:00]
|
||
如何配置 Python 开发环境
|
||
|
||
```bash
|
||
pip install python
|
||
```
|
||
|
||
### 基础语法 [15:00-45:00]
|
||
...
|
||
|
||
## 💡 关键要点
|
||
1. 要点一
|
||
2. 要点二
|
||
|
||
## ⚠️ 常见坑点
|
||
- Python 2 与 3 的区别
|
||
- 缩进问题
|
||
|
||
## 🤔 实践建议
|
||
- 跟随视频动手编码
|
||
- 完成课后练习
|
||
```
|
||
|
||
## 故障排除
|
||
|
||
### 无法获取字幕
|
||
|
||
1. 检查 Bilibili Cookie 是否正确设置
|
||
2. 确认视频有字幕/CC字幕
|
||
3. 检查网络连接
|
||
|
||
### Git 同步失败
|
||
|
||
1. 确认 vault_path 指向正确的 Git 仓库
|
||
2. 检查 Git 配置和权限
|
||
3. 查看 Git 日志: `git status` 在 vault 目录
|
||
|
||
### AI 分析失败
|
||
|
||
1. 检查 API Key 是否有效
|
||
2. 确认有可用额度
|
||
3. 查看详细错误日志
|
||
|
||
## 更新日志
|
||
|
||
### v1.0.0
|
||
- 初始版本发布
|
||
- 支持 Bilibili、YouTube、知乎
|
||
- 长视频分段分析
|
||
- Git 自动同步
|