refactor(kb-workflow): 重构为真正的编排者,使用sessions_spawn调用子agent

- kb_workflow.py: 重构为编排者,使用sessions_spawn调用子技能
- skill_main.py: 新增技能入口,处理用户消息
- SKILL.md: 更新文档,明确架构和流程
- SkillBug.md: 新增问题记录文档

设计原则:
- workflow不读文件内容,从文件名提取平台
- 使用sessions_spawn调用子agent
- 子技能自己定义输入输出格式
This commit is contained in:
OpenClaw Agent
2026-02-10 20:31:33 +08:00
parent 49ebbdff0a
commit 11c62dd383
4 changed files with 1049 additions and 1031 deletions
+176 -180
View File
@@ -13,7 +13,7 @@ KB Workflow 是一个完整的知识库管理系统,包含:
**核心功能**:
- 📥 **收件箱扫描** - 扫描四个子目录 (pending, metadata, content, analyzed)
- 🔄 **内容处理** - 调用技能2-4处理内容
- 🔄 **内容处理** - 调用子agent处理各阶段
- 📦 **Git版本管理** - 归档后自动提交并推送
- 🔔 **订阅管理** - 跟踪订阅源更新
- 🧹 **自动清理** - 定期清理临时文件
@@ -27,218 +27,213 @@ KB Workflow 是一个完整的知识库管理系统,包含:
| 触发词 | 行为 | 示例 |
|--------|------|------|
| `保存到知识库` + 链接 | 添加到收件箱并处理 | "保存到知识库 https://www.bilibili.com/video/BVxxx" |
| `添加到知识库` + 链接 | 添加到收件箱并处理 | "添加到知识库 https://www.bilibili.com/video/BVxxx" |
| `订阅到知识库` + 链接 | 添加到订阅列表 | "订阅到知识库 https://www.bilibili.com/video/BVxxx" |
| `订阅知识库` + 链接 | 添加到订阅列表 | "订阅知识库 https://www.bilibili.com/video/BVxxx" |
| `保存到知识库` + 链接 | 添加到收件箱并处理 | "保存到知识库 https://www.bilibili.com/video/BVxxx" |
### 支持的平台
| 平台 | 保存 | 订阅 |
|------|------|------|
| Bilibili | ✅ | ✅ |
| YouTube | ✅ | ❌ |
| 知乎 | ✅ | ❌ |
| 平台 | 子技能 |
|------|--------|
| Bilibili | kb-bilibili-metadata, kb-bilibili-content |
| 知乎 | kb-zhihu-metadata |
## 架构设计
```
用户: "添加到知识库 https://www.bilibili.com/video/BV1ci4y1V7tb"
│
▼
┌─────────────────────────────────────────────────────────┐
│ kb-workflow (主代理) │
│ │
│ 职责: │
│ 1. 接收用户消息,识别触发词和链接 │
│ 2. 查重(根据URL/文件名) │
│ 3. 调用子agent处理各阶段 │
│ 4. 文件流转(mv) │
│ 5. Git版本管理 │
│ 6. 归档和清理 │
└─────────────────────────────────────────────────────────┘
│ │ │ │
▼ ▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ kb-link-parser│ │kb-bilibili- │ │kb-bilibili- │ │ kb-deep- │
│ (子agent) │ │ metadata │ │ content │ │ analyzer │
│ │ │ (子agent) │ │ (子agent) │ │ (子agent) │
└──────────────┘ └──────────────┘ └──────────────┘ └──────────────┘
```
## 处理流程
### 完整流程(6个阶段)
```
用户发送"添加到知识库 + 链接"
│
▼
kb-workflow:
1. 查重(根据URL/文件名)
2. 确认目录存在
3. 调用 kb-link-parser (sessions_spawn)
│
▼
kb-link-parser (子agent):
解析URL
输出: pending/bilibili_BV1ci4y1V7tb.link.json
返回: {"success": true/false, "output_file": "pending/..."}
│
▼
kb-workflow:
从文件名提取平台 "bilibili" → 调用 kb-bilibili-metadata
│
▼
kb-bilibili-metadata (子agent):
获取元数据
输出: metadata/bilibili_BV1ci4y1V7tb.meta.json
返回: {"success": true/false, "output_file": "metadata/..."}
│
▼
kb-workflow:
调用 kb-bilibili-content
│
▼
kb-bilibili-content (子agent):
下载视频+字幕
输出: content/downloads/*.mp4, *.srt
返回: {"success": true/false, "output_file": "...", "subtitles": "..."}
│
▼
kb-workflow:
拿到字幕文件 → 调用 kb-ocr-processor
│
▼
kb-ocr-processor (子agent):
OCR处理
输出: content/bilibili_BV1ci4y1V7tb.txt
返回: {"success": true/false, "output_file": "content/..."}
│
▼
kb-workflow:
拿到txt文件 → 调用 kb-deep-analyzer
│
▼
kb-deep-analyzer (子agent):
深度分析
输出: analyzed/bilibili_BV1ci4y1V7tb.md
返回: {"success": true/false, "output_file": "analyzed/..."}
│
▼
kb-workflow:
mv → archive/YYYY-MM-DD/
git add → commit → push
汇报完成
```
## 目录结构
```
knowledge-base/
├── kb.config.yaml # 配置文件
├── .gitignore # Git忽略规则
├── pending/ # 待处理内容 (*.md)
├── metadata/ # 链接解析结果 (*.link.json)
知识库根目录 KB_BASE_PATH/
├── archive/ # Git归档目录
│ ├── YYYY-MM-DD/ # 按日期归档
│ └── subscriptions/ # 订阅数据
├── pending/ # 链接解析结果 (*.link.json)
├── metadata/ # 元数据 (*.meta.json)
├── content/
│ ├── json/ # 元数据 (*.meta.json)
│ ├── downloads/ # 视频文件 (*.mp4/*.flv) - 7天后清理
│ └── subtitles/ # 字幕文件 (*.srt/*.lrc) - 7天后清理
├── frames/ # 视频截帧 (*.jpg) - 7天后清理
├── analyzed/ # 分析报告 (*.md)
└── archive/ # Git归档目录
├── YYYY-MM-DD/ # 按日期归档
└── subscriptions/ # 订阅数据
├── subscriptions.json # 订阅配置
└── processed.json # 已处理项目
│ ├── downloads/ # 视频文件 (*.mp4) - 7天后清理
│ └── subtitles/ # 字幕文件 (*.srt) - 7天后清理
├── frames/ # 视频截帧 (*.jpg) - 7天后清理
└── analyzed/ # 分析报告 (*.md)
```
## Git版本管理
## 设计原则
### 配置
### workflow 职责
设置环境变量:
```bash
export KB_GIT_ROOT="/path/to/archive" # Git仓库目录
export KB_GIT_REMOTE="git@github.com:user/repo.git" # 远程仓库
export KB_GIT_USER="Username" # 用户名
export KB_GIT_EMAIL="user@example.com" # 邮箱
| 操作 | 说明 |
|------|------|
| 查重 | 根据URL/文件名查重 |
| 创建目录 | 确保 base_path 下目录存在 |
| 调用子agent | 使用 sessions_spawn 调用子技能 |
| 提取文件名 | 从子agent返回的output_file提取 |
| 提取平台 | 从文件名第一个下划线之前提取(不读内容) |
| 传递信息 | 给子agent提示词 + 需要的路径 |
| 文件流转 | 最后归档 |
| Git | commit + push |
### workflow 不管
- 不读文件内容
- 不关心子技能内部格式
- 子技能自己定义输入输出规范
### 子agent 调用方式
```python
# kb-workflow 调用子agent
result = sessions_spawn(
agentId="子技能名称",
task="提示词 + 需要的路径信息",
timeoutSeconds=120
)
```
### 工作流程
### 子技能返回格式
```
归档项目 → Git add → Git commit → Git push → 清理临时文件
```
- 每次归档生成一个commit
- 自动推送到远程仓库(重试3次)
- 汇报中体现Git状态
## 订阅管理
### 数据结构
所有子技能应返回JSON:
```json
{
"version": "1.0",
"subscriptions": [
{
"id": "sub_001",
"platform": "bilibili",
"type": "series",
"identifier": "123456",
"name": "UE5教程",
"subscribed_at": "2026-02-10T12:00:00",
"last_checked": null,
"last_update": null,
"status": "active"
}
],
"processed_items": [
{
"id": "BVxxx",
"title": "视频标题",
"processed_at": "2026-02-10T14:00:00",
"archived": true
}
]
"success": true,
"output_file": "完整文件路径",
"subtitles": "字幕文件路径(可选)"
}
```
### 命令
## 环境变量
```bash
# 添加订阅
python kb_workflow.py --trigger subscriptions --add "bilibili" "series" "123456" "教程名称"
# 检查更新
python kb_workflow.py --trigger subscriptions --check
# 查看状态
python kb_workflow.py --trigger subscriptions --status
```
## 自动清理策略
### 清理规则
| 类型 | 保留 | 清理周期 |
|------|------|---------|
| 分析报告 | ✅ 永久 | - |
| 链接信息 | ✅ 永久 | - |
| 元数据 | ✅ 永久 | - |
| 订阅数据 | ✅ Git管理 | - |
| 视频文件 | ❌ | 7天 |
| 截帧文件 | ❌ | 7天 |
### 命令
```bash
# 清理30天前的临时文件
python kb_workflow.py --trigger cleanup --days 30
# 清理单个项目
python kb_workflow.py --trigger cleanup --project "项目名称"
export KB_BASE_PATH="/path/to/knowledge-base" # 知识库根目录
export KB_GIT_ROOT="/path/to/archive" # Git仓库目录
export KB_GIT_REMOTE="git@github.com:user/repo.git" # 远程仓库
export KB_GIT_USER="Username" # 用户名
export KB_GIT_EMAIL="user@example.com" # 邮箱
```
## Usage
### 命令行用法
### 作为 OpenClaw 技能
当用户发送消息时自动触发:
```
用户: "添加到知识库 https://www.bilibili.com/video/BVxxx"
```
### 作为子代理
```python
# 从其他技能调用
result = sessions_spawn(
agentId="kb-workflow",
task="添加到知识库 https://www.bilibili.com/video/BVxxx"
)
```
### 命令行
```bash
# 查看状态
python kb_workflow.py --trigger status
# 处理待处理内容
python kb_workflow.py --trigger manual --scope pending --limit 5
# 初始化Git
python kb_workflow.py --trigger git-init
# 查看Git状态
python kb_workflow.py --trigger git-status
# 清理过期文件
python kb_workflow.py --trigger cleanup --days 30
# 处理单个URL
python kb_workflow.py --url "https://www.bilibili.com/video/BVxxx"
```
### 参数说明
## 子技能集成
| 参数 | 说明 | 默认值 |
|------|------|--------|
| `--trigger` | 触发类型 | `status` |
| `--scope` | 处理范围 | `pending` |
| `--limit` | 处理数量限制 | 无限制 |
| `--days` | 清理天数 | 30 |
## Integration
### 技能2-4 集成
KB Workflow 协调以下子技能:
1. **Skill 1: Link Parser** - 解析 URL/链接
2. **Skill 2: Metadata** - 提取元数据
3. **Skill 3: Content** - 获取内容
4. **Skill 4: Deep Analyzer** - 深度分析
## Configuration
### 配置文件 (kb.config.yaml)
```yaml
git:
enabled: true
remote: "git@github.com:user/repo.git"
user: "Username"
email: "user@example.com"
cleanup:
video_retention_days: 7
frame_retention_days: 7
auto_cleanup: true
subscriptions:
check_interval_hours: 24
```
## Troubleshooting
### Git未初始化
```bash
# 检查配置
python kb_workflow.py --trigger git-status
# 初始化
export KB_GIT_ROOT="/path/to/archive"
python kb_workflow.py --trigger git-init
```
### 推送失败
- 检查网络连接
- 验证远程仓库权限
- 查看错误日志
### 存储空间过大
```bash
# 清理过期文件
python kb_workflow.py --trigger cleanup --days 7
# 查看存储使用情况
python kb_workflow.py --trigger status
```
| 阶段 | 子技能 | 输出文件 |
|------|--------|----------|
| 链接解析 | kb-link-parser | pending/{platform}_{id}.link.json |
| 元数据 | kb-bilibili-metadata | metadata/{platform}_{id}.meta.json |
| 内容 | kb-bilibili-content | content/downloads/{platform}_{id}.mp4, content/subtitles/{platform}_{id}.srt |
| OCR | kb-ocr-processor | content/{platform}_{id}.txt |
| 分析 | kb-deep-analyzer | analyzed/{platform}_{id}.md |
## Related Skills
@@ -246,3 +241,4 @@ python kb_workflow.py --trigger status
- **kb-bilibili-metadata** - B站元数据
- **kb-bilibili-content** - B站内容获取
- **kb-deep-analyzer** - 深度分析
- **kb-ocr-processor** - OCR处理