Средний

Набор навыков для AI-агентов: разбор репозитория skills

Алексей Кузнецов
Алексей Кузнецов
Системный администратор29 октября 2026 г.16 мин чтения

Обзор коллекции системных инструкций и навыков для AI-агентов от Matt Pocock. Как использовать готовые паттерны для повышения точности работы LLM.

Набор навыков для AI-агентов: разбор репозитория skills

Обзор коллекции системных инструкций и навыков для AI-агентов от Matt Pocock. Как использовать готовые паттерны для повышения точности работы LLM.

Что такое навыки для AI-агентов

Что такое навыки для AI-агентов

Когда мы говорим об использовании больших языковых моделей (LLM) в рабочих процессах, часто сталкиваемся с проблемой «размытых» инструкций. Вы даёте модели задачу, она её выполняет, но делает это нестабильно: то слишком подробно, то слишком кратко, то вообще уходит в пространные рассуждения вместо конкретных действий. В системном администрировании мы называем это отсутствием предсказуемости.

В контексте AI-агентов «навыки» (skills) — это не просто набор подсказок, а структурированные, атомарные инструкции, которые превращают общую модель в специализированного исполнителя. Вместо того чтобы каждый раз пытаться объяснить агенту, как работать с определённым инструментом, мы передаём ему готовый паттерн поведения.

Концепция .agents directory

Мэтт Покок в своём репозитории skills предлагает подход, который мне очень близок: хранить логику управления в виде структурированных файлов. Идея заключается в использовании директории .agents, где каждый файл представляет собой отдельный навык или системную роль.

Если провести аналогию с инфраструктурой, то это похоже на использование Ansible roles или Docker Compose файлов. Вместо того чтобы писать один гигантский скрипт, который делает всё сразу, мы разбиваем функционал на маленькие, тестируемые и переиспользуемые модули.

Структура проекта может выглядеть следующим образом:

text
project-root/
├── .agents/
│   ├── code-reviewer.md    # Навык проверки кода на ошибки
│   ├── documentation.md    # Навык написания технической документации
│   └── sql-optimizer.md    # Навык оптимизации запросов к БД
├── src/
└── ...

Когда агент обращается к задаче, он не просто «думает», а подгружает соответствующий контекст из этой директории. Это позволяет добиться того, что модель будет использовать конкретный синтаксис, соблюдать определённый тон и, что самое важное, придерживаться чёткого алгоритма действий.

Зачем инженеру готовые инструкции

С практической точки зрения, использование готовых паттернов решает три основные проблемы: когнитивную нагрузку, вариативность ответов и сложность поддержки.

Во-первых, это экономит время. Вам не нужно каждый раз заново формулировать правила оформления Markdown или требования к именованию переменных в Python. Вы просто подключаете нужный навык.

Во-вторых, это обеспечивает предсказуемость. Если вы настроили навык refactor-expert.md с чёткими правилами, вы будете получать примерно одинаковый результат на разных типах кода. Это критически важно, когда вы встраиваете AI в CI/CD пайплайн.

В-третьих, это упрощает масштабирование. Если вы поняли, что агент слишком часто ошибается в работе с конфигурациями Nginx, вы не правите промпт во всём приложении. Вы идёте в файл .agents/nginx-config-expert.md, вносите правки в одну секцию, и этот навык обновляется для всех агентов, использующих его.

Для автоматизации процесса подгрузки таких инструкций в программном коде (например, на Python) это может выглядеть так:

python
import os

def load_agent_skill(skill_name: str) -> str:
    """
    Загружает системную инструкцию из директории .agents.
    """
    path = f".agents/{skill_name}.md"
    
    if not os.path.exists(path):
        raise FileNotFoundError(f"Навык {skill_name} не найден в директории .agents")
        
    with open(path, 'r', encoding='utf-8') as f:
        return f.read()

# Пример использования: подгружаем контекст для ревьюера
system_prompt = load_agent_skill("code-reviewer")

Такой подход превращает работу с LLM из «гадания на кофейной гуще» в инженерную дисциплину, где каждый промпт — это конфигурационный файл, который можно версионировать, тестировать и деплоить.

Структура и применение навыков

Типология доступных навыков

Если внимательно изучить репозиторий skills, становится понятно, что Мэтт Покок не просто собрал набор случайных инструкций, а выстроил систему паттернов. С инженерной точки зрения это похоже на библиотеку стандартных модулей: вместо того чтобы каждый раз объяснять модели, как себя вести, вы подключаете готовый «навык», который задаёт конкретную логику поведения.

