Скилы нужны для того, чтобы научить агента выполнять узкоспециализированные задачи. Это могут быть скилы по написанию текстов, архитектуре кода, использованию конкретных фреймворков, запуску команд, да и вообще о том, как модели общаться с пользователем.
Яркие примеры:
• rtk
• caveman
• React best practices
Со скилами вы могли сталкиваться, если активно используете кодинг-агентов (Codex / Claude Code / Cursor / OpenCode / etc). В базе своей формула очень проста:
Skill = Context + ScriptsС точки зрения реализации, skill - это директория на системе
.agents/skills/
└── Pytest_Skill/
├── SKILL.md
└── scripts/
├── run_pytest.sh
└── list_tests.py
-
Pytest_Skill - название скила-
SKILL.md - текстовая простыня, которую мы загрузим в контекст, когда агент захочет научиться работать с pytest-
scripts/ - директория со скриптами (python / shell), правила использования которых описаны в SKILL.mdЛогично, что агент сам по себе не понимает, что такое скилы. Для этого ему нужна парочка инструментов:
class SkillsToolkit:
def load_skill(skill_id: str) -> str: ...
def run_skill_script(skill_id: str, script: str) -> str: ...
Для того, чтобы модель знала, какие скилы у нее в принципе есть, ей в контекст нужно подложить информацию о них (по аналогии с инструментами):
[{
"name": "Pytest_Skill",
"description": "Use this skill to test your python code",
... // всякие бесполезные поля
}]
| assistant |
| script result |
| run script | // исполнение скрипта из набора скила
| skill content |
| load skill | // загрузка конкретного скила в контекст
| user |
| tools definitions |
| skills metadata | // информация о доступных скилах
| system |
Итого, скилы - это всего лишь:
- метаинформация в контексте
- пара инструментов
- директория на системе
Зато в совокупности это позволяет нам загружать в контекст огромные инструкции для очень специфичных задач по востребованию (а не держать их в контексте всегда).
Проблема тут в том, что после выполнения задачи нам такая большая инструкция в контексте не особо нужна. Да и слишком много скилов тоже регистрировать не стоит (их описание тоже забивает контекст). Но все эти проблемы отлично решаются сабагентами.
Последняя Rocket Science штука здесь - это загрузка нужных инструментов "на лету" из интернета. Что ж, это всего лишь вопрос пары дополнительных инструментов, которые ищут скилы на стоках по API:
class SkillSearchToolkit:
async def search_skills(query: str, limit: int = 10) -> str: ...
async def install_skill(skill_id: str) -> str: ...
Мы просто динамически ищем скилы на https://skills.sh по API, качаем их с гита и ставим в локальную папку. Для этого у нас тоже есть готовый инструмент
autogen.beta.tools.SkillSearchToolkitОчень темное колдунство, не иначе.
#Agents