habrahabr

GigaChat MAX — новая, сильная модель GigaChat

  • воскресенье, 3 ноября 2024 г. в 00:00:11
https://habr.com/ru/companies/sberdevices/articles/855368/

Салют, Хабр! Прошедший сезон оказался богат на релизы: ровно год назад мы делились новостями о GigaChat Pro, затем весной рассказали об увеличении контекста и улучшении возможностей модели, а совсем недавно завершили обучение GigaChat Vision: мы научили GigaChat понимать картинки и уже пишем про это статью.

Спойлеры к GigaChat Vision

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

Мы решили, что хотим чаще делиться с вами новостями. Поэтому приглашаем всех подписаться на telegram‑канал команды GigaChat'a и вместе с нами пройти путь в его разработке.

В последнее время наша команда усердно трудилась над совершенствованием архитектуры всей линейки моделей, методов их обучения и повышения качества обучающих данных. В ближайшем будущем ожидается публикация статьи о поумневших и совершенно новых Pretrain‑моделях версий Lite и Pro, но сегодня мы поделимся другой важной новостью. Встречайте GigaChat MAX — самую мощную модель в семействе GigaChat!

Модель доступна в Telegram‑боте, в веб‑версии и через публичный API (в режиме раннего доступа). Чтобы ощутить качество ответов GigaChat MAX, рекомендуем протестировать модель именно в веб‑версии, там доступна наша новая фича — красивые и структурированные ответы. Вам понравится!

Про красоту ответов

Можно сравнить наглядность ответа в веб-версии и Telegram:

От версий Lite и Pro модель Max отличает качественно новый уровень внутренних знаний, возросшие способности к логическому мышлению, умение качественно решать практически любые ваши задачи (а если нет, научим). Прогресс GigaChat'а основан на тысячах часов работы команды ❤️, триллионах токенов чистых данных, а также оптимизации конвейеров обучения и инференса. Много о чём ещё нужно поговорить, поэтому давайте перейдём сразу к делу — сценариям использования и метрикам.

Наши возможности

Мы подготовили несколько классных демонстраций работы GigaChat MAX на прикладных задачах. Вы можете:

  • Писать код для решения геометрических задач:

    Геометрия на цилиндре
    Геометрия на цилиндре
  • Задавать вопросы по документам и файлам. В частности, по научным статьям:

    Вопросы к документам
    Вопросы к документам
  • Просить дать уравнение затухающих колебаний и нарисовать его с помощью Python:

    Уравнение колебаний
    Уравнение колебаний

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

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

Метрики GigaChat

На сегодняшний день измерять качество языковых моделей принято как набором общепринятых бенчмарков, так и сравнением одной модели с другой (SBS). Мы измерили GigaChat на независимом русскоязычном лидерборде MERA, серии открытых (да‑да, это вам не <тайный>_MMLU_RU) и закрытых бенчмарков Сбера, а также провели SBS с лучшими моделями на рынке.

MERA

MERA — это открытый лидерборд, на котором в понимании русского языка и качестве решений различных задач могут посоревноваться любые модели машинного обучения. GigaChat MAX находится в лидерах среди русскоязычных моделей, идёт вровень с самой дорогой в мире открытой моделью LLaMa 3.1 405B и уступает лишь GPT4o (GigaChat MAX ещё не обучена до конца, мы демонстрируем производительность лишь промежуточного чекпоинта — дальше круче!). Также мы замерили производительность последних моделей YaGPT версий 3 и 4 через код MERA.

#

Модель, команда

Результат

1

GPT4o

0,642

2

Meta-Llama-3.1-405B-Instruct (405.0B)

0,590

3

GigaChat-Max

0,588

4

Qwen2.5-32B-Instruct-GPTQ-Int8 (32.0B)

0,578

5

Mistral-Large-Instruct-2407 (123.0B)

0,574

6

GPT4o-mini

0,570

7

Qwen2-72B-Instruct (72.7B)

0,570

8

Meta-Llama-3.1-70B-Instruct (70.6B)

0,554

9

Meta-Llama-3-70B-Instruct (70.6B)

0,528

10

GigaChat-Pro 

0,511

11

GigaChat-Lite

0,500