Все навыки в коллекции можно разделить на три функциональных уровня:

  1. Когнитивные паттерны (Reasoning). Это инструкции, которые меняют способ «мышления» модели. Они заставляют LLM не просто выдавать ответ, а использовать цепочку рассуждений (Chain of Thought), проверять свои гипотезы или работать в режиме критического анализа. Это критически важно, когда вы просите агента провести аудит кода или найти ошибку в конфигурации Nginx.
  2. Форматирующие навыки (Output Control). Инструменты для обеспечения предсказуемости вывода. Если вашему приложению нужен строго валидный JSON или специфический формат логов для отправки в Loki, вы используете эти инструкции. Это избавляет от необходимости писать сложные регулярные выражения на стороне бэкенда для парсинга «болтливых» ответов нейросети.
  3. Ролевые модели (Persona & Context). Это не просто «представь, что ты системный администратор». Это глубокая настройка контекста, которая определяет не только тон общения, но и границы компетенций. Например, навык может ограничивать модель только использованием определённых библиотек или запрещать предлагать решения, которые не подходят под текущую архитектуру.

С практической точки зрения, использование таких паттернов повышает детерминизм системы. Чем меньше у модели свободы в выборе формата ответа, тем выше надёжность автоматизации.

Интеграция в рабочий процесс разработчика

Интегрировать эти навыки в свой пайплайн можно разными способами, в зависимости от того, строите ли вы автономного агента или используете LLM как помощника в IDE.

Если вы работаете с API (например, через OpenAI SDK или LangChain), внедрение навыка сводится к динамической подстановке системного промпта. Я рекомендую не смешивать общие инструкции проекта с конкретными навыками. Лучше держать их раздельно, чтобы при необходимости можно было быстро заменить один паттерн на другой.

Пример того, как может выглядеть логика формирования системного сообщения в коде на Python:

python
def generate_agent_prompt(user_task, skill_content):
    # Базовая системная инструкция (Core Identity)
    base_system_prompt = "You are a specialized DevOps assistant."
    
    # Объединяем базу, выбранный навык и конкретную задачу
    # Это обеспечивает предсказуемость поведения
    full_prompt = f"{base_system_prompt}\n\n{skill_content}\n\nTask: {user_task}"
    return full_prompt

# Допустим, мы берем навык 'json_only' из репозитория
skill_json = "Always respond in valid JSON format. Do not include any conversational text."
task = "Analyze the following docker-compose file for security issues."

prompt = generate_agent_prompt(task, skill_json)
# Далее prompt отправляется в API

Для тех, кто использует инструменты вроде Cursor или Windsurf, интеграция происходит на уровне .cursorrules или аналогичных конфигурационных файлов. Вы можете создать локальную директорию с выжимками из репозитория skills и подключать их к конкретным проектам.

Например, если вы работаете над проектом, где критически важна чистота кода и использование только определённых стандартов, ваш файл конфигурации может выглядеть так:

markdown
# .cursorrules

# При работе с Python-кодом всегда применяй паттерн 'type_hinting_expert'
# из коллекции skills.

# Всегда проверяй конфигурации на соответствие стандартам безопасности 
# (используй паттерн 'security_auditor').

# Запрещено предлагать решения, требующие установки сторонних зависимостей, 
# если они не указаны в pyproject.toml.

Такой подход превращает LLM из «умного чат-бота» в предсказуемый инструмент, который работает в рамках заданных вами инженерных ограничений. Это и есть переход от экспериментов к промышленному использованию AI-агентов.

Практическое использование репозитория

Адаптация инструкций под свои задачи

Просто скопировать системный промпт из репозитория skills и вставить его в ChatGPT — это путь к непредсказуемому результату. Инструкции Мэтта Покока — это не готовые решения «под ключ», а скорее набор качественных модулей. Чтобы они работали в вашей домашней лаборатории или рабочем проекте, их нужно интегрировать в существующий контекст.

С практической точки зрения, я рекомендую использовать модульный подход. Вместо того чтобы пытаться запихнуть все навыки в один огромный промпт, разделите их по ролям. Если вы настраиваете агента для помощи в администрировании Linux, вам не нужен навык написания стихов, но критически важен навык работы с форматами данных или соблюдения структуры кода.

Предположим, вы создаёте агента через API для автоматизации проверки конфигураций Nginx. Вам нужно объединить общую системную инструкцию с конкретным навыком форматирования. Пример того, как может выглядеть структура вашего системного сообщения (system prompt) в JSON-запросе:

json
{
  "role": "system",
  "content": "Ты — эксперт по конфигурации веб-серверов. Твоя задача — проверять файлы nginx.conf на наличие ошибок. 
  
  Используй следующий навык для вывода результата:
  [Вставьте сюда адаптированный навык 'Structured Output' из репозитория skills, 
  настроив его на возврат только JSON]"
}

