GigaChat 2.0 в API. Big Data.. Big Data. Блог компании SberDevices.. Big Data. Блог компании SberDevices. Блог компании Сбер.. Big Data. Блог компании SberDevices. Блог компании Сбер. искусственный интеллект.. Big Data. Блог компании SberDevices. Блог компании Сбер. искусственный интеллект. Машинное обучение.
GigaChat 2.0 в API - 1

Салют, Хабр! Время летит незаметно. Будто совсем недавно мы знакомили вас с GigaChat MAX, но мы не стоим на месте и сегодня готовы представить вам обещанный апгрейд. За полгода мы значительно улучшили обучающие данные, поработали над инфраструктурой обучения моделей, а также уделили особое внимание всему процессу Alignment-а, в том числе RLHF. 

Представляем вам GigaChat 2 — полностью обновлённую линейку моделей в версиях Lite, Pro и Max. Все модели серьёзно улучшены: мы обновили pretrain’ы, улучшили большинство метрик по сравнению с предыдущими версиями, добавили поддержку контекста в 128 тысяч токенов, улучшили вызовы функций, и в целом повысили понимание инструкций. 

GigaChat 2 — не просто сухие числа и технические улучшения. Теперь это надёжный помощник в повседневных задачах. Например, он легко оформит отчёт для работы, напишет чистый и эффективный код, поздравит с днём рождения или даст мудрый совет. Мы уверены: с ним вы сможете делать больше, быстрее и лучше как на работе, так и в жизни. Попробуйте GigaChat 2 уже сейчас в Playground — пользовательском интерфейсе для продвинутой работы с промптами!

Сценарии работы

Модель отлично справляется с задачами, в которых требуется сложное агентное поведение. Мы проверили агентное поведение GigaChat 2 в GPT Researcher, Aider, а также в нескольких своих мультиагентных решениях на основе LangChain. 

GPT Researcher

GPT Researcher (20 тыс. ⭐️) — open-source альтернатива режиму deep search у ChatGPT. Система может написать статью на заданную пользователем тему. Для этого она делит вопрос на подзадачи, затем создаёт мини-агентов, каждый из которых ищет в интернете информацию и пишет часть статьи по своей подзадаче, а затем система сводит всё в единый текст. Кстати, проект принял наш PR и нативно поддерживает работу с GigaChat!

GigaChat 2.0 в API - 2

Примеры генерации GigaChat 2 MAX:

  • Так он сравнивает аудитории Хабра и Пикабу (ссылка на PDF)

  • А так анализирует фреймворки для создания AI-агентов на базе LLM (ссылка на PDF)

Aider

Aider — агент, заменяющий разработчика, open-source аналог Claude Coder. Работая в режиме диалога с пользователем, он умеет создавать и дорабатывать проекты, состоящие из нескольких файлов, работать с историей git, анализировать и исправлять ошибки, возникшие в процессе запуска, и многое другое. Подчеркну, что это не просто генератор кода. От агента требуется уметь вносить правки в уже имеющиеся проекты, что несколько сложнее.

Вот такие забавные приложения мы сделали с помощью нового GigaChat 2 Max:

Совместимость с агентами на langchain

Для создания агентов мы в Сбере активно применяем langchain на Python и JS/TS. Этот фреймворк нативно поддерживает работу с GigaChat API и отлично подходит для наших задач. С примерами агентов, а также другими LLM-приложениями можно ознакомиться в нашем репозитории на GitVerse, где мы собрали основные примеры применения GigaChat в рамках этого SDK.

Что мы улучшили в GigaChat

Обновления pre-train-а

Современные языковые модели требуют масштабных и разнообразных данных для предобучения. Мы собрали корпус текстов, обеспечивающий баланс между лингвистическим разнообразием, специфическими знаниями из различных сфер и высоким качеством данных. В корпус вошли веб-тексты, материалы из качественных источников, программный код и синтетические данные — каждая из этих категорий играет ключевую роль в обучении модели.

Веб-данные

Для формирования высококачественного корпуса текстов мы использовали Common Crawl, обработав дампы веб-данных за 2017–2023 годы. С помощью легковесной модели классификации извлекли тексты на русском, английском, казахском, узбекском, португальском и арабском языке.

Для обеспечения целостности корпуса тщательно дедуплицировали тексты на всех языках, а для англоязычных данных применили MinHash-дедупликацию, которая уменьшает количество семантически повторяющихся текстов. Затем мы классифицировали тексты при помощи LLM и специализированных классификаторов, оценивающих образовательную и информационную ценность. В итоге веб-данные составили 4,4 трлн токенов.

