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:
@@ -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 中的步骤
|
||||
|
||||
Reference in New Issue
Block a user