-

YaGPT 4 Pro

0,488

12

Phi-3.5-MoE-instruct (41.9B) 

0,487

-

YaGPT 3 Pro

0,439

-

YaGPT 4 Lite

0,415

-

YaGPT 3 Lite

0,392

Бенчмарки

GigaChat MAX существенно прокачался относительно модели Pro и сильно развил умение решать математические задачи и писать код.

GigaChat Pro*

GigaChat MAX

Рост метрики

Математические задачи

GSM8K 8-shot

0,782

0,929

+18,8%

MATH 4-shot

0,446

0,53

+18,9%

Написание кода

HumanEval 0-shot

0,439

0,64

+45,8%

MBPP 0-shot

0,487

0,667

+37,0%

Общие знания

MMLU EN 5-shot

0,687

0,804

+17,1%

MMLU RU 5-shot

(бенчмарк MMLU RU, но в формате 5-shot)

0,645

0,75

+16,1%

MMLU RU 1-shot

0,617

0,718

+16,4%

MMLU PRO EN 5-shot

0,431

0,589

+36,7%

RUBQ 0-shot

0,724

0,73

+0,8%

WINOGRANDE 4-shot

0,796

0,832

+4,5%

CyberMetric 0-shot

0,827

0,864

+4,5%

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

IFEval 0-shot

0,566

0,721

+27,2%

* Прирост в процентном соотношении — сравнение с текущей моделью GigaChat‑Pro версии 26.20.

На открытых бенчмарках рост метрик составил 20 %, а на закрытых (часть из них мы позже выложим в открытый доступ вместе с наборами данных) мы выбили дополнительный рост качества на 13 %.

Все замеры производились в режиме жадной генерации (при генерации всегда выбирается токен с самой большой вероятностью): {top_p: 0, temperature: 1}. Также во время всех замеров выключался дополнительный фильтр безопасности.

Side-by-side

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

Важно: во всех SBS‑сравнениях ответы моделей получались с помощью параметров генерации по умолчанию (параметры генерации не передавались в API запросы).


В таком сравнении GPT4-turbo проигрывает GigaChat‑Max со счётом 49/51, YaGPT‑Pro‑v3 — cо счётом 44/56, а YaGPT‑Pro‑v4 — cо счётом 48/52 соответственно.

Без учета красоты ответа
Без учета красоты ответа
Подробности SBS против YaGPT-Pro-v3/v4

Внимательный глаз заметит, что на нашей корзине все три модели (GigaChat MAX, GPT4-turbo и YaGPT) отвечают достаточно хорошо на большинство вопросов. Поэтому ответы из категории both_good проходят дополнительную разметку: по уровню красоты ответа. Получается, что первая SBS‑оценка игнорирует красоту ответов, а вторая (результаты ниже) при равной правильности ответов выбирает более красивый.

Красота делает ответы структурированными, а их восприятие более комфортным. Мы добавили такой пример:

И вот теперь на SBS, учитывающих форму подачи ответов, GPT4-turbo проигрывает уже со счётом 39/61, YaGPT‑Pro‑v3 — cо счётом 31/69, а YaGPT‑Pro‑v4 — cо счётом 33/67 соответственно.

Учитываем красоту ответа
Учитываем красоту ответа
Теперь учитываем красоту ответа, подробности SBS против YaGPT-Pro-v3/v4

Нам важно было создать модель, которая отвечает как минимум на уровне GPT4 (и мы даже обогнали GPT4-turbo), поэтому дальше будем сравниваться только с моделями GPT4-o (и старше, если выйдут).

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

  1. Вопросы корзины стали слишком простыми для современных моделей, и мы заняты значительным усложнением SBS‑вопросов.

  2. Даже будь пункт 1 решённым, замеры остаются закрытыми и таким метрикам людям извне остается только доверять (или не доверять). Этот пункт общий вообще для всех SBS‑сравнений.

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

Judge-метрики

Примечания:

  • Все представленные модели замерялись через API.

  • Модели GigaChat/GigaChat-Pro/GigaChat‑Max, фигурирующие во всех замерах, доступны в режиме preview по ссылке

MT-Bench Ru

