""" 完整的数据模型和 API,实现 Skills 与 LLM 的深度结合 """ from pydantic import BaseModel, Field from typing import List, Optional, Dict, Any, Union from datetime import datetime from enum import Enum # ============================================================================ # Skill 与 LLM 结合的核心模型 # ============================================================================ class SkillTriggerType(str, Enum): """Skill 触发类型""" # LLM 根据 description 自动选择 AUTO = "auto" # 用户/Agent 显式指定 EXPLICIT = "explicit" # Agent 工作流固定使用 FIXED = "fixed" class SkillMetadata(BaseModel): """Skill 元数据(用于触发和选择)""" name: str # 关键:description 用于 LLM 理解何时使用此 Skill description: str # 应包含:功能、触发条件、使用场景 category: str tags: List[str] trigger_type: SkillTriggerType # 可选的触发关键词(用于精确匹配) keywords: List[str] = Field(default_factory=list) # 适用场景(用于 AI 匹配) use_cases: List[str] = Field(default_factory=list) # 依赖的其他 Skills dependencies: List[str] = Field(default_factory=list) # 权重(用于多 Skill 选择时的排序) priority: float = 1.0 class SkillReferenceFile(BaseModel): """参考文件定义""" filename: str filetype: str # md, txt, json, yaml, py, sh content: str description: Optional[str] = None size_bytes: int class SkillScript(BaseModel): """脚本定义""" filename: str language: str # python, bash, javascript code: str description: str parameters: Dict[str, Any] = Field(default_factory=dict) class SkillAsset(BaseModel): """资产定义(模板、图标等)""" filename: str filetype: str content: str # base64 或文本 description: str class SkillStructure(BaseModel): """完整的 Skill 结构(符合 skill-creator 标准)""" # SKILL.md frontmatter: Dict[str, Any] # YAML frontmatter: name, description behavior_guide: str # Markdown 内容 # 可选资源 scripts: List[SkillScript] = Field(default_factory=list) references: List[SkillReferenceFile] = Field(default_factory=list) assets: List[SkillAsset] = Field(default_factory=list) # ============================================================================ # AI 生成 Skill 的完整流程 # ============================================================================ class SkillGenerationRequest(BaseModel): """ AI 生成 Skill 请求 按照 skill-creator 的完整流程: Step 1: Understanding - 理解需求 Step 2: Planning - 规划资源 Step 3: Initialize - 生成结构 Step 4: Edit - 用户调整 Step 5: Package - 打包 """ # Step 1: 用户意图 user_intent: str = Field( ..., description="用户想要创建的 Skill 的意图描述" ) use_cases: List[str] = Field( default_factory=list, description="具体用例示例,如 ['用户说:帮我写一段古风对话', '用户说:审核这段内容的一致性']" ) # 可选约束 preferred_category: Optional[str] = None preferred_tags: Optional[List[str]] = None trigger_type: SkillTriggerType = SkillTriggerType.AUTO # 生成选项 include_scripts: bool = False # 是否生成脚本 include_references: bool = False # 是否生成参考文档模板 include_assets: bool = False # 是否生成资产模板 temperature: float = Field(0.7, ge=0, le=1) class SkillAnalysis(BaseModel): """Step 1: 需求分析结果""" skill_type: str # 如 "对话创作", "内容审核", "文件处理" core_functionality: str intended_users: List[str] key_features: List[str] suggested_complexity: str # "simple", "medium", "complex" class SkillPlanning(BaseModel): """Step 2: 资源规划结果""" needs_scripts: bool suggested_scripts: List[Dict[str, str]] # [{filename, purpose}] needs_references: bool suggested_references: List[Dict[str, str]] needs_assets: bool suggested_assets: List[Dict[str, str]] # Degree of freedom 建议 suggested_freedom: str # "high", "medium", "low" class SkillGenerationResponse(BaseModel): """ AI 生成 Skill 的完整响应 包含完整的 skill-creator 流程结果 """ # Step 1: 分析结果 analysis: SkillAnalysis # Step 2: 规划结果 planning: SkillPlanning # Step 3: 完整的 Skill 结构 skill_structure: SkillStructure # 元数据建议 suggested_metadata: SkillMetadata # 实现建议 implementation_steps: List[str] best_practices: List[str] # 验证结果 validation_passed: bool validation_warnings: List[str] = Field(default_factory=list) validation_errors: List[str] = Field(default_factory=list) # ============================================================================ # Skill 调整/优化请求 # ============================================================================ class SkillRefinementRequest(BaseModel): """对已生成的 Skill 进行调整""" skill_id: str current_content: str # 调整需求 refinement_type: str # "optimize", "extend", "fix", "adapt" refinement_description: str # 上下文 user_feedback: Optional[str] = None use_case_update: Optional[str] = None temperature: float = Field(0.7, ge=0, le=1) class SkillRefinementResponse(BaseModel): """调整后的 Skill""" updated_structure: SkillStructure changes_made: List[str] improvement_suggestions: List[str] # ============================================================================ # Skill 选择和路由(LLM 与 Skills 结合) # ============================================================================ class SkillSelectionCriteria(BaseModel): """Skill 选择条件""" # 用户意图 user_intent: str # 上下文信息 context: Dict[str, Any] = Field(default_factory=dict) # 约束条件 required_category: Optional[str] = None required_tags: Optional[List[str]] = None exclude_skills: List[str] = Field(default_factory=list) # 选择模式 selection_mode: str = "auto" # "auto", "fixed", "hybrid" class SkillSelectionResult(BaseModel): """Skill 选择结果""" selected_skills: List[SkillMetadata] selection_reason: str confidence_scores: Dict[str, float] alternative_skills: List[SkillMetadata] = Field(default_factory=list) class SkillExecutionContext(BaseModel): """Skill 执行上下文""" skill_id: str skill_metadata: SkillMetadata execution_mode: str # "integrated", "standalone", "chained" # 上下文数据 user_input: str context_data: Dict[str, Any] = Field(default_factory=dict) # 参考文件(已加载) loaded_references: Dict[str, str] = Field(default_factory=dict) # 执行参数 temperature: float = 0.7 max_tokens: Optional[int] = None class SkillExecutionResponse(BaseModel): """Skill 执行结果""" skill_id: str execution_success: bool result: str # 使用的信息 references_used: List[str] scripts_executed: List[str] # 反馈信息 execution_time_ms: int tokens_used: Dict[str, int] # 建议 improvement_suggestions: List[str] = Field(default_factory=list) # ============================================================================ # Agent 工作流中的 Skill 配置 # ============================================================================ class AgentWorkflowStep(BaseModel): """Agent 工作流步骤""" step_name: str step_number: int # Skill 配置 skill_id: Optional[str] = None # None 表示不使用 Skill skill_mode: str = "required" # "required", "optional", "conditional" # 条件(用于 conditional 模式) condition: Optional[str] = None # 回退行为 fallback_skill_id: Optional[str] = None fallback_behavior: Optional[str] = None class AgentWorkflowConfig(BaseModel): """Agent 工作流配置(定义哪些步骤使用哪些 Skills)""" agent_id: str agent_name: str # 工作流步骤 steps: List[AgentWorkflowStep] # 全局配置 default_temperature: float = 0.7 allow_skill_substitution: bool = False require_all_skills: bool = True # ============================================================================ # 批量 Skill 操作 # ============================================================================ class BatchSkillOperation(BaseModel): """批量 Skill 操作""" operation: str # "validate", "package", "deploy" skill_ids: List[str] options: Dict[str, Any] = Field(default_factory=dict) class BatchSkillOperationResponse(BaseModel): """批量操作结果""" operation: str total_skills: int successful_skills: List[str] failed_skills: List[Dict[str, str]] summary: Dict[str, Any]