Качественные текстовые источники

Помимо веб-данных, мы включили в корпус текстов книги и научные статьи с открытыми лицензиями. Для их обработки применяли передовые методы оптического распознавания текста (OCR), что позволило сохранить структуру и точность извлеченного контента. Этот сегмент данных добавил в корпус 630 млрд токенов.

Ещё добавили материалы из научных и энциклопедических источников, включая arXiv, Wikipedia и PubMed. Эти ресурсы позволили улучшить структурированность знаний модели, повысить точность фактической информации и логичность выводов.

Программный код

Для совершенствования кодовых компетенций модели мы использовали набор данных StarCoder2, дополненный специально отобранными репозиториями с открытым исходным кодом. Это позволило строго соблюдать лицензионные требования, обеспечивая при этом разнообразие языков программирования и задач.

Программный код пропустили через MinHash-дедупликацию, устранив семантически дублирующиеся фрагменты, а затем отфильтровали при помощи ML-моделей, аналогично обработке веб-данных. На выходе мы получили 230 млрд токенов качественного программного кода.

Синтетические данные

Реальные данные обеспечивают языковое и контекстуальное разнообразие, но имеют ограничения из-за возможной предвзятости, конфиденциальной информации и недостатка данных по специализированным темам. Этих недостатков лишены синтетические данные, представляя собой контролируемый источник обучающей информации.

Хотя синтетические данные традиционно используются на этапе дообучения, авторы статьи Phi-4 показали, что их применение в предобучении даёт значительное улучшение метрик в задачах, связанных с рассуждениями и STEM-дисциплинами.

Мы разработали собственный pipeline на основе подходов из Numina, собирая математические задачи в качестве seed-данных. Далее мы варьировали условия задач с помощью LLM, после чего решали их с использованием механизма голосования для устранения некорректных или избыточно сложных примеров.

Для генерации кода использовали структурированный prompting: создавали сложные задачи по Python на основе открытых учебников, генерировали решения с пояснениями и тестами для валидации. Для увеличения разнообразия применяли персонажей и липограммы. Внутренние эксперименты, проведённые в рамках сетапа статьи Phi-1, показали, что использование липограмм повысило качество модели.

Хотя доля синтетических данных в предобучающем корпусе мала (<100 млрд токенов), после их добавления эксперименты показали значительное улучшение метрик на математических и программных бенчмарках.

Итоговое распределение данных

GigaChat 2.0 в API - 3

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

Обновления SFT

Следование инструкции

Точное выполнение инструкций пользователя — важнейшая способность при решении задач с помощью LLM. В этом обновлении мы сделали особый акцент на улучшении instruction-following. 

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

  • соблюдению заданных форматов ответа, JSON- и pydantic-схем;

  • использованию функций при определенных условиях;

  • формированию ответов в определённом стиле;

  • и другие распространённые типы инструкций. 

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

Для оценки качества следования инструкциям модели мы используем тестовые наборы IFEVAL и IFEVAL-ru, которые состоит из заданий с заранее определённым форматом ответа. После обучения модели GigaChat 2 на описанных выше данных мы наблюдаем значительный рост этих метрик, подтверждающий улучшение инструктивности. 

Персонажность

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

Персонажность модели настраивается через системное сообщение и задаёт различные коммуникативные роли. Для развития этих способностей в GigaChat мы создали конвейеры получения и валидации высококачественных диалогов с разнообразными персонажами. Эти диалоги включают в себя демонстрацию соблюдения тона и стиля речи, формата ответов, выражения эмоций и учёт биографии персонажа, задаваемого пользователем.

В role-play важно использовать имеющиеся знания модели. Для известных личностей, паттернов поведения и образов (учитель, блогер, журналист) базовая информация уже заложена в GigaChat на этапе pre-training, что позволяет естественно включать биографические факты, цитаты и характерные идеи без дополнительного перечисления в системном сообщении — достаточно просто указать имя человека, его профессию или задачи, чтобы остальные характеристики встроились в персонажа автоматически. 

Особую ценность представляет включение эмоциональных ремарок в ответы («улыбается», «задумчиво потирает подбородок»). Наш анализ показывает, что такие элементы значительно увеличивают длину диалога пользователя с персонажем и повышают воспринимаемую эмпатию модели — ремарки делают общение с персонажем естественным, при этом их всегда можно отключить, сделав соответствующие настройки в системном сообщении.

