refactor(kb-workflow): 改用Prompt-based模式

- SKILL.md: 重写为详细workflow指导,主代理直接读取执行
- kb_workflow.py: 简化为辅助工具函数库
- skill_main.py: 简化为触发检测入口
- SkillBug.md: 记录架构变更

主代理读取SKILL.md后,按照指导调用sessions_spawn,无需配置allowlist
This commit is contained in:
OpenClaw Agent
2026-02-10 20:46:06 +08:00
parent 679cca3b2c
commit e370b6b39f
4 changed files with 445 additions and 937 deletions
+51 -74
View File
@@ -2,98 +2,75 @@
## 问题记录
### 2026-02-10: 缺少自动写入pending目录的功能
### 2026-02-10: 子代理权限问题
**状态:** ✅ 已修复
**问题:** `sessions_spawn` 调用子代理时返回 `forbidden` 错误。
**解决方案:**
1. 创建 `skill_main.py` 作为技能入口
2. 创建 `kb_workflow.py` 实现完整流程
3. 接收用户消息后自动处理
**原因:** OpenClaw 配置中 allowlist 为空,Python 脚本没有权限调用子代理。
**解决方案:** 改用 Prompt-based 模式(方案B)。
---
### 2026-02-10: kb-workflow 自己实现链接解析而非调用子技能
## 架构重构
**状态:** ✅ 已修复
### 之前(Script-based)
**解决方案:**
重构 `kb_workflow.py`:
1. 使用 `sessions_spawn` 调用子agent
2. 不自己实现链接解析,调用 `kb-link-parser`
3. 从文件名提取平台(不读内容)
```python
# 调用子agent
result = sessions_spawn(
agentId="kb-link-parser",
task="解析URL,输出到pending目录"
)
```
kb_workflow.py (Python脚本)
↓
sessions_spawn() # ❌ 失败(脚本没有权限)
```
---
### 之后(Prompt-based)
### 2026-02-10: _extract_metadata 是空壳
**状态:** ✅ 已修复
**解决方案:**
实现真正的子agent调用:
```python
def call_metadata_agent(platform, link_file, metadata_dir):
agent_id = METADATA_AGENTS.get(platform) # bilibili → kb-bilibili-metadata
return call_subagent(agent_id, task, timeout=120)
```
---
## 重构总结
### 架构变化
**之前(错误):**
主代理读取 SKILL.md
↓
按照指导调用 sessions_spawn # ✅ 成功(主代理有权限)
```
kb_workflow.py (自己造轮子)
├── _extract_link() - 自己解析URL
├── _extract_metadata() - 空壳
```
**之后(正确):**
```
kb-workflow (主代理)
├── sessions_spawn() 调用子agent
│ ├── kb-link-parser → pending/*.link.json
│ ├── kb-bilibili-metadata → metadata/*.meta.json
│ ├── kb-bilibili-content → content/downloads/*.mp4
│ ├── kb-ocr-processor → content/*.txt
│ └── kb-deep-analyzer → analyzed/*.md
└── 文件流转 + Git归档
```
### 设计原则
| workflow 管 | workflow 不管 |
|-------------|---------------|
| 查重 | 读文件内容 |
| 调用子agent | 子技能内部格式 |
| 提取文件名(从返回结果) | 子技能逻辑 |
| 提取平台(从文件名) | |
| 传递路径信息 | |
| Git归档 | |
### 文件变更
| 文件 | 操作 | 说明 |
| 文件 | 变更 | 说明 |
|------|------|------|
| `kb_workflow.py` | 重构 | 使用 sessions_spawn 调用子agent |
| `skill_main.py` | 新增 | 技能入口 |
| `SKILL.md` | 更新 | 明确架构和流程 |
| `SKILL.md` | 重写 | 详细定义 workflow 步骤,主代理直接读取执行 |
| `kb_workflow.py` | 简化 | 保留为辅助工具函数库(查重、归档、Git) |
| `skill_main.py` | 简化 | 只做触发检测,返回指导信息 |
| `SkillBug.md` | 更新 | 记录架构变更 |
### SKILL.md 结构
```
1. 触发条件
2. 步骤 1: 查重
3. 步骤 2: kb-link-parser
4. 步骤 3: 元数据技能
5. 步骤 4: 内容下载
6. 步骤 5: OCR(30分钟超时)
7. 步骤 6: 深度分析
8. 步骤 7: 归档和 Git
9. 步骤 8: 汇报完成
10. 目录结构
11. 支持平台
12. 注意事项
```
### kb_workflow.py 保留的函数
```python
extract_platform(filename) # 从文件名提取平台
extract_base_name(filename) # 从文件名提取基础名称
get_knowledge_base_path() # 获取知识库根目录
ensure_directories(base_path) # 确保目录存在
check_duplicate(url) # 查重
archive_and_git(analyzed_file) # 归档和 Git
generate_summary(...) # 生成汇报
```
---
## 待办
- [ ] 测试完整的处理流程
- [ ] 验证 sessions_spawn 调用是否正常
- [ ] 完善错误处理
- [ ] 添加单元测试
- [ ] 测试 Prompt-based 模式是否正常工作
- [ ] 验证主代理能否正确执行 SKILL.md 中的步骤