e370b6b39f
- SKILL.md: 重写为详细workflow指导,主代理直接读取执行 - kb_workflow.py: 简化为辅助工具函数库 - skill_main.py: 简化为触发检测入口 - SkillBug.md: 记录架构变更 主代理读取SKILL.md后,按照指导调用sessions_spawn,无需配置allowlist
97 lines
2.2 KiB
Python
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)
|