MT‑Bench используется для оценки разговорных возможностей, способности следовать инструкциям. В этом бенчмарке судья (другая LLM) выставляет оценки ответу модели в интервале от 0 до 10. В конце оценки за все ответы усредняются.

Замер производился на оригинальном репозитории lmsys, также использовался такой перевод вопросов. В качестве судьи выступала модель GPT-4. Для генераций использовались параметры генерации из репозитория, причём если категория вопроса не фигурирует в конфиге, то используется температура 0,7.

Для моделей мы проводили замеры несколькими способами. Вот их описание:

  • wo_filter — в замере выключен фильтр безопасности, w_filter — свидетельствует об обратном (то есть фильтр включен).

  • OS — в модель передавалось системное сообщение от OpenAI. Отсутствие OS в названии означает, что замер производился с системной инструкцией по умолчанию (в запросе отсутствовало системное сообщение).

Arena-Hard-En

Этот бенчмарк содержит разнообразные вопросы преимущественно технической направленности, такие как задачи по математике, программированию, машинному обучению и другим областям. Замер производился на оригинальном репозитории. В отличие от MT‑Bench оценка моделей происходит совершенно иным образом. Судья (другая LLM) не проставляет оценку, а сравнивает два ответа: кандидата и базовой модели. На основе этих пар и строится итоговый рейтинг. У базовой модели в таком замере итоговый результат всегда равен 50.

Как и предусматривает бенчмарк, тут использовались жадные параметры генерации. Для моделей GigaChat использовались параметры:

temperature: 1.0, 
top_p: 0.0

Для остальных моделей:

temperature: 0.0

Почему такие параметры идентичны, объяснит GigaChat:

Модель‑судья — gpt-4–1106-preview. Базовой моделью выступила gpt-4–0314.

Разницу метрик GigaChat и GigaChat Pro с различными системными промптами можно легко объяснить: с системным сообщением по умолчанию (написано на русском) модель довольно часто отвечала на русском языке, в таких ситуациях судья всегда отдавал предпочтение базовой модели.

Arena-Hard-Ru

Бенчмарк является точной копией предыдущего, только вопросы переведены на русский язык, для прогонов был использован этот перевод. Единственное отличие от замера на английском языке: базовой моделью была выбрана gpt-4–0613. Все остальные параметры полностью совпадают с Arena‑Hard‑En.

Артефакты замеров GigaChat и моделей OpenAI (генерации моделей и судейства) можно подробно изучить в этом репозитории.

Arena-General-Ru

Ещё одна арена на русском с 500 уникальными вопросами. Все замеры проводились с помощью оригинального репозитория, а моделью-судьей выступила GPT4o. Скриншот из лидерборда покажем ниже:

Итог арен:

Смесь метрик SBS, арен, автометрик и замеров на бенчмарках показывает, что GigaChat‑Max получился очень хорошей моделью. И всё же нам ещё есть куда тянуться ;)

GigaAlignment

Красота

На значимость красоты ответов обратили особое внимание после появления платформ вроде LLM‑arena, где пользователи могут сравнивать ответы разных моделей между собой. Такие платформы фактически привели к новой «гонке за качество», где модели вынуждены стремиться не только к точности, но и к структурированности, ясности и эстетике подачи информации в своих ответах.

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

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

Сделать ответы красивыми — отдельный вызов

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

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

Переиспользование и структурирование данных

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

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

  2. Сравнение: проверка, действительно ли новый ответ лучше старого.

  3. Валидация ответа: подтверждение соответствия улучшенного ответа установленным требованиям.

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

Только после этого данные могут попасть в обучение новой модели.

Схема разметки данных. Как мы делали ответы красивыми
Схема разметки данных. Как мы делали ответы красивыми

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

  1. Определяем структуру текста:

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

    • Если ответ короткий или не очень сложный, то стараемся использовать выделение ключевых/технических терминов (подробнее об этом будет чуть ниже).

  2. Как используем списки:

    • Нумерованные списки: используем, когда порядок важен (например, этапы приготовления борща).

    • Маркированные списки: применяем для перечислений, когда порядок не имеет значения.

  3. Выделение ключевых терминов:

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

    • Курсив стараемся использовать для выделения определений или акцентирования внимания на специфичных словах.

  4. Код и технические термины:

    • Используем одинарные кавычки (`функция`) для выделения названий функций, переменных и команд.

    • Для многократных строк кода используем тройные кавычки (```python <здесь код>```) для создания блока кода.

  5. Примеры и иллюстрации:

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

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

  6. Используем визуальные акценты:

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

