This repository has been archived on 2026-02-15. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
openclaw-skills/skills/obsidian-kb/SKILL.md
T
OpenClaw Agent aa206a1679 Add knowledge base: B站视频《在2000多米高空 建座"会飞的"发电站》
- 新增 knowledge-base/ 目录
- 保存央视新闻视频:在2000多米高空 建座"会飞的"发电站
- 完善 obsidian-kb skill:添加知乎 Playwright 提取器
- 更新依赖和文档
2026-02-07 19:06:38 +08:00

12 KiB
Raw Blame History

name, description
name description
obsidian-kb Multi-source content knowledge base with video processing. Use when user says "保存知识库", "添加到知识库", "处理这个视频", "生成obsidian笔记" etc. Supports B站/bilibili (BV号, b23.tv, www.bilibili.com), YouTube videos, and Zhihu articles.

SKILL.md - Obsidian KB Skill

🚀 重要:处理流程

当用户发送视频链接并要求保存到知识库时,直接处理,不要问用户!

正确流程:

  1. 用户发送B站链接(BV号、完整URL、或短链接如 b23.tv/xxxxx)
  2. 用户说"保存到知识库"、"添加到知识库"、"处理这个视频"等
  3. 直接使用 workspace/skills/obsidian-kb 处理
  4. 不要检查全局命令,不要问用户"要安装工具还是手动处理"

示例触发词:

  • "保存到知识库"
  • "添加到知识库"
  • "处理这个视频"
  • "提取字幕生成笔记"
  • "生成obsidian笔记"

元数据

  • 名称: obsidian-kb
  • 版本: 1.0.0
  • 描述: 多源内容知识库维护系统,支持长视频分段分析
  • 作者: OpenClaw

命令列表

命令 描述 用法
/kb-subscribe 订阅内容源 /kb-subscribe <source>:<type>:<id>
/kb-inbox 查看收件箱 /kb-inbox [--limit N]
/kb-process 处理内容 /kb-process [content_id]
/kb-skip 跳过内容 /kb-skip <content_id>
/kb-status 查看状态 /kb-status
/kb-search 搜索知识库 /kb-search <query>

命令详解

/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 python tutorial
/kb-search "machine learning" --tag ai

配置说明

配置文件位置

优先级:

  1. ./config.yaml (当前目录)
  2. ~/.obsidian-kb/config.yaml
  3. ~/.config/obsidian-kb/config.yaml

配置项

# AI 配置
ai:
  provider: openai          # AI 提供商
  model: gpt-4             # 模型名称
  api_key: sk-...          # API Key (建议使用环境变量)

# 存储配置
storage:
  inbox_dir: inbox         # 收件箱目录
  topics_dir: topics       # 主题目录
  data_dir: data           # 数据目录

# 输出配置
output:
  format: markdown         # 输出格式
  encoding: utf-8          # 文件编码
  include_timestamp: true  # 包含时间戳
  include_source: true     # 包含源链接

# 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分钟)

# 数据源配置
sources:
  bilibili:
    enabled: true
    cookie: ''             # Bilibili Cookie (可选)
  youtube:
    enabled: false
    api_key: ''            # YouTube API Key
  zhihu:
    enabled: false
    use_playwright: true    # 使用 Playwright 绕过检测(推荐)
    cookie: ''             # 知乎 Cookie (可选)
    cookie_file: ''        # Cookie 文件路径 (可选)
    timeout: 30           # 超时时间(秒)
    max_retries: 2        # 最大重试次数

# Bilibili 提取器配置
bilibili_extraction:
  use_playwright: true     # 使用 Playwright 绕过检测
  headless: true           # 无头模式
  cookie_file: ''          # Cookie 文件路径 (可选)
  enable_subtitle: true    # 启用字幕提取
  subtitle_language: zh-CN # 字幕语言
  enable_danmaku: false    # 启用弹幕提取
  timeout_seconds: 30      # 超时时间
  max_retries: 3           # 最大重试次数

环境变量

可以使用环境变量覆盖配置:

export OPENAI_API_KEY="sk-..."
export AI_MODEL="gpt-4"
export OBSIDIAN_VAULT_PATH="/path/to/vault"
export BILIBILI_COOKIE="..."

提取器说明

Extractors 目录

extractors/ 目录包含内容提取器实现:

