""" 技能基类 所有技能插件的基类 """ from abc import ABC, abstractmethod from typing import Dict, Any, Optional from pydantic import BaseModel, Field class SkillParameter(BaseModel): """技能参数定义""" name: str = Field(..., description="参数名称") type: str = Field(..., description="参数类型") description: str = Field(..., description="参数描述") required: bool = Field(True, description="是否必需") default: Optional[Any] = Field(None, description="默认值") class BaseSkill(ABC): """技能基类""" def __init__(self): """初始化技能""" self.name: str = "" self.description: str = "" self.parameters: list[SkillParameter] = [] self.enabled: bool = True @abstractmethod async def execute(self, **kwargs) -> Dict[str, Any]: """ 执行技能 Args: **kwargs: 技能参数 Returns: 执行结果字典 """ pass def validate_params(self, **kwargs) -> tuple[bool, Optional[str]]: """ 验证参数 Args: **kwargs: 参数字典 Returns: (是否有效, 错误信息) """ for param in self.parameters: if param.required and param.name not in kwargs: return False, f"缺少必需参数: {param.name}" return True, None def get_info(self) -> Dict[str, Any]: """ 获取技能信息 Returns: 技能信息字典 """ return { "name": self.name, "description": self.description, "parameters": [p.dict() for p in self.parameters], "enabled": self.enabled } def enable(self): """启用技能""" self.enabled = True def disable(self): """禁用技能""" self.enabled = False