При адаптации всегда обращайте внимание на то, как навык определяет формат вывода. Если репозиторий предлагает использовать Markdown, а ваша автоматизация ожидает чистый JSON для парсинга через jq, перепишите секцию Output Format. Это обеспечит ту самую предсказуемость, которая необходима, если вы планируете встраивать ответы модели в пайплайны автоматизации.

Оценка предсказуемости ответов модели

Когда вы внедряете новые инструкции, важно понимать: стало ли лучше или модель просто начала «галлюцинировать» более уверенным тоном. В системном администрировании цена ошибки высока, поэтому проверка навыков должна быть системной.

Я использую метод сравнительного тестирования. Возьмите три типичных сценария (например, запрос на написание Docker Compose файла, запрос на отладку ошибки в systemd и запрос на оптимизацию запроса PostgreSQL) и прогоните их через модель с «голыми» инструкциями и с добавленным навыком из skills.

Чтобы оценка не была субъективной, введите критерии, которые можно измерить:

  1. Соблюдение формата: Если навык требует JSON, сколько раз из десяти модель выдала текст с лишними пояснениями вроде «Вот ваш конфиг:»?
  2. Полнота контекста: Не потеряла ли модель важные параметры (например, пути к томам в Docker), пытаясь следовать жесткому шаблону вывода?
  3. Лаконичность: Не стала ли модель слишком многословной, пытаясь оправдать каждый шаг согласно новой инструкции?

Если вы автоматизируете проверку, можно написать простой скрипт на Python для оценки валидности ответов. Например, если навык предписывает строгий формат, проверка может выглядеть так:

python
import json

def validate_agent_response(response_text):
    try:
        # Проверяем, является ли ответ валидным JSON, как того требует навык
        data = json.loads(response_text)
        # Проверяем наличие обязательных полей, определенных в инструкции
        required_fields = ["status", "config_fix", "explanation"]
        return all(field in data for field in required_fields)
    except json.JSONDecodeError:
        return False

# Пример использования
raw_output = '{"status": "error", "config_fix": "server { listen 80; }", "explanation": "Missing listen directive"}'
if validate_agent_response(raw_output):
    print("Ответ соответствует навыку")
else:
    print("Ошибка: модель нарушила структуру вывода")

Если процент ошибок превышает 5–10 %, значит, навык конфликтует с базовыми инструкциями модели или слишком перегружен. В этом случае нужно упростить инструкцию, убрав из неё избыточные требования, которые не влияют на конечный результат.

Ограничения и нюансы подхода

Ограничения и нюансы подхода

Когда мы работаем с готовыми наборами инструкций, легко попасть в ловушку ощущения, что мы получили «волшебную таблетку». На практике любой набор навыков — это лишь набор инструкций, которые должны интерпретироваться конкретным движком. Если вы планируете внедрять паттерны Мэтта Покока в свои проекты, важно учитывать два критических фактора: архитектурную зависимость и риск потери контроля над логикой агента.

Зависимость от конкретной LLM

Главная проблема любого промпт-инжиниринга заключается в том, что инструкции не являются универсальным кодом. Если в программировании стандарт POSIX обеспечивает предсказуемость поведения программ в разных дистрибутивах Linux, то в мире LLM такого стандарта нет.

Инструкции из репозитория skills могут идеально работать с GPT-4o, но вызывать «галлюцинации» или игнорирование правил в моделях семейства Claude или локальных Llama через Ollama. Это происходит из-за разницы в механизмах внимания (attention mechanism) и способах обучения инструкциям (instruction tuning).

С практической точки зрения это означает, что вам придётся проводить тестирование на целевой модели. Например, если вы используете системный промпт для управления форматом вывода JSON, поведение может отличаться:

markdown
# Пример системной инструкции для контроля формата

Вы — агент-валидатор. Ваша задача — возвращать ответ строго в формате JSON.
Не добавляйте никаких вводных фраз или пояснений.

Формат:
{
  "status": "success" | "error",
  "data": object | null,
  "message": string
}

На GPT-4 этот конфиг отработает стабильно. На более слабой модели (например, Llama 3 8B) агент может решить «помочь» вам и добавить текст: «Вот ваш JSON: ...». В итоге ваш парсер упадет с ошибкой, потому что ожидал чистый поток данных, а получил человеческий текст.

Риски слепого копирования промптов

Второй важный момент — предсказуемость. Когда мы берем готовый паттерн, мы заимствуем не только логику, но и скрытые предположения автора. Слепое копирование инструкций без понимания того, как именно они структурированы, превращает вашу систему в «черный ящик».

