Из чего состоит харнесс? Часть 2

В прошлом посте разобрали, что такое харнесс и как управлять контекстом. Остались скиллы, инструменты и оркестрация. 2. Скиллы

Это какая-нибудь регулярная процедура, которую агент должен регулярно выполнять.

Например, вы любите готовить и хотите получать по запросу /new_recipe новый рецепт под те ингредиенты, которые есть у вас в холодильнике. Описываете эту задачу:

взять список ингредиентов -> посмотреть на уже отданные рецепты -> сходить в интернет -> найти новый рецепт -> проверить его на осмысленность -> отдать пользователю.

Обсуждаете ее с LLM и просите упаковать в скилл.

В результате вы сможете каждый раз получать новый рецепт блюда конкретно под ваш запрос.

Пример абстрактный, но суть, я думаю, понятна. Основная идея - любую задачу можно упаковать в скилл.

Главный смысл скилла как раз в контексте.

Он лежит снаружи и не занимает места в окне, пока его не вызвали. Поэтому скиллов можно держать хоть сотню, и на бюджет внимания это никак не давит.

3. Инструменты

Другими словами - это руки агента.

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

Claude Code предоставляет инструменты по шести категориям: файловые операции, поиск, выполнение, веб-доступ, анализ кода и запуск субагентов.

Сюда же я бы отнес и MCP-коннекторы, позволяющие получить доступ к сторонним сервисам (Google Sheets, таск-трекеры, мессенджеры и тд).

4. Оркестрация

Когда у вас реализованы первые 3 пункта, вы получаете эффективную рабочую лошадку для решения конкретной задачи. Но настоящая магия начинается, когда вы внедряете оркестрацию.

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

Например, чтобы делать дашборды, строить пайплайны и дизайнить а/б тесты, нужны 3 разных субагента или скилла.

Может возникнуть вопрос: Когда делать скилл, а когда субагент?

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

Субагента - когда задача съест кучу контекста (перелопатить репозиторий, прочитать 50 отчетов), а наверх нужен только вывод.

Вернемся к орекстрации.

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

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

Он не будет это делать в 100 случаях из 100, т.к. промпт - это все-таки рекомендация, а не обязательное условие.

Если вы хотите сделать этот процесс надежнее, то придется настраивать workflow (например, в n8n) с обязательными триггерами.

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

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

Хуки.

Это код, который выполняется на событие, например перед вызовом инструмента, после записи файла или в начале сессии. Хук просто срабатывает.

Цепочки внутри скилла.

Один скилл в конце своей работы сам вызывает следующий. У меня так собран пайплайн для постов.

Команда написания черновика в конце сама дергает факт-чекинг, потом ревью, потом редактуру.

Последовательность прописана заранее, модель ее не выбирает.

Ставьте 🔥, если хотите поподробнее узнать про мой кейс реализации харнесса для задач аналитики. Разберу в отдельном посте. *Ставьте 🧡, если хотите больше постов про работу с ИИ.

А если хотите освежить знания в статистике или метриках, загляните на* https://data-slice.ru/