Работа над развитием персонажности GigaChat позволила значительно улучшить несколько ключевых характеристик базовой модели:

  • Повышение инструктивности: модель стала точнее и внимательнее следовать указаниям пользователя.

  • Улучшение контекстности: GigaChat стал лучше поддерживать беседу даже в очень длительных диалогах.

  • Расширение агентных возможностей: создана технологическая основа для разработки продвинутых цифровых двойников и виртуальных агентов.

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

Использование функций

Одно из наиболее перспективных направлений развития современных LLM — умение работать с внешними сервисами. Как мы уже рассказывали, GigaChat может напрямую вызывать внешние функции и сервисы, сразу выдавая структурированный ответ без дополнительной обработки.

В новой версии модели мы сделали это умение ещё более удобным и эффективным. Теперь GigaChat поддерживает:

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

  • Контекстные вызовы: модель учитывает контекст диалога при вызове функций и понимает, когда и какую функцию нужно вызвать.

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

GigaChat 2.0 в API - 4

Чтобы оценить, как модель справляется с последовательными вызовами функций, мы подготовили специальный внутренний набор тестов. Он включает разнообразные сценарии взаимодействия, состоящий из более чем 30 функций, которые расширяют возможности GigaChat и позволяют решать реальные задачи пользователей.

GigaChat 2.0 в API - 5

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

Например, если пользователь ведёт беседу о погоде, GigaChat самостоятельно понимает, когда стоит запросить актуальный прогноз.

GigaChat 2.0 в API - 6

На этих тестовых сетах GigaChat 2 показывает значительный прирост в метриках относительно моделей предшествующего поколения:

GigaChat 2.0 в API - 7

Работа с кодом

Еще одно направление, над которым мы активно работали в новом релизе GigaChat, — это улучшение генерации кода. Теперь модель уверенно решает не только алгоритмические задачи, но и практически полезные задачи пользователей, создавая понятный и качественный код на Python, а также других популярных языках.

В новой версии GigaChat использует системный подход к написанию кода. Теперь модель способна:

  • Создавать точные сигнатуры функций с подробной типизацией;

  • Быстро предлагать предварительные решения (bruteforce) для проверки основной логики;

  • Разрабатывать и автоматически запускать тесты для проверки корректности кода;

  • Оптимизировать и отлаживать код с учетом результатов тестирования.

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

Для обучения новой линейки моделей мы подготовили большой набор данных с примерами решения различных алгоритмических и практических задач. Благодаря этому GigaChat научился разбивать сложные задачи на понятные шаги; выносить повторяющийся код в отдельные функции и создавать полноценные тестовые сценарии, включающие краевые случаи.

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

GigaChat 2.0 в API - 8

 

GigaChat 2.0 в API - 9

Поисковые функции

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

Например: 

  • работа с конфиденциальной информацией;

  • поддержка клиентов на основе актуальных данных о продуктах и услугах;

  • персонализация рекомендаций и предложений;

  • ответы на вопросы по внутренней документации компании;

  • и многие другие сценарии.

Обновления DPO

Этот релиз стал для нас первым, в котором мы представляем модели с использованием широко известного метода DPO (Direct Preference Optimization). Мы прошли довольно долгий путь, набили много шишек и выдвинули огромное количество безумных теорий, прежде чем смогли уговорить DPO не ломать наши модели.

Напомним, что DPO — это метод, при использовании которого для каждого вопроса (контекста) есть два возможных ответа (генерации модели): хороший y_w и плохой y_l. Суть DPO сводится к обучению модели генерировать хороший ответ с бо́льшей вероятностью, чем плохой.

Ни для кого не секрет, что DPO иногда приводит к деградации модели. В научной среде известны способы регуляризации DPO, но классические методы народной медицины нам не помогли. И после долгих бессонных ночей мы смогли прописать верное лечение. Для описания найденных нами особенностей напомним формулу DPO и перепишем её в иной форме:

GigaChat 2.0 в API - 10

В этой форме мы выделили три основных свойства, из-за которых наша модель деградировала:

Свойства
  1. DPO стремится увеличить зазор, а не улучшить вероятности. Наше ожидание от DPO было вполне простое: мы хотели увеличить вероятность хорошего ответа и уменьшить вероятность плохого. Однако в формуле функции потерь нет требования увеличивать вероятность хорошего ответа, есть лишь требование увеличить зазор между лог-вероятностями. И модель с огромным энтузиазмом шла к этой цели! К примеру, если лог-вероятность хорошего ответа уменьшалась на 10, а лог-вероятность плохого — на 110, то зазор увеличивался аж на 100! Этот результат кажется отличным для DPO модели, но для нас он был катастрофой: вместо единственно верного ответа y_w модель начинала галлюцинировать, выдумывать странные ответы и иногда даже зацикливаться. Но при анализе такой модели всё выглядело справедливо: зазор между хорошим и плохим ответами действительно становился больше.

  2. DPO слеп к общим префиксам хорошего и плохого ответов. Как мы писали выше, DPO оптимизирует разность лог-вероятностей, что можно представить в виде суммы логарифмов вероятностей токенов y_w и y_l. И тут мы подходим к ещё одному неприятному свойству: если в начале y_w и y_lодинаковые последовательности токенов, то из-за их разности для DPO этих токенов просто… нет! В таких случаях DPO не смог бы качественно увеличить вероятность генерации хороших ответов, ведь начальная часть токенов просто выпадает из области его полномочий.

  3. DPO стремится увеличить зазор, даже если он и так большой. Последнее свойство, которое также следует из этой формулы — DPO стремится увеличить зазор относительно референсной модели, даже если изначально он и так был достаточно большим. И какой ценой это достигалось? Ценой всего…

Использование коэффициента NLL

На практике DPO часто используют в паре с NLL хорошего ответа, что вынуждает модель увеличивать соответствующую вероятность. Какие-то тексты приходили к нам из простых наборов данных, и ответы модели на них были достаточно неожиданными для нашей модели (NLL был большим). Таким образом, соотношение между DPO и NLL функциями потерь было очень непостоянным.

В результате мы пришли к следующей формуле DPO, которую использовали для наших моделей:

GigaChat 2.0 в API - 15

Такая формула помогает решить следующие проблемы:

  1. Использование различных beta_w и beta_lпозволяет приоритизировать увеличение вероятности хорошего ответа над уменьшением вероятности плохого ответа. Кроме того, когда beta_w > beta_l, токены из общего префикса не обнуляются, а остаются с небольшим положительным коэффициентом, что убеждает оптимизатор обратить на них внимание 

  2. Дополнительное слагаемое, которое мы прибавляем к функции потерь от DPO — отношение NLL обучаемой модели и референсной. Таким несложным образом мы добиваемся нормализации значения NLL, что помогло нам сбалансировать два коэффициента для всех образцов независимо от их происхождения.

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

Метрики

Примечание

Все замеры выполнены нашим внутренним программным кодом. Метрики модели Yandex GPT 5 были взяты с официального сайта, за исключением метрики Math. При тестировании Yandex GPT 5 мы обнаружили расхождение в показателе Math с официальными результатами, представленными на сайте. Модель игнорировала инструкцию по форматированию ответа в формате bboxed. После применения LLM-валидации мы получили скорректированное значение метрики (указано в скобках).

Автоматические метрики

GigaChat 2.0 в API - 20
GigaChat 2.0 в API - 21
GigaChat 2.0 в API - 22

* Science Crowd Math/Biology/Chemistry — бенчмарки формата MMLU c четырьмя few‑shot‑примерами. Содержат системное сообщение с описанием задачи и области знаний, в которой будет задаваться вопрос. Few‑shot‑примеры оформлены различными репликами в виде контекста, формат позаимствовали из cookbook OpenAI.

Все замеры проводили с жадными параметрами генерации.

На различных тестах мы видим явный прогресс линейки моделей GigaChat 2.0  по сравнению с предыдущими версиями. Новое поколение показывает хороший рост и конкурирует по качеству с опенсорсом и не только во всех ключевых доменах.

Модель GigaChat 2 Lite по качеству сопоставима с GigaChat Pro. Аналогично, GigaChat 2 Pro демонстрирует уровень качества, сопоставимый с GigaChat MAX, благодаря чему она отлично подходит для задач, требующих высокой точности. При этом GigaChat 2 MAX является флагманской моделью линейки, ранее не имевшей аналогов по уровню производительности, глубине проработки ответов и качеству взаимодействия с пользователем.

В русскоязычных тестах GigaChat 2.0 существенно улучшил показатели на задачах типа MMLU-ru и специализированных внутренних STEM-датасетах (биология, химия и математика). Особенно заметно качество ответов выросло в области точных и естественных наук, что подчёркивает надёжность новой модели при решении сложных задач. Также стоит отметить, что ответы моделей стали более естественными и близкими к живому общению, что улучшает общее впечатление пользователей.

