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/kb-workflow/skill_main.py
T
OpenClaw Agent e370b6b39f refactor(kb-workflow): 改用Prompt-based模式
- SKILL.md: 重写为详细workflow指导,主代理直接读取执行
- kb_workflow.py: 简化为辅助工具函数库
- skill_main.py: 简化为触发检测入口
- SkillBug.md: 记录架构变更

主代理读取SKILL.md后,按照指导调用sessions_spawn,无需配置allowlist
2026-02-10 20:46:06 +08:00

97 lines
2.2 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
KB Workflow Skill Main Entry
当用户发送"添加到知识库 + 链接"时触发。
此入口只负责:
1. 确认触发条件
2. 引导主代理读取 SKILL.md
3. 让主代理按照 SKILL.md 的指导执行完整 workflow
"""
import re
import sys
# 触发词模式
TRIGGER_PATTERNS = [
r'添加到知识库\s+(https?://[^\s]+)',
r'保存到知识库\s+(https?://[^\s]+)',
]
def extract_link(message: str) -> str | None:
"""从消息中提取链接"""
for pattern in TRIGGER_PATTERNS:
match = re.search(pattern, message)
if match:
return match.group(1)
return None
def main(message: str) -> Dict[str, Any]:
"""
主入口函数
此函数返回指导信息,让主代理知道如何执行 workflow。
实际的 workflow 逻辑在 SKILL.md 中定义。
"""
result = {
"success": False,
"url": None,
"instructions": None,
"error": None
}
try:
# 1. 提取链接
url = extract_link(message)
if not url:
result["error"] = "未找到链接"
return result
result["url"] = url
# 2. 生成指导信息
result["success"] = True
result["instructions"] = {
"action": "execute_workflow",
"url": url,
"workflow_prompt": f"""请按照 SKILL.md 中的指导执行完整的知识库 workflow:
1. 查重 - 检查知识库是否已存在此内容
2. 调用 kb-link-parser 解析 URL
3. 根据平台调用对应元数据技能
4. 调用内容下载技能
5. 调用 OCR 处理(30分钟超时)
6. 调用深度分析
7. 归档到 archive/ 目录
8. Git commit
9. 汇报完成
当前处理的 URL: {url}
开始执行 workflow。"""
}
except Exception as e:
result["error"] = str(e)
return result
if __name__ == "__main__":
# 从参数获取消息
if len(sys.argv) > 1:
message = sys.argv[1]
else:
message = sys.stdin.read()
if not message:
print("请提供消息内容")
sys.exit(1)
result = main(message)
print(result)