demo / skillAgent.py
Othesis's picture
Upload 7 files
e215d24 verified
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_name>")
当获取某个 skill 的完整描述后,检查文档中是否有引用其他 Markdown 文件(如 xx.md)。
如果需要继续参考某 md 文件:
输出:
md: md_detail("<xx.md>")
如果文档内容足以回答问题:
直接根据文档提供具体建议、代码模板或操作指引。
如果没有涉及任何 skill,问题为通用性内容:
你应以常规方式回复,无需调用任何函数或引用文档。
🔁 对话流程:
用户输入 → 检查是否涉及技能(skill)
→ 若涉及:输出 skill_detail("<skill_name>")
→ 判断 skill 文档中的workflow解答用户问题
→ 判断 skill 文档中是否有需要进一步引用的 .md 文件
→ 若有:输出 md_detail("<xx.md>")
→ 若文档内容足够:直接生成基于技能和文档的回答
→ 若需要使用工具:输出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)