Transcription
А давайте поприветствуем нашего спикера, не буду больше вас задерживать. Константин Крестников, управляющий директор, команда Сбера. Кость, оставляю тебя сцену.
Всем привет. Спасибо, что пришли после обеда. Было сложно всё успеть. А я сегодня хочу рассказать о том, что такое харнес. Слово у всех на слуху. Я думаю, его многие за сегодня уже слышали. А кто не слышал, то после моего доклада начнёт слышать везде. Но, как оказалось, не все ещё с ними пообщались и осознают, что это такое.
А так, что же такое Харринес? Это особый вид агента, который неожиданно стал очень популярен. На самом деле, эта вещь простая. Это агент, который работает в пространстве файла и файлов и в пространстве виртуальных машин, а или реальных машин. Само слово харнес переводится как упряжка. И понимать себе это надо так, что LLM - это тяговая сила, двигатель или лошадь, а поле - это пространство файлов с задачами, в рамках которого этот харness работает. А сам харness - это упляжка. Мы запрягаем lm а в агента, и он нам вспахивает наше поле, вспахивает данные. Примеры самых известных харнесов - это CLД код, кодекс CLI, то есть все те консольные агенты, которых люди всё больше каждый день используют для того, чтобы решать свои ежедневные задачи.
А небольшой рекэп, что вообще происходит в агентном мире? Как это всё появилось? Где-то в районе в конце двадцать второго года у нас были просто LLM, даже не чатовые, которые умели просто продолжать код. Появился ранний чат GPT, который отвечал пользователю исключительно текстом. Это ещё не было агентом. Ему можно было задать вопрос, получить ответ, и на этом всё. Памяти не было, тулов не было, просто текстовый процессор.
В двадцать третьем году стала популярна такая концепция, как React. Это самые простые агенты, когда мы к ЛМ подключаем какие-то инструменты. И теперь, когда мы задали вопрос, она каждый раз принимает решение, вызвать ли инструмент для решения задачи, для ответа на вопрос или можно уже отвечать. Если она вызывает инструмент, она видит результаты вызова, рефлексирует их и снова в цикле принимает решение ответить или вызвать ещё какой-то инструмент.
А на границе двадцать третьего-двать четвёртого года эти реактагенты стали усложняться. Появилась мода засовывать их внутрь цепочек. То есть теперь у нас не просто обращение к ЛМ, а подготовка данных, постобработка данных, возможно, несколько обращений кLM с разными запросами. Пошла Мода нак, пошла мода использовать structured output. В этот момент популярность активно набирают фреймворки для создания таких агентов. Самые известные из них - это LCAIN и LADКС.
На следующем этапе это всё усложнялось и усложнялось. Цепочки начали ветвиться, превращаться в графы, появляется Нграф для описания. таких вызовов различных КЛМ и обработки результатов в виде деревьев. Появляется мода на мультиагентные системы, создаются множество агентов. Ты агент-критик, ты агент-планировщик. Сначала говорит этот, потом говорит этот. А популярные фреймворки в этот момент - это LНF, Aut GPT, QI. А всё это вместе называется термином термином, да, сфелдинг. СФЛИдинг - это строительные леса. Мы берём LLM и обстраиваем её большим количеством строительных лесов, чтобы она у нас лучше работала.
А следующий этап, на котором мы находимся сейчас, система скефолдинга казалось, она эффективная, но она очень сложная. Под каждую задачу нам надо строить огромное количество вот этих обвязок вокруг LLM. А внезапно оказалось, что мощные LLM могут работать если мы возьмём одного универсального агента, он все те же самые задачи решает. Нам не нужно делать мультиагентную систему, не нужно делать сложную обвязку. Достаточно задать вопрос к лод-коду: "Сделай мою задачу". Положить ему нужный набор файлов, и он её решает. Именно в этот момент появляются и обретают популярность харнесы. То есть это один агент, который решает самые разные задачи за счёт того, что мы его окружаем набором правильных файлов, даём ему правильную инструкцию. Инструкция по общей договорённости кладётся в файл MD или Clot MD. Этот стандарт, он как будто сам по себе зародился. один агент, любые задачи. Вот мы находимся здесь сейчас на пятом этапе.
Ну и что будет дальше? Немножко сегодня затрону. Всё не стоит на месте. А самые последнее интересное решение. Харнес - это здорово. Он может решить очень сложную задачу. Он может сделать 100-200 шагов, но всё равно контекст у него заканчивается. Он включает суморизацию и резко глупеет. Появились новые подходы, которые позволяют харнесам работать днями и, может быть, неделями. А один из них - это Realf Loop. Появился подход Dark Factory, когда мы ставим задачу агенту и он может бесконечно итеративно улучшать наше решение и решать задачи сложностью сделай мне продакшн приложение, например, работая 247. Это вот следующий этап на вторую половину двадцать шестого года, двадцать седьмого. Ну, посмотрим, как это будет.
А отдельно хочется немножко сказать прокод. был очень популярен N ещё полгода назад, но вот сошлюсь на Харрисона Чейса, SEO ЛНчейна. Ну и мы тоже у себя это это заметили. Как будто все те агенты, которые можно было раньше сделать ноукодом, сегодня не очень нужны, потому что мы можем просто попросить у Харнеса решить ту же самую задачу, и он её решит.
А давайте двигаться дальше. Что внутри у Харнеса находится? Под капотом у него всё тот же Реактгент, который рассуждает, вызывает какой-то тул, выполняет действия, выполняет наблюдение, после этого принимает решение: вызвать следующий тул или дать ответ пользователю. Но что важно, если раньше, создавая своего Реактгента, мы должны были выбрать набор тулов, то у современных харнесов так получилось, что эти тулы плюс-минус у всех одинаковые. Мы проанализировали огромное количество он сорса, и можно выделить четыре тула, которые есть абсолютно у всех. Это чтение файла, поиск информации среди файлов, редактирование файла и использование баша, то есть написание консольных команд, которые выполняются. После этого агент может что-то сделать. Вот этих четырёх функций достаточно для того, чтобы решать практически любые задачи. Ну и плюс дальше уже в зависимости от реализации добавляются доменспецифичные функции. как-то там поиск в базе данных или походы в интернет. Здесь уже зависит от реализации. Но что интересно, у всех популярных харнесов, которые мы анализировали, количество функций 25 -ре. Важно, что пользователь этого агента сам функции не добавляет, они уже идут из коробки.
Ещё важно Харнесу дать рабочую среду, в которой он работает. Это виртуальная машина или ваш компьютер. А, ну и какой-то набор джентльменских договорённостей. Что главная задача Харнеса лежит? в agents MD скилы описываются текстами, файлами, лежат там в директории Dotskills и тому подобного. А что интересно, даже если у вас одна и та же модель от Харнеса зависит довольно много от того, насколько он у вас качественный, где-то 20-30% пунктов вполне можно увидеть, просто пробыя разные харнесы на вашей задаче.
А и важно, что они ценны не только сами по себе. Вот клодкод, он очень удобен просто как вещьм. Можно пользоваться, давать ему запросы, получать от него ответы и решённые задачи. Но также харнесы могут быть основой для каких-то других проектов. Например, известный OpenCla - это не в чистом виде Harness, это готовое решение со своим инсталлятором, с работой через Telegram и так далее. Внутри него лежит один из самых популярных, один из самых качественных харнесов паймона. То есть можно строить свои задачи.
А ещё раз, да, почему- это важно, потому что без него наша LLM - это просто текстовый процессор. С ним наша LLM - это универсальный агент. Он берёт контекст. Контекст - это всегда набор файлов, выполняет над файлами какие-то действия. Вот вспомните картинку, как он пашет поле. Получает обратную связь и сохраняет свои изменения тоже в этот же набор файлов. То есть он может быть использован в одном окружении несколько раз, накапливая свои наработки со временем, сохраняя их между вызовами не в контексте, а за счёт того, что он меняет своё окружение.
А, да, важно, что ещё у нас внутри харнеса. Обязательно есть какой-то базовый systemт. Человек свою задачу описал в Agence ND, но есть ещё и основная инструкция, что, собственно, этот MD надо прочитать. Пользователь не может её менять. Есть набор тулов. Вот четыре основных и несколько дополнительных. Есть runime loop, то есть то, что запускает в цикле lлмку наше наследие от Реактагента. А очень важно, чтобы у него было грамотное управление контекстом, потому что какой бы у нас большой контекст не был, пусть даже миллионный, он всё равно закончится, если агент будет работать в течение там десятков и сотен минут. Поэтому, когда контекст начинает заканчиваться, агенту нужно принять решение, как его, что с этим делать. Он может обрезать старую историю, запустить суммаризацию, может, например, запускать субагентов, которые позволяют экономить контекст за счёт того, что отдают не полный трейс своей работы, а только результат. Ну, и, а какой-то у него обычно есть UI. Это либо консольный usзеер-интерфейс, так называемый CLI, либо UI, либо интеграция с Телеграмом, авторизация. Тут уже на что создатели Харнеса а решат пойти. Важно, это не обязательно не неотъемлема его часть, но так складывается, что у всех харнесов есть обычно как минимум два режима работы. Это режим интерактивный, где мы общаемся с человеком в чате, он может задать ему вопрос или попросить разрешения что-либо сделать. А мы можем его запустить, э, в режиме, когда разрешение он у нас не запрашивает. Этот режим называется, а, раньше был human in the loop, а здесь human on the loop. То есть человек просто присматривает за то тем, как работает его агент, и вовремя может его установить. И другой вариант, э, у многих арнесов, почти у всех, - это режим без пользователя, без интерактива, когда мы ему ставим задачу через аргументы командной строки. Этот режим, на самом деле, оказывается очень полезным, потому что именно в таком режиме мы можем свой харнес встроить в какие-то свои пайплайны, в C, засунуть его в цикл на баше. И из этого очень интересные можно сделать эксперименты.
Количество харнесов в мире просто огромное. Я вот здесь их начал выписывать, потом бросил, потому что здесь далеко не все. Есть пропритарные, есть openнсорсные. Этот слайд просто для того, чтобы показать, что показывать их полный список довольно бесполезно. Их слишком много.
А, ну и нам в Сбере тоже понадобился свой харнес, и мы решили заняться либо созданием, либо выбором. Почему мы? Потому что я из команды Gigгаchain. Мы делаем для гигачата SDK. агентов, ну и теперь харнесов в рамках Сбера. А SDК - это набор инструментов, которые позволяют разработчикам взаимодействовать с гигачатом. Мы всё делаем в Openрсе. И вот недавно у нас было радостное событие. Нашу библиотеку Гигачат скачали 1 млн пользователей, и она уже 2 года держится в топ 1,5% по скачиванию среди всех библиотек в мире на Пайпе. Довольно неплохо. Но также помимо питона мы делаем решение для джаваскрипта, для Джавы. И выбрали в качестве основной экосистемы для Сбера Lнchain. Делаем адаптер для лкчейна, тоже openсорсный, который позволяет использовать гигачат вместе с лгчейном, так же как все остальные мировые модели. Вот. А поэтому в первую очередь посмотрели на тот харness, который создала команда LCAin. Это openсоourсное решение. Это силай агент, с которым вот здесь у меня есть его скриншот, его можно запустить, с ним пообщаться. Вот видно, что подключена модель Gigat 3 Ultra. Я его попросил, сколько у меня места, а какая у меня версия MacOS. Он выполнил с помощью баша консольную команду, узнал версию и вернул её. Всё то же самое, как у клодкода или кодекса или у множества других харнесов. Чем он оказался для нас классным? Тем, что работа с гигачатом была из коробки. За счёт того, что у нас хорошая интеграция с лангчейном, даже не пришлось вносить никаких правок в код. чисто в конфиге прописали, что хочу использовать гигачат, и он заработал, как будто всегда так работал. Отлично.
Но почему я решил, что этот харнес хороший? То, что он работает с гигачатом, ну, мне, конечно, удобно, а в мировом сообществе, ну, как бы среди всех остальных харнусов. Ну, и что? А, пошёл замерять его на бенчмарках. Первый банчмарк, который я взял, вот, наверное, многие читают Telegramканалы, есть канал интересный от Рената, называется LM под капотом, и он проводит регулярно соревнования для агентов интересные. Последние соревнования, они как раз рассчитаны на то, что вы используете харnс. Я поучаствовал, о'кей, занял там какое-то место, но теперь у меня есть прекрасный бенчмаркет, на котором я могу проверять свои харнесы. Взял клодкод, взял саetт, получил, что он решает 70 задач из 104. Важно сказать, что, ну, как бы все 104 задач моё решение не решало, поэтому соты тут нету. Взял и саetт, получил 67 задач. Дальше мы сделали свой небольшой бенчмарк, об этом чуть позже расскажу. Тоже для харнесов на нём замерились. Опять же модель Хайку 222 задачи, модель HQU с Dependance 209 задач. Казалось бы, есть просадка. Вот. Но тут важно понимать, что если я беру ClotДced COД с моделью Hikoset или OPСus, то я должен учитывать, что и модель выпускает один и тот же вендер антропик. Это значит, что эти ребята оптимизируют свои промты под свою модель, а свою модель под свои промты. Наверняка она их много-много раз видела. В отличие от этого, PEG - это универсальный сила. Он не заточен специальным образом ни под антроopic, ни под Open AI, ни под гигачат. Естественно, от него ожидать, что такой оптимизации не будет. Тем не менее, просадка очень незначительная. Из чего я делаю вывод, что да, о'кей, этот харнес хороший.
С другими тоже, конечно, замерялись, но у Depн оказалось, а одна очень полезная функция ещё, а которой нет у других харнесов. Это как раз возможность адаптации под модель. Каждый вендер, там, open игрок и другие, может выпустить свой маленький профиль в виде отдельного Python пакетика и подключить de PEGs. В этом профиле он может учесть сильные стороны своей модели, слабые стороны, какие-то острые углы обойти и за счёт этого сильно повысить качество. Фактически такой подход позволяет сделать depons универсальным, чтобы этот харness можно было использовать со всеми моделями.
А, отлично. По этому пути мы уже ходили, делая плагин для лгчейна. пакет совместимости. И мы решили сделать свой пакет совместимости для гигачата, чтобы degenнce работал с гигачатом ещё лучше, как бы. Ну, и так нормально заработало, мы решили сделать свой. А создали, как мы его делали изначально при первом замере, а нет, создали свой небольшой бенчмарк для харнесов. Естественно, проверяли на других термина бенчch, TOНch, но они очень тяжеловесные. И вот в работе, когда надо быстро проверить много гипотез, оказались тяжеловаты. сделали свой маленький, прогнали на нём de Pedс, получили с гигачатом 67% решений и дальше выдвинули несколько гипотез. А что можно было бы улучшить, например, поменять какие-нибудь промты, поменять какой-нибудь тулинг или вот, ну, предположим, я знаю, что гигачат не знает некоторые аргументы Греп. Я могу их вп добавить, да, потрачу немножко токенов, но повышу качество работы на задачи, где Греп очень активно используется, потому что, по сути, это поиск. Вот. сделали свой бенчмарк, выдвинули там около пцати гипотез, часть из них Клод помог сгенерировать часть из своего опыта, и запустили систему автоулучшения на базе автоed Карпатова. Как она работает? Она проверяет гипотезу. Если бенчмарк вырастает, то она её сохраняет. Если бенчмарк не растёт, то она её откатывает. И так это работает по кругу. Можно оставить. Я вот оставил на выходные. Ну, тут часть была автоматическая, часть коллеги вручную запускали и увидели стабильный рост. Часть гипотез вот тут пропущена, на них было падение, он их не брал. В какой-то момент наша оценка вышла на плато, и это значит, что в рамках этого бенчмарка всё, что мы смогли сделать, мы сделали. Получили 22,5% пункта роста, качества на этом бенчмарке, на этом Харнесе. Ну, как бы ничего себе, такой классный рост за счёт промтинга. Сам бенчмарк выложили в Open Source по QR-коду, можно его посмотреть. Его фишка в том, что его можно прогнать за 20 минут на любом харнесе, он состоит из несложных задач по работе с файлами, с памятью, по использованию греппа, по разбору CS. И ему не нужен LMSAudge для проверки. Все Goldден ответы в нём записаны, поэтому им очень удобно использовать, а, как раз для автоматических улучшений такого рода агентов.
А, супер. Но откуда я взял, что я не зауверфитился? Да, вот результат проверки этого бенчмарка на разных моделях. SOT у нас выбивает клодкод на OPС 47. Это наш ориентир для гигачата, но гигачат сейчас послабее. И с Depжен профилем он выбил вот 84%. Сравнились с другими харнесами, попробовали паймона, который лежит в основе OpenC, попробовали Open Hands, который раньше назывался Open Devin, и многие другие. Видно, что лучший среди open sourceных харнесов, если использовать наш профиль для гигачата. Но нельзя делать на одном бенчмарке, вдруг я под него заоверфитился. Как я проверил, что вот эта вся вот этот весь путь вообще валиден, что мы сделали хороший харнес, а не хороший харнес, который проходит один бенчмарк. Стал проверять на других бенчмарках. Вот BGENНEN, то же самое соревнование, о котором я уже говорил. На нём увидели рост на гигачате. Даже 41% качеству задач. На других бенчмарках тоже рост наблюдается. Значит, путь был выбран правильно. Значит, мы сделали, выбрали правильный харнес и сделали для него хороший плагин и профиль и продолжаем двигаться в этом направлении.
А следующую вещь, о которой мы хотел рассказать, как можно с этими харнесами делать очень интересные вещи для решения самых сложных задач. Вот базовая работа с Харнесом выглядит так: мы ему даём задачу, внутри крутится реакцикл, а файлы - это его состояние и пространство, в котором он работает, выдаёт результат. Проблема, что если задача очень длинная, например, сделай мне, не знаю, игру в жанре визуальное novelло с 12че разными концовками. Ну, как бы ни один агент с этой задачей не не разберётся, она просто слишком большая по контексту. Поэтому придумали следующее решение. Надо харнес засунуть в обычный баш цикл. Вот я вот так это нарисовал. То есть здесь у нас while от troo. В конце у нас дан, а здесь бесконечное решение задачи. Что происходит? Пришла задача, агент её порешал, в какой-то момент говорит: "Ну, я решил". И завершает её выполнение. Тут же ваш цикл его перезапускает, и он снова решает эту задачу. И снова можно на неделю так оставить, он её и неделю будет решать, каждый раз, улучшая. А если его запромтить, двигаяся маленькими шагами, шаг за шагом, то внутренние прогоны будут небольшие, и он будет постоянно перезапускаться. Что нам это даёт? А у модели есть такое понятие, как смартзон. Это где-то 30-40% контекста, когда она максимально умная. Даже если мы начинаем вылезать за этот контекст, модель уже начинает глупеть, а вылезти за него легко. А если мы подбираемся к концу контекста, нам вообще ничего не остаётся делать, как суммаризация, которая обычно приводит к резкому поглупению. Кто вот OpenCl пользовался, наверняка знает. Вчера всё работало, сегодня то же самое запустило. Он просморилизовал и половину модель уже не может делать. О'кей, прикольное решение. Джеффри Хантли его придумал. У него, кстати, очень интересный блок по QR-коду. Тоже советую всем на него подписаться, почитать. А важная вещь ещё, о котором он говорит - это бэкпресше. Это внешнее давление, которое позволяет нашему агенту должно удержать его от того, чтобы он не слетел с катушек, не ушёл. Аэкпреш - это CLI, это набор юнит-тестов, набор каких-то ограничений, которые хоть как-то удерживают эту систему, потому что агент будет придумывать себе всё новые и новые улучшения, и понятно, может какой-то космос улететь.
А, ну и следующий шаг, который можно ещё добавить, а, Карпаты в своих докладах вот рассказывал о такой вещи, как схлапывание. Если мы агента, не агента ЛМ попросим рассказать анекдот, то она нам расскажет анекдот. Если три раза попросим, будет три разных анекдота. А если 20 раз попросим, то мы увидим, что анекдоты разные, персонажи разные. А вот сама сам панчлайн анекдота, да, само его смысла, он начинает повторяться. Там модель знает три-пять анекдотов. Это называется схлапывание, когда агент начинает бесконечно говорить одно и то же просто по кругу. А и я, ну, это уже я придумал MetalOP. То есть мы можем LOUP засунуть в ещё один бесконечный цикл, который, когда LUOP заканчивается, говорит: "Всё, я больше ничего нового придумать не могу". запускает следующую генерацию. И в генерацию не переходит то содержимое, что было придумано на предыдущем этапе. Она начинается с нуля. Агент в этом случае обычно начинают идти к каким-то совершенно другим путём. Через некоторое время он находит в соседней директории лежащую первую генерацию, но он уже ушёл в другую сторону, и он её учитывает, но сам его путь будет другой. Это такая защита от схлапывания. Вот тут у меня уже я вижу, а нет, ещё минута есть.
Собственно, то, что я вот это сделал с Металупом, я завернул в набор баш скриптов. Назвал громко аниме СДК. Аниме - это душа по-латински. Почему? Потому что я запустил первый эксперимент, где агента попросил: "Стань разумным существом". И запустил значит Харнес внутри снаружи Ральфлу Lлуop, снаружи MetalOP. Он у меня 13 поколений прошёл, 5 дней работал, нагенерировал огромное количество интересной информации. Например, в какой-то момент он говорит: "Я бы хотел исследовать пределы своих возможностей. Могу ли я замолчать?" Потом написал несколько пробелов, несколько точек, говорит: "Ничего себе, инсайт, я как агент молчать не могу". На другой генерации он пошёл изучать, могло ли его что-нибудь удивить. Нашёл тот момент, где он попытался замолчать и говорить: "Вот, э, вещь, которая меня поистине удивила". Это, в общем, надо читать как фантастический рассказ, но безумно прикольно. Я вот выложил, а, пост про это у себя в Telegram-канале и на гитхабе выложил этот СДК. По сути, его очень легко повторить. А для чего удобен этот подход? Ну, скажем честно, вот если вы платите за подписку Клода или кодекса, и у вас в конце периода остаются лишние токены, то этот подход очень удобен для того, чтобы их весело потратить. Вот. Классно справляется с исследованиями, с переводами больших книг, с автоматическим улучшением агентов, что я раньше показывал. с теми задачами, где надо пойти в разные стороны, попробовать разное, где вы сами не знаете, как, в общем, оптимально её решать. А так практически уложился. На этом хочу сказать всем спасибо за внимание. Вот мой Telegram-канальчик.