GigaChat 3 Ultra: как я тестировал параллельные вызовы функций

GigaChat 3 Ultra: как я тестировал параллельные вызовы функций

Зачем вообще параллельные инструменты

У меня агент часто тянет несколько независимых фактов: статус отгрузки и остаток на складе. Раньше модель звала их по очереди — один запрос, пауза, второй запрос. 6 октября 2026 в GigaChat API появился parallel_tool_calls, но только для GigaChat 3 Ultra. На контур юрлица это пока не перетащить — Ultra там недоступна.

Как раньше выкручивался

Сначала я пытался прописать в промпте «вызови оба инструмента». Модель всё равно возвращала один. Потом просто дёргал оба справочника из кода сам. Быстрее, но агент переставал решать — тянул даже то, что не требовалось.

Параллельный режим — третий вариант. Модель сама кладёт несколько вызовов в один ответ, а мой код их исполняет.

Что реально появилось в API

Нужно слать POST /v2/chat/completions с model_options.parallel_tool_calls и указывать GigaChat-3-Ultra. Обычный /v1 этого не понимает. Доступ только у физлиц на Freemium, юрлица и платные тарифы Ultra пока не видят.

Как я проверял на личном ключе

Боевой контур не трогал — запустил на своём Freemium-ключе. Две независимые функции: статус заказа и остаток. Смотрел не на текст, а на состав ответа — нужны оба вызова сразу.

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

Где всё ломается

  • Доступ. Юрлицо Ultra не получит.
  • Зависимые шаги. Если второй инструмент без первого бессмыслен, параллельность только навредит.
  • Неполный ответ. Пришёл один вызов — агент не должен зависнуть.
  • Побочные эффекты. Параллельно читать можно, писать в одну запись — уже гонка.

Что я заложил в код

Сейчас код принимает список вызовов, даже если там почти всегда один элемент. Когда Ultra откроют, просто добавлю поле в запрос.

Инструменты описываю так, чтобы аргументы были известны сразу. Общие данные на этом шаге не трогаю. Ошибки считаю по каждому инструменту отдельно — упал склад, статус заказа всё равно покажу.

Не ставлю parallel_tool_calls на /v1 и на других моделях — тихий отказ хуже явной очереди.

Вывод

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

У тебя в сценариях инструменты на одном шаге правда независимы?