초지능 로봇 집사(에이전트)를 조립한다고 상상해 보세요. 이 로봇에는 도라에몽의 4D 주머니처럼 작업을 완료하는 데 도움이 되는 다양한 도구가 필요합니다. 이 기사에서는 AI 집사를 더욱 유능하고 효율적으로 만들기 위한 강력한 도구를 만드는 방법을 설명합니다.
셀프 서비스 커피 머신을 사용해 보세요.
이것은 일반적인 동기식 도구 패턴입니다. 에이전트는 도구를 호출하고 즉각적인 결과를 기다립니다. 빠르고 간단합니다.
class WeatherTool(BaseTool): """Weather Query Tool - Synchronous Mode""" async def execute(self, city: str) -> dict: # Simple and direct like pressing a coffee machine button weather_data = await self.weather_api.get_current(city) return { "status": "success", "data": { "temperature": weather_data.temp, "humidity": weather_data.humidity, "description": weather_data.desc } }
사용 사례:
배달 앱을 통해 음식을 주문한다고 상상해 보세요.
이것이 비동기식 도구의 작동 방식으로, 처리 시간이 오래 걸리는 작업에 적합합니다.
class DocumentAnalysisTool(BaseTool): """Document Analysis Tool - Asynchronous Mode""" async def start_task(self, file_path: str) -> str: # Like placing a food delivery order, returns a task ID task_id = str(uuid.uuid4()) await self.task_queue.put({ "task_id": task_id, "file_path": file_path, "status": "processing" }) return task_id async def get_status(self, task_id: str) -> dict: # Like checking food delivery status task = await self.task_store.get(task_id) return { "task_id": task_id, "status": task["status"], "progress": task.get("progress", 0), "result": task.get("result", None) }
사용 사례:
모든 전기 제품이 통합 소켓 표준을 따르는 것처럼 도구 인터페이스에도 표준화가 필요합니다. 이렇게 하면 모든 도구가 에이전트와 완벽하게 작동할 수 있습니다.
제품 매뉴얼을 작성한다고 상상해 보세요. 사용자에게 다음 사항을 명확하게 알려야 합니다.
from pydantic import BaseModel, Field class ToolSchema(BaseModel): """Tool Manual Template""" name: str = Field(..., description="Tool name") description: str = Field(..., description="Tool purpose description") parameters: dict = Field(..., description="Required parameters") required: List[str] = Field(default_factory=list, description="Required parameters") class Config: schema_extra = { "example": { "name": "Weather Query", "description": "Query weather information for specified city", "parameters": { "type": "object", "properties": { "city": { "type": "string", "description": "City name" } } }, "required": ["city"] } }
모든 전기 제품에 전원 스위치와 전원 인터페이스가 필요한 것처럼 모든 도구도 기본 사양을 따라야 합니다.
class BaseTool(ABC): """Base template for all tools""" @abstractmethod def get_schema(self) -> ToolSchema: """Tool manual""" pass def validate_input(self, params: Dict) -> Dict: """Parameter check, like a fuse in electrical appliances""" return ToolSchema(**params).dict() @abstractmethod async def execute(self, **kwargs) -> Dict: """Actual functionality execution""" pass
가전제품이 물, 충격, 과부하로부터 보호해야 하는 것처럼 도구에도 포괄적인 보호 메커니즘이 필요합니다.
특급 배송을 처리한다고 상상해 보세요.
class WeatherTool(BaseTool): """Weather Query Tool - Synchronous Mode""" async def execute(self, city: str) -> dict: # Simple and direct like pressing a coffee machine button weather_data = await self.weather_api.get_current(city) return { "status": "success", "data": { "temperature": weather_data.temp, "humidity": weather_data.humidity, "description": weather_data.desc } }
첫 번째 시도가 실패할 때 자동으로 두 번째 배송을 준비하는 것과 같습니다.
class DocumentAnalysisTool(BaseTool): """Document Analysis Tool - Asynchronous Mode""" async def start_task(self, file_path: str) -> str: # Like placing a food delivery order, returns a task ID task_id = str(uuid.uuid4()) await self.task_queue.put({ "task_id": task_id, "file_path": file_path, "status": "processing" }) return task_id async def get_status(self, task_id: str) -> dict: # Like checking food delivery status task = await self.task_store.get(task_id) return { "task_id": task_id, "status": task["status"], "progress": task.get("progress", 0), "result": task.get("result", None) }
유명 상품을 눈에 띄는 위치에 배치하는 편의점처럼:
from pydantic import BaseModel, Field class ToolSchema(BaseModel): """Tool Manual Template""" name: str = Field(..., description="Tool name") description: str = Field(..., description="Tool purpose description") parameters: dict = Field(..., description="Required parameters") required: List[str] = Field(default_factory=list, description="Required parameters") class Config: schema_extra = { "example": { "name": "Weather Query", "description": "Query weather information for specified city", "parameters": { "type": "object", "properties": { "city": { "type": "string", "description": "City name" } } }, "required": ["city"] } }
병원 예약제처럼 동시접속 횟수 조절:
class BaseTool(ABC): """Base template for all tools""" @abstractmethod def get_schema(self) -> ToolSchema: """Tool manual""" pass def validate_input(self, params: Dict) -> Dict: """Parameter check, like a fuse in electrical appliances""" return ToolSchema(**params).dict() @abstractmethod async def execute(self, **kwargs) -> Dict: """Actual functionality execution""" pass
신제품 출시 전 품질검사처럼:
class ToolError(Exception): """Tool error base class""" def __init__(self, message: str, error_code: str, retry_after: Optional[int] = None): self.message = message self.error_code = error_code self.retry_after = retry_after @error_handler async def execute(self, **kwargs): try: # Execute specific operation result = await self._do_work(**kwargs) return {"status": "success", "data": result} except ValidationError: # Parameter error, like wrong address return {"status": "error", "code": "INVALID_PARAMS"} except RateLimitError as e: # Need rate limiting, like courier too busy return { "status": "error", "code": "RATE_LIMIT", "retry_after": e.retry_after }
자세하고 명확한 제품 설명서를 작성하는 것처럼:
class RetryableTool(BaseTool): @retry( stop=stop_after_attempt(3), # Maximum 3 retries wait=wait_exponential(multiplier=1, min=4, max=10) # Increasing wait time ) async def execute_with_retry(self, **kwargs): return await self.execute(**kwargs)
좋은 에이전트 도구를 개발하는 것은 완벽한 도구 상자를 만드는 것과 같습니다.
기억하세요: 좋은 도구는 요원의 효율성을 두 배로 높일 수 있지만, 나쁜 도구는 모든 면에서 요원의 활동을 제한합니다.
위 내용은 에이전트 도구 개발 가이드: 설계부터 최적화까지의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!