36 lines
1.2 KiB
Python
36 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
from typing import Any
|
|
|
|
from app.agents.skills.registry import SkillRegistry
|
|
from app.agents.tools.types import RegisteredTool, ToolResult
|
|
|
|
|
|
def create_skill_tool() -> RegisteredTool:
|
|
"""use_skill 도구를 생성하여 반환."""
|
|
|
|
async def execute(args: dict[str, Any]) -> ToolResult:
|
|
skill_name: str = args["skill_name"]
|
|
skill = SkillRegistry.get(skill_name)
|
|
if skill is None:
|
|
available = SkillRegistry.list_skills()
|
|
names = [s.name for s in available]
|
|
return ToolResult(
|
|
data=(
|
|
f"스킬 '{skill_name}'을(를) 찾을 수 없습니다. "
|
|
f"사용 가능한 스킬: {', '.join(names) or '없음'}"
|
|
),
|
|
)
|
|
return ToolResult(data=skill.instructions)
|
|
|
|
return RegisteredTool(
|
|
name="use_skill",
|
|
description=(
|
|
"스킬을 로드하여 전문 분석 워크플로우를 실행합니다. "
|
|
"사용 가능한 스킬 목록에서 선택하세요."
|
|
),
|
|
compact_description="스킬 실행",
|
|
execute=execute,
|
|
concurrency_safe=True,
|
|
)
|