Если вы просто вставляете блок навыков в системный промпт своего агента, вы рискуете столкнуться с конфликтом инструкций. Представьте ситуацию: у вас уже есть базовый промпт, задающий роль агента, и вы добавляете к нему новый навык из репозитория.

Если инструкции противоречат друг другу, модель начинает «метаться». Это похоже на ситуацию, когда в systemd unit-файле вы одновременно прописываете разные параметры ExecStart — результат будет непредсказуемым.

Чтобы минимизировать риски, я рекомендую придерживаться системного подхода:

  1. Модульность. Не вливайте всё в один огромный промпт. Разделяйте базовую роль, инструменты (tools) и специфические навыки.
  2. Тестирование граничных условий. Если вы добавили навык «анализ логов», попробуйте скормить агенту заведомо битый или пустой файл. Посмотрите, как он отреагирует.
  3. Версионирование. Относитесь к промптам как к коду. Если вы изменили набор навыков, зафиксируйте это в Git.

Если вы используете инструменты вроде LangChain или Haystack, лучше оформлять навыки как отдельные компоненты, которые подключаются к агенту только тогда, когда это действительно необходимо. Это сохранит контекстное окно чистым и снизит вероятность того, что агент начнет игнорировать важные системные правила из-за избыточного объема инструкций.

Заключение

Практические выводы

Подводя итог, стоит сказать, что репозиторий Мэтта Покока — это не просто набор текстовых заготовок, а структурированная библиотека паттернов. Если пытаться скармливать модели разрозненные инструкции, вы быстро столкнётесь с проблемой деградации логики: агент начнёт путаться в приоритетах или игнорировать часть условий.

С практической точки зрения, использование готовых навыков из skills даёт две вещи: предсказуемость и экономию токенов. Вместо того чтобы каждый раз описывать, как агенту нужно вести себя в режиме отладки или как структурировать ответ, вы подключаете проверенный блок.

Если вы строите сложную систему, я рекомендую не копировать инструкции целиком, а адаптировать их под свой контекст. Например, если вам нужен агент для работы с конфигурациями Nginx, возьмите паттерн для работы с кодом, но уточните специфику обработки директив.

Как внедрить навыки в свой проект

Процесс интеграции этих паттернов зависит от того, как вы управляете системными промптами. Если вы используете LangChain или аналогичные фреймворки, лучше всего вынести навыки в отдельные файлы и загружать их динамически.

С точки зрения архитектуры, я бы советовал организовать хранение навыков так же, как мы храним конфигурационные файлы в Ansible. Создайте директорию prompts/skills/ и храните каждый навык в отдельном .md или .txt файле.

Пример того, как может выглядеть структура вашего проекта:

text
my-ai-agent/
├── main.py
├── prompts/
│   ├── system_core.txt       # Базовая личность агента
│   └── skills/               # Библиотека навыков
│       ├── code_reviewer.txt
│       ├── json_formatter.txt
│       └── step_by_step.txt

При сборке финального промпта вы просто конкатенируете базовую инструкцию с нужным навыком. Это делает конфигурацию прозрачной: вы всегда видите, какой именно «модуль» был подключен к текущей сессии.

Когда стоит остановиться

Важно понимать, что избыточность — враг точности. Если вы попытаетесь загрузить в контекст агента сразу десять навыков из репозитория, вы получите эффект «размытия внимания». Модель начнёт уделять меньше ресурсов каждой отдельной инструкции, и предсказуемость, к которой мы стремимся, исчезнет.

Соблюдайте правило минимальной достаточности:

  1. Определите конкретную задачу (например, «валидация JSON»).
  2. Выберите один наиболее подходящий навык из коллекции.
  3. Протестируйте его на граничных случаях.
  4. Только если задача не решается, добавляйте второй вспомогательный навык.

Если агент начинает галлюцинировать или игнорировать формат вывода, первым делом проверяйте не сложность модели, а чистоту набора инструкций. Часто удаление одного лишнего «совета» в системном промпте работает лучше, чем переход на более дорогую версию LLM.

FAQ

Можно ли использовать эти навыки в Claude?

Да, эти инструкции можно и нужно использовать в Claude. Хотя Matt Pocock изначально ориентировался на экосистему OpenAI, принципы системного промптинга универсальны. Claude, особенно модели семейства 3.5 Sonnet, отлично справляется со сложными структурными задачами.

Единственный нюанс — формат передачи инструкций. Если вы работаете через веб-интерфейс, просто добавьте выбранный навык в начало вашего чата. Если используете API, лучше всего передавать эти паттерны через роль system. С практической точки зрения, Claude даже лучше понимает XML-теги, поэтому вы можете обернуть инструкции из репозитория в теги для лучшей изоляции:

xml
<skill_instruction>
  Здесь текст инструкции из репозитория skills
</skill_instruction>

Нужно ли дорабатывать инструкции под себя?

Готовые паттерны — это не закон, а качественный фундамент. Если вы попытаетесь использовать их «как есть» без учёта контекста вашей задачи, предсказуемость результата может снизиться.

Я всегда рекомендую проводить небольшую адаптацию по трем направлениям:

  1. Стек технологий. Если навык написан для TypeScript, а вы работаете с Go, замените примеры и терминологию.
  2. Ограничения среды. Добавьте специфические правила вашего проекта (например, запрет на использование определённых библиотек).
  3. Стиль вывода. Если вам нужен сухой технический ответ без пояснений, это стоит прописать явно.

Предсказуемость конфигурации агента напрямую зависит от того, насколько точно его системная инструкция описывает границы его компетенций.

Как проверить эффективность навыка?

Проверка навыка — это не разовый запуск, а процесс, близкий к нагрузочному тестированию. Недостаточно просто спросить агента о чем-то сложном и получить правильный ответ.

Чтобы понять, работает ли паттерн, используйте метод сравнительного тестирования:

  1. Сформулируйте набор из 5–10 контрольных вопросов (бенчмарков), где ответ должен быть строго структурирован.
  2. Прогоните их через «голую» модель без навыка.
  3. Прогоните через модель с применённым навыком.
  4. Сравните результаты по критериям: точность, соблюдение формата и отсутствие лишней «воды».

Если вы автоматизируете этот процесс, можно написать простой скрипт на Python, который будет парсить ответы и считать процент соответствия ожидаемому JSON-схеме или формату.

Подходит ли это для автономного кодинга?

Для автономных агентов, которые должны самостоятельно править код, эти навыки критически важны, но их недостаточно. В автономном режиме агент сталкивается с проблемой «галлюцинаций» при работе с файловой системой или зависимостями.

Чтобы превратить набор инструкций в рабочий инструмент для кодинга, их нужно дополнить навыками взаимодействия с окружением. Например, агент должен не просто «писать код», а следовать циклу:

  1. Анализ текущего состояния (чтение файлов).
  2. Планирование изменений.
  3. Выполнение (запись файла).
  4. Проверка (запуск тестов или линтера).

Если вы строите систему на базе репозитория skills, обязательно добавьте инструкции по обработке ошибок компиляции. Агент должен знать, что если команда npm test вернула ошибку, её вывод нужно проанализировать и использовать для корректировки кода, а не просто игнорировать.

Часто задаваемые вопросы

Как внедрить эти навыки в существующий проект

С практической точки зрения вам не нужно переписывать системный промпт всей модели. Достаточно организовать хранение инструкций в виде отдельных файлов, как это сделано в репозитории, и подгружать нужный файл в контекст при выполнении конкретной задачи. Если вы используете фреймворки вроде LangChain или CrewAI, вы можете настроить автоматическое чтение содержимого директории .agents и передавать эти инструкции как специализированные инструменты для агента.

В чём преимущество атомарных инструкций перед одним длинным промптом

Когда мы пытаемся впихнуть все правила поведения в один системный промпт, мы сталкиваемся с проблемой деградации внимания модели. Чем больше инструкций в одном блоке, тем выше вероятность, что агент проигнорирует часть из них или начнёт путать контексты. Разделение навыков на отдельные файлы обеспечивает предсказуемость: агент получает только ту информацию, которая необходима для текущего действия, что снижает уровень «галлюцинаций» и повышает точность выполнения.

Можно ли комбинировать несколько навыков для одной задачи

Да, это вполне рабочий сценарий, который напоминает сборку контейнера из нескольких слоев. Вы можете подать агенту на вход сразу несколько файлов из директории .agents, например, code-reviewer.md и sql-optimizer.md, если задача подразумевает проверку сложного запроса к базе данных. Главное — следить за тем, чтобы инструкции не противоречили друг другу, иначе модель может войти в состояние логического конфликта.

Нужно ли переписывать навыки под конкретную модель

Хотя паттерны Мэтта Покока универсальны, каждая модель имеет свои особенности обработки инструкций. Если вы переходите с GPT-4 на более компактную модель вроде Claude Haiku или Llama 3, вам может потребоваться упростить синтаксис или добавить больше явных указаний по формату вывода. Я рекомендую тестировать каждый навык отдельно, чтобы убедиться, что модель понимает границы ответственности, описанные в инструкции.

Поделиться:TelegramX / TwitterVK