ДиспетчерПровайдеровИИ_зи
Возможности сервисов помимо запроса по промту — модели решений, эмбеддинги, изображения, речь, видео — и операции из нескольких обращений.
Модуль даёт прямой доступ к возможностям сервиса провайдера. Для запроса к модели удобнее ВыполнитьЗапросПоПромту: он сам собирает сообщения из промта, подбирает под модель режим схемы ответа и уровень рассуждений, проверяет ответ. Диспетчер нужен, когда:
требуется другая возможность сервиса — вопросы к модели решений, эмбеддинги, изображения, речь, видео;
операция состоит из нескольких обращений, и нужны их общий расход и общая операция в журнале запросов.
Где вызывать и что такое единый результат — в разделе Программный интерфейс.
Возможности
Возможность задаётся строкой — точным именем из таблицы.
Возможность | Что делает | RouterAI | Yandex |
| Запрос к модели с вашими сообщениями | да | да |
| Ответы модели решений на вопросы: выбор варианта, да или нет, оценка по уровням | да | — |
| Перечень моделей сервиса | да | да |
| Проверка подключения | да | да |
| Векторные представления текста | да | да |
| Изображение по текстовому описанию | да | да |
| Текст из аудиозаписи | да | — |
| Аудиозапись из текста | да | — |
| Запуск генерации видео | да | — |
| Статус задачи генерации видео | да | — |
| Результат задачи генерации видео | да | — |
Неподдерживаемая возможность отклоняется до обращения к сети с кодом 400. Проверить заранее можно функцией ВозможностьПоддерживается.
Если модель из параметров есть в справочнике моделей провайдера, диспетчер сверяет запрос с её каталогом — входом и выходом модели. До обращения к сети с кодом 400 отклоняются:
файл, которого модель не принимает, — например, изображение для модели, которая по каталогу читает только текст;
ЧатЗавершенияс моделью решений иРешенияс моделью, у которой нет выхода «решения».
Если модели нет в справочнике или вход и выход у неё в каталоге не указаны, запрос уходит без этой проверки.
ВыполнитьВозможность
Выполняет одно обращение к сервису провайдера.
Функция ВыполнитьВозможность(Провайдер, Возможность, Параметры = Неопределено, Сессия = Неопределено) Экспорт
Параметр | Тип | Описание |
| СправочникСсылка.ПровайдерыИИ_зи | Провайдер с заданным видом и признаком «Используется». |
| Строка | Имя возможности из таблицы выше. |
| Структура, Неопределено | Параметры возможности, см. ниже. Значение другого типа считается пустыми параметрами. |
| Структура, Неопределено | Сессия из |
Возвращаемое значение. Единый результат, дополненный полем Сведения (см. ниже).
Исключение. Непредвиденный сбой во время обращения записывается в журнал запросов с кодом 500, после чего исключение передаётся вызывающему.
Параметры возможностей
Обязательные ключи выделены жирным. Пропущенный обязательный ключ — отказ 400 с перечнем недостающих.
Для всех возможностей необязателен Таймаут (Число) — сколько секунд ждать ответа, по умолчанию 180. Ноль или не число — отказ 400.
Модель — Строка, идентификатор модели в том виде, в каком он записан в справочнике моделей. К формату сервиса коннектор приводит его сам; полный идентификатор сервиса (содержит ://) уходит как есть.
ЧатЗавершения
Ключ | Тип | Описание |
| Строка | Идентификатор модели. |
| Массив из Соответствие | Сообщения чата с ключами |
| Число | 0 — не передаётся, модель берёт своё значение. |
| Число | Лимит токенов ответа; 0 — не передаётся. |
| Массив из Структура | Файлы с ключами |
| Соответствие | Поля запроса в формате API сервиса ( |
| Соответствие | JSON Schema ответа. Действует только вместе с |
| Строка |
|
| Строка | Например, |
| Строка |
|
Данные — Соответствие с ответом сервиса в формате OpenAI-совместимого API (choices, usage). Текст ответа проще взять из Сведения.Ответ.
Решения
Модель решений не пишет текст: она оценивает то, что ей показали (состояние), и отвечает на заданные вопросы с вероятностями. Такие модели в справочнике моделей отмечены выходом «решения», например openai/gpt-6-luna-decisions. Вызывать их через ЧатЗавершения нельзя, а через ВыполнитьЗапросПоПромту — можно: промт с моделью решений сам уходит этой возможностью.
Ключ | Тип | Описание |
| Строка | Идентификатор модели решений. |
| Соответствие, Структура | Ключ — имя вопроса, под ним вернётся ответ. Значение — Структура или Соответствие с ключами |
| Строка, Соответствие, Массив | Что модель оценивает: текст, данные (уйдут JSON) или массив строк. Можно не передавать, если есть |
| Массив из Структура | Изображения с ключами |
Температура, лимит токенов, уровень рассуждений, схема ответа и дополнительные параметры у этой возможности не передаются.
Вопрос:
| Что отвечает модель |
|
| Один вариант из списка | Обязательно, от 1 до 255 вариантов: Массив имён вариантов или Соответствие «вариант → описание» (описание может быть пустым). |
| Вероятность ответа «да» | Необязательно: Структура с ключами |
| Уровень на шкале | Обязательно, от 2 до 10 уровней: Массив описаний уровней по порядку, от нулевого. |
Инструкция (Строка) обязательна — что именно оценить.
Ограничения сервиса проверяются до обращения к сети, отказ — код 400 с причиной: неизвестный тип вопроса, пустая инструкция, число вариантов или уровней вне пределов, нет ни состояния, ни файлов, неподходящий тип или число файлов, тело запроса больше 4 500 000 байт. Изображения уходят в тело в Base64 — это примерно на треть больше их размера, поэтому в сумме они должны занимать не больше 3,3 МБ.
Данные — Соответствие с ответом сервиса как есть. Удобнее брать ответы из Сведения.Решения.
Сведения.Решения — Соответствие: ключ — имя вопроса, значение — Структура:
Поле | Тип | Описание |
| Строка |
|
| Строка, Число, Неопределено |
|
| Соответствие, Неопределено | Вариант или номер уровня строкой → вероятность от 0 до 1. |
| Число, Неопределено | Уверенность модели в ответе, от 0 до 1. |
| Соответствие, Неопределено | Для |
Сервис сообщает токены запроса и ответа. Стоимость он сообщает отдельно, и коннектор запрашивает её сам — см. расход.
Вопрос = Новый Структура; Вопрос.Вставить("Тип", "Выбор"); Вопрос.Вставить("Инструкция", "Что на снимке: документ на листе, кассовая лента или не документ?"); Вопрос.Вставить("Критерии", СтрРазделить("sheet,tape,other", ",")); Вопросы = Новый Соответствие; Вопросы.Вставить("kind", Вопрос); Файлы = Новый Массив; Файлы.Добавить(Новый Структура("ИмяФайла, ДанныеФайла", "scan.jpg", ДанныеСнимка)); Параметры = Новый Структура; Параметры.Вставить("Модель", "openai/gpt-6-luna-decisions"); Параметры.Вставить("Вопросы", Вопросы); Параметры.Вставить("Файлы", Файлы); Результат = ДиспетчерПровайдеровИИ_зи.ВыполнитьВозможность(Провайдер, "Решения", Параметры); Если Результат.Успешно Тогда Ответ = Результат.Сведения.Решения.Получить("kind"); ВидНосителя = Ответ.Значение; // "tape" Уверенность = Ответ.Уверенность; // 0.97 КонецЕсли;
Остальные возможности
Возможность | Параметры | Данные при успехе |
|
| Соответствие: в |
|
| Соответствие: в |
|
| Соответствие: текст — в |
|
| Структура HTTP-ответа: звук — в поле |
|
| Соответствие — ответ сервиса о созданной задаче. |
|
| Соответствие — ответ сервиса, статус в |
|
| Соответствие — ответ сервиса. |
| — | Соответствие: перечень моделей в |
Состав ответов видео-возможностей определяет сервис — сверяйтесь с документацией RouterAI.
Сведения
Сведения — Структура с подробностями обращения. Есть в результате всегда, кроме отказа из-за транзакции.
Поле | Тип | Описание |
| Строка | Для |
| Соответствие, Неопределено | Только для |
| Строка | Почему модель закончила ответ ( |
| Строка | Модель, которую назвал сервис. |
| Строка | Поставщик, которому RouterAI переслал запрос. |
| Число | Токены обращения — в том же смысле, что в расходе. |
| Число, Строка | Стоимость, сообщённая сервисом; пустая валюта — не сообщена. |
| Число | Время обращения, мс. |
Остальные поля описывают отправленный запрос — модель, температуру, таймаут, тексты — и повторяют то, что показывает журнал запросов.
Пример
Функция ВекторыТекстов(Провайдер, Тексты) Параметры = Новый Структура; Параметры.Вставить("Модель", "openai/text-embedding-3-small"); // как в справочнике моделей Параметры.Вставить("ВходныеДанные", Тексты); Результат = ДиспетчерПровайдеровИИ_зи.ВыполнитьВозможность(Провайдер, "Эмбеддинги", Параметры); Если НЕ Результат.Успешно Тогда ВызватьИсключение Результат.ОписаниеОшибки; КонецЕсли; Векторы = Новый Массив; Для Каждого Элемент Из Результат.Данные.Получить("data") Цикл Векторы.Добавить(Элемент.Получить("embedding")); КонецЦикла; Возврат Векторы; КонецФункции
НоваяСессия
Создаёт сессию — операцию из нескольких обращений. Обращения одной сессии объединяются в журнале запросов идентификатором операции, а их расход накапливается в сессии.
Функция НоваяСессия(Провайдер, Промт = Неопределено, Модель = Неопределено) Экспорт
Параметр | Тип | Описание |
| СправочникСсылка.ПровайдерыИИ_зи | Провайдер операции. |
| СправочникСсылка.ПромтыИИ_зи, Неопределено | Промт, к которому журнал отнесёт обращения. На сам запрос не влияет. |
| СправочникСсылка.МоделиИИ_зи, Неопределено | Модель для журнала; не передана — журнал найдёт её в справочнике по идентификатору из параметров. |
Возвращаемое значение. Структура. Вам может пригодиться поле ИдентификаторОперации (УникальныйИдентификатор) — отбор обращений операции в журнале. Остальные поля служебные: не меняйте их и не собирайте сессию сами. Сессия привязана к провайдеру — для другого провайдера создайте свою.
Сессия = ДиспетчерПровайдеровИИ_зи.НоваяСессия(Провайдер); Для Каждого Порция Из ПорцииТекстов Цикл Параметры = Новый Структура("Модель, ВходныеДанные", ИдентификаторМодели, Порция); Результат = ДиспетчерПровайдеровИИ_зи.ВыполнитьВозможность(Провайдер, "Эмбеддинги", Параметры, Сессия); Если НЕ Результат.Успешно Тогда Прервать; КонецЕсли; // Обработка векторов порции. КонецЦикла; Расход = ДиспетчерПровайдеровИИ_зи.ЗавершитьОперацию(Сессия, Результат);
ЗавершитьОперацию
Закрывает операцию сессии и возвращает её расход.
Функция ЗавершитьОперацию(Сессия, Результат) Экспорт
Параметр | Тип | Описание |
| Структура | Сессия из |
| Структура | Итог операции с полями |
Возвращаемое значение. Структура — расход всех обращений сессии (копия).
Если Результат.Успешно = Ложь, а последнее обращение к сервису прошло успешно (операция не удалась по вашей причине — например, ответ не прошёл вашу проверку), ОписаниеОшибки дописывается к последней записи операции в журнале. Вызывать метод не обязательно, но без него не будет ни общего расхода, ни этой отметки.
ВозможностьПоддерживается
Проверяет без обращения к сети, поддерживает ли провайдер возможность, — например, чтобы скрыть команду, которую сервис не выполнит.
Функция ВозможностьПоддерживается(Провайдер, Возможность) Экспорт
Параметры. Провайдер — СправочникСсылка.ПровайдерыИИ_зи; Возможность — Строка.
Возвращаемое значение. Булево. Ложь — и для провайдера, которого нет или у которого не задан вид. Признак «Используется» и настройки подключения не проверяются.