""" Skill 数据模型 Skill 是平台的核心概念:可配置的行为指导单元 """ from pydantic import BaseModel, Field from typing import Optional, Dict, Any, List from datetime import datetime class SkillTool(BaseModel): """Skill 工具定义(仅内置 Skill 支持)""" name: str description: str script: str # 脚本文件名 parameters: Dict[str, Dict[str, Any]] = Field(default_factory=dict) class SkillConfig(BaseModel): """Skill 配置""" # 风格预设 preset: Optional[str] = None # 可调节参数 parameters: Dict[str, Dict[str, Any]] = Field(default_factory=dict) # 权重配置 weights: Optional[Dict[str, float]] = None class Skill(BaseModel): """Skill 模型""" id: str name: str version: str = "1.0.0" author: str = "未知" # 类型:builtin 或 user type: str = "user" # 核心内容 - 行为指导 behavior_guide: str = "" # 直接影响 Agent 行为 # 配置 config: SkillConfig = Field(default_factory=SkillConfig) # 提示词模板(可选) template: Optional[str] = None # 工具定义(仅内置 Skill) tools: Optional[List[SkillTool]] = None # 元数据 category: str = "通用" tags: List[str] = Field(default_factory=list) visibility: str = "private" # private 或 public # 文件路径(用于内部追踪) file_path: Optional[str] = None # 时间戳 created_at: Optional[datetime] = None updated_at: Optional[datetime] = None class SkillCreate(BaseModel): """创建 Skill 请求""" id: str name: str content: str # Markdown 格式的完整 Skill 内容 category: str = "通用" tags: List[str] = Field(default_factory=list) class SkillUpdate(BaseModel): """更新 Skill 请求""" name: Optional[str] = None content: Optional[str] = None category: Optional[str] = None tags: Optional[List[str]] = None class SkillConfigUpdate(BaseModel): """更新 Skill 配置请求""" preset: Optional[str] = None parameters: Optional[Dict[str, Dict[str, Any]]] = None weights: Optional[Dict[str, float]] = None class SkillTestRequest(BaseModel): """测试 Skill 请求""" test_input: str context: Optional[Dict[str, Any]] = None temperature: float = 0.7 class SkillTestResponse(BaseModel): """测试 Skill 响应""" skill_id: str skill_name: str response: str usage: Optional[Dict[str, int]] = None class SkillGenerateRequest(BaseModel): """AI 生成 Skill 请求""" description: str = Field(..., description="用户对想要创建的 Skill 的描述") category: Optional[str] = None tags: Optional[List[str]] = None temperature: float = Field(0.7, ge=0, le=1) class SkillGenerateResponse(BaseModel): """AI 生成 Skill 响应""" suggested_id: str suggested_name: str skill_content: str category: str suggested_tags: List[str] explanation: str # AI 对生成的 Skill 的说明