base.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. """工具基类"""
  2. from abc import ABC, abstractmethod
  3. from typing import Dict, Any, List
  4. from pydantic import BaseModel
  5. class ToolParameter(BaseModel):
  6. """工具参数定义"""
  7. name: str
  8. type: str
  9. description: str
  10. required: bool = True
  11. default: Any = None
  12. class Tool(ABC):
  13. """工具基类"""
  14. def __init__(self, name: str, description: str):
  15. self.name = name
  16. self.description = description
  17. @abstractmethod
  18. def run(self, parameters: Dict[str, Any]) -> str:
  19. """执行工具"""
  20. pass
  21. @abstractmethod
  22. def get_parameters(self) -> List[ToolParameter]:
  23. """获取工具参数定义"""
  24. pass
  25. def validate_parameters(self, parameters: Dict[str, Any]) -> bool:
  26. """验证参数"""
  27. required_params = [p.name for p in self.get_parameters() if p.required]
  28. return all(param in parameters for param in required_params)
  29. def to_dict(self) -> Dict[str, Any]:
  30. """转换为字典格式"""
  31. return {
  32. "name": self.name,
  33. "description": self.description,
  34. "parameters": [param.dict() for param in self.get_parameters()]
  35. }
  36. def __str__(self) -> str:
  37. return f"Tool(name={self.name})"
  38. def __repr__(self) -> str:
  39. return self.__str__()