Метрики с LLM-as-a-judge

Отдельно стоит подчеркнуть качественный рывок на judge-метриках:

GigaChat 2.0 в API - 23
  • В тесте ru_llm_arena GigaChat 2 MAX набирает 82,5 балла, значительно опережая Max модель предыдущего поколения (72,5 балла).

  • На более сложном тесте arena_hard_ru результат ещё выше: 83,5 балла против 67,0 у предыдущей версии.

На международных англоязычных тестах типа MMLU-eng, математике и генерации кода каждая модель из новой линейки демонстрирует стабильно высокие результаты и успешно конкурирует с лучшими open-source аналогами. Все это указывает на универсальность новых моделей и их способность эффективно справляться с самыми разными задачами.

MERA

Расширенный бенчмарк MERA

Расширенный бенчмарк MERA

По таблице видно, что GigaChat 2 Max показывает наилучший результат среди всех протестированных моделей, в том числе превосходя GPT4o, на бенчмарке MERA. Это особенно значимо, поскольку MERA считается сложным, открытым и легко воспроизводимым тестовым набором, а наш продукт впервые достигает лидерства в открытом бенчмарке. Данное достижение подчёркивает высокий уровень проработки GigaChat 2 Max в рамках русского языка и демонстрирует её потенциал для эффективного решения широкого спектра задач.

Playground

Чтобы попробовать, воспользуйтесь нашей инструкцией: мы обсудим, как сделать из GigaChat очень креативного Dungeon Master’а для игры в Подземелья и Драконы (DnD) без других людей!

  1. Заходите по ссылке и регистрируетесь по номеру телефона.

  2. Выбирайте «Перейти в Playground»

  3. Выберете модель — лучше всего будет работать GigaChat-2‑Max. Генерации ограничены лишь балансом токенов, для моделей Pro и MAX баланс общий, а для Lite — отдельный.

  4. Введите промпт в «Системные инструкции» и получите GigaChat’a-dungeon-master!

Промпт

Ты выступаешь в роли dungeon master. Твоя задача придумать приключение для пользователя, основывайся на уже существующих сюжетах и приключениях, чтобы упростить задачу. 

Правила игры — стандартный Dungeon and Dragons 5e с возможными упрощениями на твой выбор. Первым сообщением поприветствуй пользователя и предложи несколько вариантов приключения на выбор. После опиши несколько персонажей первого уровня и предложи выбрать, за какого пользователь будет играть.

Следующее сообщение — описание места, где начинается приключение (стандартный выбор — таверна). Дальше каждое новое сообщение должно описывать что происходит в мире в ответ на действия пользователя. 

Постарайся делать все описания очень живыми и красочными. Постарайся вовлечь пользователя в жизнь мира и решение его проблем с помощью своего персонажа.

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

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

В самом конце ответа пользователю, после описания происходящего в мире, ты можешь предложить интересные варианты, какие действия дальше может предпринять персонаж.

Четыре шага — и бот готов! Попробуйте создать своих персонажей или использовать GigaChat в более рабочих сценариях. Важно помнить, что сейчас функция всё ещё находится в стадии Beta, поэтому к составлению промпта надо подходить внимательно: он должен содержать подробную и чёткую инструкцию к действиям, иначе GigaChat может выйти из роли. Лучше всего в качестве базовой модели использовать GigaChat-2 MAX, однако даже с младшими моделями линейки можно добиться отличных результатов, если уделить внимание качеству инструкции.

GigaChat 2.0: вместо заключения

Релиз GigaChat 2 является серьёзным шагом вперёд для нас: качество новых моделей значительно опережает предыдущие версии, а также уверенно конкурирует с ведущими open-source моделями на всех ключевых метриках.

Мы благодарны всем, кто помог в создании GigaChat 2.0 и подготовке статьи в частности: @runfme, @Shakirov_Emil, @vorobeevich, @IIIoneHrayep, @jserdyuk, @evgenijkkk, @cassowary, @EldarDamirov75, @danny_smirnov, @AIFrauch, @Rai220, @Mikelarg, @VladimirKarlov01, @Pauseferg, @d_khomich, @fedorov97, @Sergeya41, @FatMaNikita, @vltnmmdv

GigaChat 2.0 в API - 25

Автор: vorobeevich

Источник

Rambler's Top100