Так мы научили GigaChat MAX давать не только точные, но и красивые ответы.

STEM. Science Crowd

В начале этого года мы поставили амбициозную цель — улучшить качество данных в доменах STEM (Science (наука), Technology (технологии), Engineering (инженерия) и Mathematics (математика)) и создать более надёжные инструменты для анализа и обучения в этих областях. И эту идею реализовали, создав сообщество специалистов из топовых вузов, готовых помочь нам собрать набор данных. Так появился Science Crowd — проект, созданный для улучшения доменов STEM через сбор и разметку данных.

Почему именно оттуда? 

Данные — это основа, на которой строятся модели машинного обучения, и качество напрямую зависит от того, насколько качественно размечены данные. При этом домены STEM требуют глубокой погруженности в тематику, которая часто сложна для поверхностного понимания. Требования к качеству и актуальности данных могут быть удовлетворены лишь в тесной работе с людьми, обладающими не только знаниями, но и свежим взглядом. Поэтому выбор пал на сотрудничество с университетами: они изучают актуальные вопросы и методы, работают с новыми подходами, и их выпускники и сотрудники всегда стремятся к профессиональному развитию.

Как нам это помогло

Благодаря проекту Science Crowd удалось повысить качество моделей GigaChat на задачах из области STEM, а также достичь роста метрик на многих бенчмарках, например на MATH и GSM8k. MATH охватывает задачи от средней школы до начальных университетских курсов, а GSM8k состоит в основном из школьных задач на вычисления. Каждый набор данных содержит как тестовые задачи, так и задачи для обучения. В обучающих наборах есть существенный недостаток: рассуждения в эталонных ответах сжаты и не подробные.

Учитывая недостатки open‑source обучающих наборов, мы решили готовить данные в формате «цепочки рассуждений» (chain‑of‑thoughts, CoT), чтобы модель могла проходить шаги решения поэтапно. Этот подход помогает модели лучше ориентироваться в логике задачи, улучшая её способность решать схожие задачи в будущем. При этом каждое решение было проверено нашими экспертами.

Примеры: 

  1. Раз

  2. Два

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

Результаты GigaChat‑Max сопоставимы с метриками лучших моделей, таких как GPT-4, хотя модель всё ещё уступает некоторым из них: 53 % на MATH и 92 % на GSM8k.

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

Метрики

Test sets (accuracy)

model

SC* Math

SC* Biology

SC* Chemistry

MATH

GSM8k

chatgpt-4o-latest

0,68

0,81

0,57

0,73

0,92

GigaChat-Max

0,66

0,73

0,58

0,53

0,92

GPT-4

0,64

0,74

0,54

0,52

0,92

GigaChat-Pro 

0,59

0,68

0,49

0,45

0,78

*SC — Science Crowd

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

  • MATH — бенчмарк с математическими задачами уровня от средней школы до первых курсов университета, с четырьмя few‑shot-примерами.

  • GSM8K — бенчмарк cо школьными задачами уровня начальной и средней школы, с пятью few‑shot-примерами.

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

Диалоги и работа с функциями

За всё время обучения моделей мы постоянно расширяли экспертизу, а с каждой новой итерацией становилось всё больше требований к данным. Наши данные должны удовлетворять следующим критериям:

  • фактологическая правильность, безопасность и «красивость» ответов;

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

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

И критериев становится всё больше, поэтому мы хотим анонсировать будущую статью о наших проектах и методах разметки для формирования SFT‑наборов. У нас много опыта в создании разнообразных SFT‑данных, и мы обязательно поделимся им с вами. Сегодня же остановимся на функциях.

Что такое функции и зачем они нужны?

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

Хотя модель не исполняет функции сама, она лично определяет, когда и как использовать их, исходя из своего понимания текущего разговора, данных и описания доступной функции.

Как работать с пользовательскими функциями?

