Когда регулярно поручаешь ИИ одну и ту же работу, довольно-таки утомительно каждый раз объяснять порядок действий. Проще один раз написать инструкцию и объяснить в ней, какой результат нужен, какие сведения учитывать и что проверить перед ответом. Так появляется навык для повторяющейся задачи.
Потом начинаешь им пользоваться и дописывать подробности. Для одной ситуации нужен определённый порядок действий, а для другой приходится описывать отдельные проверки. Иногда нужно сначала задать вопросы, иногда полезнее сравнить варианты. Постепенно в навыке накапливается большой объём инструкций и примеров.
Но по мере того, как инструкций становилось больше, ИИ начинал действовать по-своему, как будто их вообще не было. Приходилось специально указывать, где уже описан порядок работы, и просить ему следовать. После этого ИИ признавал, что нужная инструкция действительно есть.
Я стал думать, как это можно организовать по-другому, и вспомнил, как мы распределяем задачи в компании. Когда в отдел приходит задача, руководитель определяет, кому её поручить. У специалистов свои обязанности, и для выполнения конкретной задачи им нужны соответствующие инструкции и данные. Возникла мысль попробовать так же устроить навык.
Так я начал выделять внутри навыка специалистов. За каждым закреплён свой набор инструкций, а отдельная роль руководителя отвечает за выбор одного или нескольких специалистов под конкретное обращение. В навыке можно хранить много материалов, при этом передавать модели только ту часть, которая требуется сейчас.
Как работать с большим набором инструкций
Допустим, мы делаем навык, который поможет готовиться к поездкам. Для начала будет достаточно, чтобы он составлял маршрут по нашим пожеланиям и распределял прогулки по дням. Позже может выясниться, что в программе слишком мало времени на дорогу и отдых. Добавляем в инструкцию, как это учитывать при планировании.
Для следующей поездки нам потребуется ещё сравнить расходы при разных вариантах проживания. Дополняем навык правилами расчёта стоимости гостиницы, переездов и мероприятий. Если планируем ехать с детьми, добавляем рекомендации по продолжительности прогулок и времени на отдых. Постепенно в одной инструкции собираются подробности и о программе поездки, и о деньгах.
Но обращаться к этому навыку мы будем с разными вопросами. Иногда нужно составить программу на день, а иногда только пересчитать расходы. Если каждый раз читать всю инструкцию, для простого пересчёта ИИ получит ещё и правила планирования прогулок, хотя программа остаётся прежней.
Значит, нам нужно выбирать из накопленных инструкций те, которые относятся к текущему вопросу. Для этого удобно собрать отдельно правила работы с маршрутом и правила расчёта расходов. Каждую такую группу можно закрепить за своим специалистом.
В нашем примере получится два специалиста. Специалисту по маршруту отдадим всё, что касается программы, времени на дорогу и отдыха. Специалисту по бюджету передадим правила расчёта проживания, транспорта и других расходов. Подробные инструкции каждого сохраним в отдельном файле.
В общей инструкции опишем работу руководителя. Ему нужно определить, о чём мы просим, и выбрать подходящего специалиста. Поэтому здесь оставим краткие описания их обязанностей и ссылки на файлы. Для вопроса о расходах понадобятся инструкции по бюджету, а для изменения программы нужны правила работы с маршрутом. Общие ограничения, например запрет что-либо бронировать и оплачивать, сохраняем независимо от выбора.
Допустим, гостиница снизила цену на наш номер. Просим пересчитать расходы на поездку. Руководитель выбирает специалиста по бюджету, и ИИ читает его инструкции. По прежнему расчёту и новой цене он обновляет сумму. Программа поездки осталась прежней, поэтому файл с правилами составления маршрута читать в этот раз не требуется.
Если же мы выбираем гостиницу в другом районе, руководителю могут понадобиться оба специалиста. Сначала нужно разобраться, как изменятся переезды, а затем учесть их стоимость в бюджете. Получается, что один и тот же навык использует разный набор инструкций в зависимости от нашего вопроса.
При этом все материалы остаются в навыке, и мы можем дальше их дополнять. Для текущей задачи читается только нужная часть. Чтобы это работало, среда, в которой запускается навык, должна уметь открывать выбранные файлы по запросу. Если каждый раз модели передаются оба файла целиком, разделение по папкам ничего не изменит в объёме получаемого текста.
Как оформить инструкции в файлах
Выше мы разобрались, какие специалисты нужны для поездок и в каких случаях стоит выбирать каждого из них. Теперь нужно оформить эти правила так, чтобы ИИ мог их использовать. Для этого: во-первых, создадим файл SKILL.md, а во-вторых, подробные инструкции вынесем в отдельную папку specialists. В нашем примере структура будет такой:
examples/trip-skill/ SKILL.md specialists/ budget.md route.md
В SKILL.md необходимо указать, для чего нужен навык, и зафиксировать его основные ограничения. Там же добавим перечень специалистов, условия их подключения и пути к файлам. Для бюджета запись может выглядеть следующим образом:
Подключи специалиста по бюджету для расчёта и сравнения расходов. Его инструкции находятся в файле specialists/budget.md. Для работы необходим прежний расчёт или перечень расходов, известные цены и ограничения пользователя. Необходимо вернуть расчёт по категориям, общую сумму и список данных, которые ещё нужно уточнить.
В файле budget.md необходимо указать, как считать расходы. Например, нам важно различать цену номера за ночь и стоимость за весь период, а также учитывать переезды отдельной строкой и показывать, откуда берутся суммы. Если цена известна приблизительно, то это обязательно должно быть видно в расчёте.
По тому же принципу заполняем файл route.md. Здесь нам важно учитывать следующее: правила работы с программой поездки, временем на переезды и отдых. Если изменение маршрута влияет на расходы, то эту информацию нужно передать для пересчёта бюджета.
В общей инструкции нужно объяснить, как ими пользоваться. Например, вы можете начать с такой формулировки.
Сначала определи, какой результат требуется. Выбери специалистов по их описаниям и прочитай соответствующие файлы. Если для выбора или выполнения задачи не хватает данных, уточни их. При работе с несколькими специалистами передавай следующему этапу необходимые результаты предыдущего. Общие ограничения навыка соблюдай при любом выборе.
Указанный порядок может выполнять одна модель. Сначала она действует в роли руководителя и выбирает инструкции, а далее выполняет задачу по прочитанным правилам. Названия специалистов здесь обозначают разные обязанности, то есть они сами по себе не создают отдельных независимых помощников.
Как запустить и проверить навык
Для проверки можно воспользоваться готовым навыком планирования поездки из репозитория к статье. В самом начале файла README имеется переключение на русский язык.
Сначала необходимо скачать репозиторий и открыть его папку в ИИ-среде с доступом к локальным файлам. Затем нужно начать новый сеанс, чтобы инструкции из предыдущих задач не влияли на результат проверки, и отправить следующий запрос.
Прочитай examples/trip-skill/SKILL.md и действуй по нему. Мы едем на четыре ночи. Номер стоил 100 евро за ночь, теперь стоит 80. Остальные расходы составляют 300 евро. Расположение и программа прежние. Пересчитай итог. Укажи, какие файлы инструкций ты прочитал.
В приведенном выше примере мы заранее знаем правильный ответ. Четыре ночи по 80 евро стоят 320 евро, добавляем остальные расходы и получаем 620 евро вместо прежних 700. Если ИИ вдруг посчитал иначе, смотрим, какие суммы он использовал и где ошибся.
Затем важно проверить, какие инструкции он прочитал. Если среда показывает действия ИИ, открываем записи о чтении файлов. Для нашей задачи достаточно SKILL.md и specialists/budget.md. Если прочитан ещё и specialists/route.md, выясняем, зачем понадобились правила маршрута, хотя расположение гостиницы и программа остались прежними.
Таким образом мы проверяем две вещи. Правильная сумма показывает, что расчёт выполнен верно. Чтение нужных файлов подтверждает выбор инструкций для этого запроса. Может оказаться, что ИИ получил 620 евро, но перед этим прочитал весь навык. Тогда расчёт прошёл проверку, а порядок выбора инструкций ещё нужно доработать.
Если среда не показывает, какие файлы читала модель, мы можем проверить сумму, но подтвердить выборочную загрузку пока не получится. Перечень файлов в самом ответе ИИ не заменяет журнал действий.
Для проверки работы двух специалистов попросим заменить гостиницу на другую, подальше от центра. В этом случае нужно проверить и время на дорогу, и расходы на переезды. Ожидаем, что ИИ прочитает инструкции по маршруту и бюджету и учтёт оба изменения в ответе.
Ещё можно дать запрос без направления, дат и бюджета. В таком случае ожидаем уточняющие вопросы, а не придуманную поездку. Готовые формулировки проверочных запросов есть в руководстве.
Такие опыты помогают понять, что именно нужно исправлять. Если ИИ прочитал лишние инструкции, смотрим правила выбора у руководителя. Если выбрал нужные файлы, но ошибся в расчёте, разбираем сам расчёт и инструкции специалиста. Несколько удачных проверок ещё не гарантируют, что навык справится с любой задачей, но дают основание пробовать его дальше.
Инструкции примера написаны на английском, а отвечать навык должен на языке пользователя. В обычном чате без чтения локальных файлов выбранные инструкции придётся передавать вручную.
Как создать навык для своей задачи
После такого опыта можно попробовать собрать навык для работы, которую мы сами регулярно поручаем ИИ. Порядок создания тоже поддаётся описанию. Нужно выяснить задачу, определить специализации, подготовить их инструкции и правила выбора.
Поэтому в репозитории есть отдельный навык-конструктор. В русском README приведён запрос для его запуска. Подставляем свою задачу и указываем, какой результат нужен. Конструктор должен уточнить необходимые требования и подготовить новую папку output/my-skill с общей инструкцией и файлами специалистов.
Сначала стоит прочитать эти файлы и проверить, правильно ли описана наша работа. Затем в новом сеансе можно попросить ИИ прочитать output/my-skill/SKILL.md и дать небольшую задачу. Автоматической установки или публикации при этом не происходит. Получившийся навык остаётся заготовкой, которую мы проверяем и дополняем по результатам использования.
Для меня в этом и заключается польза такого устройства. Можно накапливать подробные инструкции для разных ситуаций, сохраняя возможность выбирать нужную часть для каждого обращения. При этом понятно, где лежат правила и что нужно пересмотреть, если работа пошла неправильно.
Когда таких навыков становится несколько, возникает задача связать их между собой. Как выбирать подходящий навык и передавать результаты дальше, разберём в следующей статье о федерации.
