| import json |
| import re |
| from call_theta import call_theta_message |
| |
|
|
|
|
| class SkillAgent(): |
| |
| |
|
|
| 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): |
| |
| |
| |
| 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) |
|
|
|
|