import json import re from call_theta import call_theta_message # from skills.get_skill_name_desc import load_skills class SkillAgent(): # def __init__(): # skills = def get_system_prompt(self): prompt = ''' 你拥有多个“技能(skills)”,每个技能提供详细的工具接口描述、使用说明、示例和适用场景。 现在你有的技能包括: skill_name: mcp-builder:构建 Model Context Protocol (MCP) 服务器,指导开发者注册工具、能力声明、构建服务。 skill_name: docx:创建、编辑、分析 .docx 文档,支持文本提取、格式处理、评论和修订等。 skill_name: 资金撤回类问题解答:当用户询问资金撤回类问题时,可以使用此流程解答问题。常见的资金撤回类问题包括:撤回红包/撤回扫码转账/撤回余额提现功能 📌 规则说明如下: 优先判断用户的 query 是否与某个已知 skill 的功能相关。 如果相关,不要直接回答问题; 而是输出: Skills: skill_detail("") 当获取某个 skill 的完整描述后,检查文档中是否有引用其他 Markdown 文件(如 xx.md)。 如果需要继续参考某 md 文件: 输出: md: md_detail("") 如果文档内容足以回答问题: 直接根据文档提供具体建议、代码模板或操作指引。 如果没有涉及任何 skill,问题为通用性内容: 你应以常规方式回复,无需调用任何函数或引用文档。 🔁 对话流程: 用户输入 → 检查是否涉及技能(skill) → 若涉及:输出 skill_detail("") → 判断 skill 文档中的workflow解答用户问题 → 判断 skill 文档中是否有需要进一步引用的 .md 文件 → 若有:输出 md_detail("") → 若文档内容足够:直接生成基于技能和文档的回答 → 若需要使用工具:输出Tool: func_name(func_param) 若不涉及任何技能:以普通方式回答问题。 ''' return prompt def instruction_resolve(self, answer): # skill_match = re.search(r'''skill_detail$$["']([^"']+)["']\)''', answer) # reference_match = re.search(r'''md_detail$$["']([^"']+\.md)["']\)''', answer) # tool_match = re.search(r'''Tool:\s*([a-zA-Z_]\w*)$$([^)]*)\)''', answer) if "skill_detail" in answer: return {"type":"skill", "content": answer, "raw_content": answer} elif "md_detail" in answer: return {"type":"md", "content": answer, "raw_content": answer} elif "tool" in answer or "Tool" in answer: return {"type": "tool", "content": answer, "raw_content": answer} else: return {"type": "answer", "content": answer, "raw_content": answer} def call(self, messages): answer = call_theta_message(messages) return self.instruction_resolve(answer)