extractors/
├── __init__.py
├── base.py           # 提取器基类
└── bilibili.py       # Bilibili 提取器

BilibiliExtractor 类

BilibiliExtractor 提供了 Bilibili 视频的完整提取功能:

主要方法:

  • extract_video(video_url) - 提取视频信息
  • extract_subtitle(video_url) - 提取字幕
  • extract_danmaku(video_url) - 提取弹幕(可选)
  • extract_video_info(video_url) - 提取视频元信息

特性:

  • 使用 Playwright 绕过反爬检测
  • 支持字幕提取(CC字幕 + AI字幕)
  • 支持弹幕提取(可选)
  • 自动处理无字幕视频
  • 智能重试机制

无字幕处理逻辑:

当视频没有字幕时,系统会:

  1. 检测字幕可用性 - 尝试多种字幕源(CC字幕、AI字幕)
  2. 启用备用方案 - 如果无字幕,使用视频标题和描述作为内容基础
  3. AI 补充分析 - 基于视频元数据生成摘要和要点
  4. 标记状态 - 在生成的笔记中标注"无字幕",说明内容来源于元数据分析
# 示例:检测和处理无字幕视频
if not subtitle_text:
    logger.warning(f"Video {video_url} has no subtitles")
    # 使用视频元数据生成基础内容
    content = {
        "title": video_info["title"],
        "description": video_info["desc"],
        "tags": video_info["tags"],
        "subtitle_available": False
    }
else:
    content["subtitle_available"] = True
    content["subtitle_text"] = subtitle_text

ZhihuPlaywrightExtractor 类

ZhihuPlaywrightExtractor 提供了知乎内容的完整提取功能:

主要方法:

  • extract(url) - 提取知乎内容(支持回答、文章、问题)
  • identify_url_type(url) - 识别 URL 类型
  • extract_id(url) - 提取内容 ID

特性:

  • 使用 Playwright 绕过知乎反爬虫保护
  • 支持完整 Markdown 格式(代码块、表格、引用等)
  • 提取元数据:标题、作者、发布时间、点赞数
  • 智能降级机制(Playwright 失败 → HTTP)
  • 每次提取独立启动浏览器,内存占用低

降级逻辑:

当 Playwright 提取失败时:

  1. ImportError - Playwright 未安装 → 使用 HTTP 方案
  2. TimeoutError - 网络超时 → 重试后降级
  3. 403 Forbidden - 触发反爬虫 → 降级到 HTTP
  4. RuntimeError - 浏览器崩溃 → 降级到 HTTP
from sources.zhihu_playwright_extractor import ZhihuPlaywrightExtractor

extractor = ZhihuPlaywrightExtractor()
data = extractor.extract("https://www.zhihu.com/question/266309957/answer/2003427891925509507")

print(f"Title: {data['title']}")
print(f"Author: {data['author']}")
print(f"Content (Markdown): {data['content_markdown']}")

返回数据结构:

{
    'type': 'answer' | 'article' | 'question',
    'title': str,
    'author': str,
    'content': str,              # HTML 格式
    'content_markdown': str,      # Markdown 格式
    'publish_time': str,
    'vote_up': int,
    'url': str,
    'content_id': str
}

使用提取器

直接使用提取器:

from obsidian_kb.extractors.bilibili import BilibiliExtractor

# 创建提取器实例
extractor = BilibiliExtractor(
    use_playwright=True,
    headless=True
)

# 提取视频信息
video_info = extractor.extract_video("https://www.bilibili.com/video/BV1xx411c7mD")

# 提取字幕
subtitle = extractor.extract_subtitle("https://www.bilibili.com/video/BV1xx411c7mD")

print(f"Title: {video_info['title']}")
print(f"Subtitle length: {len(subscription)} characters")

通过管道使用:

# 提取器会自动被管道调用
/kb-process BV1xx411c7mD

模板变量

通用变量

所有模板可用:

  • {{ 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 }} - 实践建议列表

输出格式

轻量视频输出

---
title: "视频标题"
source: "bilibili"
url: "https://..."
author: "UP主"
duration: "10:30"
date: "2024-01-01T00:00:00"
tags:
  - python
  - tutorial
---

#python #tutorial

**一句话摘要**: 这是一句摘要

## 摘要
详细摘要内容...

## 核心要点
1. 要点一
2. 要点二

教程视频输出

---
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 自动同步