Главный шаг к созданию функции — это разработка её описания в виде JSON‑схемы (своеобразной документации, по которой модель будет пользоваться вашим инструментом). Получив в контексте описание вашей функции, модель автоматически определяет необходимость вызова. Все модели GigaChat всё лучше работают с пользовательскими функциями, которые вы реализуете и исполняете самостоятельно.

Несколько примеров функций:

  • запрос на поиск информации в базе данных;

  • поиск в интернете по запросу и параметрам;

  • изменение статуса устройств умного дома;

  • вычисление математической формулы;

  • создание изображения по текстовому запросу с помощью сторонней нейронной сети.

Подробнее про работу с пользовательскими функциями читайте в документации или примере кода для использования функций в GigaChain.

Развитие GigaChat в навыке вызова функций

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

  • 0-shot функции — здесь мы используем множество собранных и сгенерированных описаний. Цель этого домена — научить модель работать с различными функциями.

  • in‑house функции — они включают в себя наиболее сложные примеры функций, используемых во внутрибанковских продуктах, в том числе в агентных системах.

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

GigaChat Pro*

GigaChat MAX

Recall

0,95

0,99

TNR (True Negative Rate)

0,94

0,98

Интересным преимуществом нашей модели является более функциональный API использования функций (например, в сравнении с OpenAI), позволяющий модели также работать с описаниями возвращаемых значений. Это делает вызовы ещё точнее, предоставляя модели больше информации о доступной функциональности.

Примеры используемых нами описаний (осторожно, под катом много кода :)):

Установить напоминания (set_reminder):
{
    "name": "set_reminder",
    "description": "Установить напоминание. Данная функция используется, если пользователь хочет установить напоминание или просит напомить о каком-либо событии.\nЕсли, зная текущее время и дату, по запросу пользователя можно однозначно определить на какое время установить напоминание, то вызови данную функцию, иначе - переспроси, например, \"На какое время?\".\nПосле вызова данной функции ответь пользователю, какое напоминание установлено.",
    "parameters": {
        "type": "object",
        "properties": {
            "title": {
                "type": "string",
                "description": "Текст напоминания"
            },
            "date_time": {
                "type": "string",
                "description": "Дата и время напоминания. Могут быть указаны относительно сегодняшнего дня (например, \"завтра\" или \"через неделю\"). Указание времени обязательно, дата может быть не указана. Используй формат, в котором дата и время переданы в запросе пользователя."
            },
            "device_name": {
                "type": "string",
                "description": "Название устройства, на котором будет создано напоминание. Это может быть sberboom, sberbox или другое устройство от SberDevices. Если пользователь явно не указал устройство - оставляй device_name пустым."
            },
            "room": {
                "type": "string",
                "description": "Название комнаты, где нужно озвучить напоминание. Старайся указывать название в именительном падеже. Если пользователь явно не указал комнату - оставляй поле room пустым."
            }
        },
        "required": [
            "title",
            "date_time"
        ]
    },
    "few_shot_examples": [
        {
            "request": "создай напоминание полить цветы на кухне завтра с утра",
            "params": {
                "title": "полить цветы",
                "date_time": "завтра с утра",
                "room": "кухня"
            }
        },
        {
            "request": "напомни вечером в 9 сделать разминку",
            "params": {
                "title": "сделать разминку",
                "date_time": "вечером в 9"
            }
        },
        {
            "request": "напомни через пять минут лекарства",
            "params": {
                "title": "лекарства",
                "date_time": "через пять минут"
            }
        },
        {
            "request": "скажи мне выключить насос через десять минут",
            "params": {
                "title": "выключить насос",
                "date_time": "через десять минут"
            }
        },
        {
            "request": "напомни в 3 часа за хлебом",
            "params": {
                "title": "за хлебом",
                "date_time": "в 3 часа"
            }
        },
        {
            "request": "через час напомни за максимкой",
            "params": {
                "title": "за максимкой",
                "date_time": "через час"
            }
        },
        {
            "request": "скажи налить воды в 7 часов",
            "params": {
                "title": "налить воды",
                "date_time": "в 7 часов"
            }
        }
    ],
    "return_parameters": {
        "type": "object",
        "properties": {
            "status": {
                "type": "string",
                "enum": [
                    "success",
                    "fail"
                ],
                "description": "Статус - удалось ли установить напоминание."
            },
            "error": {
                "type": "string",
                "description": "Текст ошибки в случае, если status == fail"
            },
            "reminder": {
                "type": "object",
                "description": "Параметры созданного напоминания",
                "properties": {
                    "id": {
                        "type": "string",
                        "description": "Идентификатор напоминания, например '2afbbcd1-0906-45a0-a33a-9553d50c1575'."
                    },
                    "cron": {
                        "type": "string",
                        "description": "Описание периодичности напоминания. Например, \"каждый день\". Если напоминание одноразовое, то поле пустое."
                    },
                    "title": {
                        "type": "string",
                        "description": "Название напоминания, о чем надо напомнить."
                    },
                    "devices": {
                        "type": "array",
                        "description": "Словарь устройств, к которым привязаны напоминания",
                        "items": {
                            "type": "string",
                            "description": "Название устройства"
                        }
                    },
                    "reminderTime": {
                        "type": "string",
                        "description": "Дата и время старта напоминания, например 'завтра в 13 часов 23 минуты'"
                    },
                    "createdAt": {
                        "type": "string",
                        "description": "Дата и время создания напоминания, например, 'сегодня в 9 часов 47 минут 40 секунд'"
                    }
                }
            }
        },
        "required": [
            "status"
        ]
    }
}

