Зачем вообще параллельные инструменты
У меня агент часто тянет несколько независимых фактов: статус отгрузки и остаток на складе. Раньше модель звала их по очереди — один запрос, пауза, второй запрос. 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 закрыта для платного контура, имеет смысл сразу учить агента работать со списком вызовов и разделять независимые чтения от зависимых. Тогда открытие модели станет просто сменой параметра, а не переделкой всей логики.
У тебя в сценариях инструменты на одном шаге правда независимы?
