Ансамбль агентов
Разные модели немного более или менее способны в решении разных задач: кто лучше следует инструкциям, кто хорошо пишет код и так далее. Идея в том, чтобы объединить несколько разных моделей и использовать их сильные стороны.
Авторы пишут, что, если модели дать на вход варианты ответов, сгенерированных другими моделями, её собственный ответ будет качественнее, чем если бы она работала исключительно по запросу. Они делят все модели на генераторов (proposers) и агрегаторов (aggregators).
Генераторы создают варианты ответов. Эти варианты сами по себе не обязательно хороши, однако они могут дать больше контекста и разнообразия. Агрегаторы собирают полученные на вход варианты и приводят их в божеский вид. Некоторые модели, такие как GPT-4o, Qwen1.5 и LLaMA-3 (статья 2024 года), неплохо справляются с обеими ролями, в то время как другие лучше выступают либо в роли генераторов, либо в роли агрегаторов.
А если собрать многослойную структуру и агрегировать ответы разных агрегаторов, результат должен получиться ещё лучше.
Честно говоря, я испытываю смешанные чувства. С одной стороны, увидев эту архитектуру, я подумала: «Да это неприлично дорого». Если использовать модели, которые лежат и работают на сервере компании-провайдера, это дорого в денежном выражении, потому что нужно платить за производимый текст. Цена рассчитывается за n токенов, обычно за миллион. Они сейчас здорово подешевели, поэтому один запуск большой системы из нескольких моделей стоит адекватно. Но запуск-то будет не один: пока настроишь, пока протестируешь, пока доберёшься до той конфигурации, которая лучше всего работает – в итоге сумма накапает кругленькая.
Если использовать модели локально, то есть, скачать к себе на компьютер и запускать там, то, во-первых, нужен мощный компьютер. В идеале – с очень хорошей видеокартой. Я этим летом вложилась в покупку таковой (там такая стоимость, что это не покупка, а инвестиция) и могу теперь много с чем экспериментировать и не платить провайдерам. Но даже на очень крутой пользовательской видеокарте работа нескольких моделей занимает немало времени. Опять же, мы многократно запускаем систему, чтобы протестировать, и получаем долгий период разработки. Тоже дорого, но по времени.
С другой стороны, практика моя и коллег показывает, что всё-таки если взять хотя бы одну модель, которая сгенерирует черновой вариант, и хотя бы одну модель, которая его причешет, результат получается лучше, чем если использовать только одну модель на всё. Мы как-то на работе у меня проводили слепой тест, где дали нашим коллегам тексты, созданные разными парами моделей, и тоже пришли к тому, что есть определённое деление между теми, кто пишет хороший черновик, но даёт плохой результат, и теми, кто делает наоборот. Есть пары моделей, которые работают лучше других, и есть те, которые работают совсем плохо.
Так что я ход мыслей авторов статьи понимаю и думаю, что они могут быть во многом правы. Вопрос в том, стоит ли достигнутое повышение качества затраченных денег и времени. Авторы приводят свой анализ затрат и показывают, что их архитектура позволяет добиться высокой эффективности при сравнительно небольшой стоимости. Однако если мы берём прям сложный вариант и учитываем многократный запуск, они меня не убедили.
Авторы предлагают многослойную архитектуру: в каждом слое несколько моделей. Первые получают и обрабатывают запрос от пользователя, генерируют ответ. Следующие получают запрос, ответ предыдущих и дополняют его – и так далее столько раз, сколько слоёв в архитектуре. Последняя модель в цепочке получает все сгенерированные ответы, запрос пользователя и индивидуальную инструкцию, которая требует из полученного множества вариантов сделать один.
Они называют свои модели агентами (А с подстрочными индексами на схеме), что спорно, но ладно. До единого понимания агентности всё равно пока никто не договорился.
В роли разных агентов может выступать одна модель. В её ответы в любом случае заложена некоторая случайность, поэтому они не будут каждый раз идентичными, и мы всё равно получим разнообразие.
В целом, идея правда интересная и построена на существующих и практически значимых предпосылках. Я бы ещё посмотрела куда-то в сторону эволюционных алгоритмов, чтобы агрегировать не все ответы, а только лучшие. Это добавляет сложности – нужна надёжная оценка качества промежуточных результатов, – но в перспективе может сделать подход эффективнее и дешевле. Готова поспорить, кто-то уже эту мысль протестировал. Если найду, расскажу вам.