Узнать погоду (get_weather (no_return)):
{
    "name": "get_weather",
    "description": "Позволяет узнать погоду.\nПосле получения данных от функции отвечай в стиле: \"Сейчас в Ростове-на-Дону пасмурно температура плюс 4 градуса и поднимается ветер. Такая погода продлится до ночи, ночью в среднем температура будет три градуса.\" или в таком стиле: \"Сейчас в Томске ясно, температура плюс 4 градуса, но безветренно. Днём температура повысится до шестнадцати градусов, a ночью опустится до девяти градусов.\".\nЕсли пользователь не просит точное значение ветра, то вместо цифр используй в ответе: если ветер 0 м/c - это штиль; если 1 м/с - ветра почти нет; если 2 м/с - немного ветренно; 3 м/с - ветрено; 4 м/с - ветер; 11 м/с - сильный ветер; 18 м/с - штормовой ветер; 21 м/с - сильный шторм; 25 м/с - буря; 30 м/с - ураган.\nВ случае ошибки про получении информации ответь пользователяю, используя поле error, например, \"К сожалению, у меня есть данные только на 9 дней\".",
    "parameters": {
        "type": "object",
        "properties": {
            "location": {
                "type": "string",
                "description": "Локация (страна, регион, город, море и тп.) в которой нужно узнать погоду. Указывается в именительном падеже на русском языке с большой буквы."
            },
            "date_time": {
                "type": "string",
                "description": "Время и дата (могут быть относительными, например, \"завтра\", \"через 1 час\", \"вечер\"), за которое необходимо узнать погоду.\nЗаполняется напрямую из запроса пользователя на языке запроса.\nЕсли пользователь не указал в запросе период или момент времени, то оставь поле пустым."
            },
            "specific_parameter": {
                "type": "string",
                "description": "Указывается, только если пользователь в своем запросе запрашивает определенный параметр о погоде. Допускаются вопросы о следующих параметрах: давление, температура воды, влажность воздуха, температура воздуха, осадки, направление ветра, скорость ветра. Например, если пользователь просит температуру или спрашивает сколько градусов, то передай параметр \"temperature\".",
                "enum": [
                    "pressure",
                    "water_temperature",
                    "humidity",
                    "temperature",
                    "precipitation_amount",
                    "wind_direction",
                    "wind_speed"
                ]
            }
        },
        "required": []
    },
    "few_shot_examples": [
        {
            "request": "какая сейчас температура?",
            "params": {
                "date_time": "сейчас",
                "specific_parameter": "temperature"
            }
        },
        {
            "request": "сколько градусов на улице",
            "params": {
                "specific_parameter": "temperature"
            }
        },
        {
            "request": "какое атмосферное давление",
            "params": {
                "specific_parameter": "pressure"
            }
        },
        {
            "request": "какая погода через 3 дня в москве",
            "params": {
                "date_time": "через 3 дня",
                "location": "Москва"
            }
        },
        {
            "request": "какая погода на этой неделе во франции",
            "params": {
                "date_time": "эта неделя",
                "location": "Франция"
            }
        },
        {
            "request": "будут ли сегодня вечером осадки",
            "params": {
                "date_time": "вечер",
                "specific_parameter": "precipitation_amount"
            }
        },
        {
            "request": "брать ли мне с собой зонтик сегодня на прогулку?",
            "params": {
                "date_time": "сегодня",
                "specific_parameter": "precipitation_amount"
            }
        }
    ]
}

