79 lines
1.9 KiB
Python
79 lines
1.9 KiB
Python
"""
|
|
技能基类
|
|
所有技能插件的基类
|
|
"""
|
|
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
|