Что такое харнесс и с чем его едят?

В субботу я проводил вебинар по использованию ИИ в аналитике, где рассказывал там про харнессы. Думаю, далеко не все были на вебинаре, но многим будет полезно узнать, что это такое.

Harness (в переводе с английского - обвязка) - это грубо говоря набор инструментов вокруг LLM, превращающий чат-бот в полноценного агента.

Иногда в интернете проводят параллель с компьютером и представляют харнесс в виде операционной системы.

Операционная система на компьютере позволяет нам управлять компьютером, операционная система над моделью позволяет управлять моделью.

Также нашел другое классное определение: Harness - это сбруя.

Если LLM - это лошадь, то одевая на неё сбрую, ты делаешь из (дикого) животного целевого помощника, функции которого ограничены и управляются этой самой упряжью.

Окей, с определением разобрались.

Из чего состоит харнесс?🛠

В целом, в лучших практиках выделяют 12 различных компонентов.

Я же в своей презентации давал упрощенный формат и выделял только 4: контекст, скиллы, инструменты, оркестрация.

Пройдемся по каждому.

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

1. Контекст Контекст - это область знаний, в рамках которых оперирует модель.

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

Управление контекстом - одна из ключевых задач при работе с харнессом.

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

Поэтому задача сводится к тому, чтобы собрать минимальный набор токенов, которого хватает для решения задачи.

Архитектурно я делю контекст на три слоя.

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

Загружаемый по требованию - скиллы, инструкции, справочники.

В постоянный контекст попадает только название и одна строка «когда меня вызывать», а полный текст подтягивается, когда скилл реально запустился.

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

Как это реализовать?

Расскажу про 4 приема, которые предлагает Anthropic.

Just-in-time доступ Не загружайте данные заранее, храните ссылки: путь к файлу, id дашборда, текст запроса. Модель сама сходит и достанет, когда понадобится.

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

Субагенты Грязную работу вроде «перелопатить 200 файлов и собрать статистику» отдаете отдельному агенту с собственным чистым окном.

Наверх он возвращает выжимку на 1-2 тысячи токенов вместо всего, что прочитал.

Компактификация. Когда история подходит к лимиту, она сжимается в резюме, и разговор продолжается с чистого окна.

И отдельно хочется сделать ремарку про инструкции.

Частая ошибка - прописывать жесткую логику «если пользователь сказал X, сделай Y» на все случаи жизни.

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

Рабочий вариант посередине. Описываете принципы и даете пару показательных примеров.

Во второй части разберу оставшиеся три компонента.

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