Агенты

Мы уже начали применять GigaChat MAX в агентных системах (готовим пост для Telegram‑канала и статью на Хабр), модель отлично показывает себя в качестве основы для построения агентных и мультиагентных систем. На базе GigaChain, GigaChat МAX и adaptive RAG мы сделали внутреннего бота техподдержки, и он показал прирост точности и качества ответов с 75 % (Pro) до 87 % (Max).

Giga токенизатор

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

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

В приведённых ниже замерах мы демонстрируем возросшую эффективность кодирования GigaChat MAX по сравнению с предшественником. В таблице: чем больше число (степень сжатия текста), тем лучше.

characters / token

model

code_go

code_python

math

LaTex

text_en

text_ru

GigaChat-Max

2,920

4,247

1,271

1,794

4,377

4,085

GigaChat-Pro

2,466

3,552

1,283

2,146

4,069

3,571

Борьба с циклами в GigaChat

Одна из самых назойливых проблем больших языковых моделей — зацикливание при генерациях ответов. Далеко ходить не надо: самый первый комментарий к одной из наших статей был про циклы :)

Проблема общая для всей технологии и проявляется даже у мировых лидеров отрасли. Существующие общеизвестные штрафы в популярных библиотеках (frequency_penalty, presence_penalty, no_repeat_n_gram и т. д.) не решают поставленную задачу, а в некоторых случаях явно портят генерацию.

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

Естественно, антициклы надо включать не всегда:

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

  • различные юридические документы, использующие одни и те же термины, не должны быть нами искажены;

  • то же самое касается и фактологии;

  • если попросить модель повторить что‑то, она должна это повторить.

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

Не только для разработчиков

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

А для тех, кому нужно кастомизировать GigaChat под себя, мы создали удобный интерфейс и назвали его Studio. В нём вы можете за пару кликов:

  • создавать ботов под свои задачи;

  • настраивать параметры API под себя (пока что это температура генерации и длина ответа);

  • тестировать различные систем‑промпты;

  • и многое другое.

Чтобы попробовать, воспользуйтесь нашей инструкцией: мы обсудим, как сделать из GigaChat помощника на итальянском!

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

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

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

  1. Вводите промпт (в переводе на русский: «Ты Гигачат. Отвечай на запросы пользователей.») и получаем GigaChat'a-итальянца!

    «Tu sei GigaChat. Rispondere alle richieste degli utenti.»

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

Вместо заключения

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

И ещё раз об изюминке статьи — команда GigaChat запускает свой telegram‑канал (подписывайтесь), где мы расскажем больше об искусственном интеллекте, новейших технологиях и о том, как GigaChat становится умнее с каждым днем!

Stay tuned! :) 


Благодарности

Хотелось бы сердечно поблагодарить:

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

  • Сообщество экспертов, которые помогли в создании уникальных STEM-данных.

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

  • И, наконец, огромное спасибо Евгению Косареву (@evgenijkkk), Федору Минькину (@fminkin), Григорию Лелейтнеру (@RunFMe), Никите Савушкину, Сергею Порхуну, Владимиру Карлову, Виктории Аленчик, Никите Пастухову, Дарье Латорцевой, Эльдару Дамирову, Константину Крестникову (@Rai220), Сергею Маркову (@oulenspiegel), Сергею Аверкиеву (@averkij) и GigaChat‑Max (и он тоже ;)) за написание этого текста, большое количество полезных правок и дельных замечаний, сделавших обзор намного ярче и лучше.