stock-ai-agent/backend/app/skills/base.py
2026-02-03 10:08:15 +08:00

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