ДиспетчерПровайдеровИИ_зи

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

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

  • требуется другая возможность сервиса — вопросы к модели решений, эмбеддинги, изображения, речь, видео;

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

Где вызывать и что такое единый результат — в разделе Программный интерфейс.

Возможности

Возможность задаётся строкой — точным именем из таблицы.

Возможность

Что делает

RouterAI

Yandex

ЧатЗавершения

Запрос к модели с вашими сообщениями

да

да

Решения

Ответы модели решений на вопросы: выбор варианта, да или нет, оценка по уровням

да

—

СписокМоделей

Перечень моделей сервиса

да

да

ПроверкаПодключения

Проверка подключения

да

да

Эмбеддинги

Векторные представления текста

да

да

ГенерацияИзображений

Изображение по текстовому описанию

да

да

РаспознаваниеРечи

Текст из аудиозаписи

да

—

СинтезРечи

Аудиозапись из текста

да

—

СозданиеЗадачиВидео

Запуск генерации видео

да

—

СтатусЗадачиВидео

Статус задачи генерации видео

да

—

РезультатЗадачиВидео

Результат задачи генерации видео

да

—

Неподдерживаемая возможность отклоняется до обращения к сети с кодом 400. Проверить заранее можно функцией ВозможностьПоддерживается.

Если модель из параметров есть в справочнике моделей провайдера, диспетчер сверяет запрос с её каталогом — входом и выходом модели. До обращения к сети с кодом 400 отклоняются:

  • файл, которого модель не принимает, — например, изображение для модели, которая по каталогу читает только текст;

  • ЧатЗавершения с моделью решений и Решения с моделью, у которой нет выхода «решения».

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

ВыполнитьВозможность

Выполняет одно обращение к сервису провайдера.

Функция ВыполнитьВозможность(Провайдер, Возможность, Параметры = Неопределено, Сессия = Неопределено) Экспорт

Параметр

Тип

Описание

Провайдер

СправочникСсылка.ПровайдерыИИ_зи

Провайдер с заданным видом и признаком «Используется».

Возможность

Строка

Имя возможности из таблицы выше.

Параметры

Структура, Неопределено

Параметры возможности, см. ниже. Значение другого типа считается пустыми параметрами.

Сессия

Структура, Неопределено

Сессия из НоваяСессия. Не передана — обращение становится отдельной операцией.

Возвращаемое значение. Единый результат, дополненный полем Сведения (см. ниже).

Исключение. Непредвиденный сбой во время обращения записывается в журнал запросов с кодом 500, после чего исключение передаётся вызывающему.

Параметры возможностей

Обязательные ключи выделены жирным. Пропущенный обязательный ключ — отказ 400 с перечнем недостающих.

Для всех возможностей необязателен Таймаут (Число) — сколько секунд ждать ответа, по умолчанию 180. Ноль или не число — отказ 400.

Модель — Строка, идентификатор модели в том виде, в каком он записан в справочнике моделей. К формату сервиса коннектор приводит его сам; полный идентификатор сервиса (содержит ://) уходит как есть.

ЧатЗавершения

Ключ

Тип

Описание

Модель

Строка

Идентификатор модели.

Сообщения

Массив из Соответствие

Сообщения чата с ключами role (system, user, assistant) и content (Строка). Именно Соответствие, а не Структура.

Температура

Число

0 — не передаётся, модель берёт своё значение.

МаксимумТокенов

Число

Лимит токенов ответа; 0 — не передаётся.

Файлы

Массив из Структура

Файлы с ключами ИмяФайла и ДанныеФайла, присоединяются к последнему сообщению user. Допустимые типы — как в ВыполнитьЗапросПоПромту.

ДополнительныеПараметры

Соответствие

Поля запроса в формате API сервиса (top_p, seed и т. п.). Добавляются как есть и перекрывают одноимённые поля.

СхемаОтвета

Соответствие

JSON Schema ответа. Действует только вместе с РежимСхемыОтвета.

РежимСхемыОтвета

Строка

Схема — строгое соответствие схеме, нужна модель с такой поддержкой; JSON — гарантирован только JSON, схему опишите в сообщении сами; Текст или пусто — в запрос ничего не добавляется.

УровеньРассуждений

Строка

Например, low, medium, high. Уходит как есть, допустимость решает сервис. Действует только вместе с СпособУровняРассуждений.

СпособУровняРассуждений

Строка

reasoning.effort — объект reasoning (RouterAI); reasoning_effort — отдельное поле (Yandex понимает только его).

Данные — Соответствие с ответом сервиса в формате OpenAI-совместимого API (choices, usage). Текст ответа проще взять из Сведения.Ответ.

Решения

Модель решений не пишет текст: она оценивает то, что ей показали (состояние), и отвечает на заданные вопросы с вероятностями. Такие модели в справочнике моделей отмечены выходом «решения», например openai/gpt-6-luna-decisions. Вызывать их через ЧатЗавершения нельзя, а через ВыполнитьЗапросПоПромту — можно: промт с моделью решений сам уходит этой возможностью.

Ключ

Тип

Описание

Модель

Строка

Идентификатор модели решений.

Вопросы

Соответствие, Структура

Ключ — имя вопроса, под ним вернётся ответ. Значение — Структура или Соответствие с ключами Тип, Инструкция и Критерии, см. ниже.

Состояние

Строка, Соответствие, Массив

Что модель оценивает: текст, данные (уйдут JSON) или массив строк. Можно не передавать, если есть Файлы.

Файлы

Массив из Структура

Изображения с ключами ИмяФайла и ДанныеФайла: png, jpg, jpeg, webp, не больше 8. PDF и другие файлы модель решений не принимает.

Температура, лимит токенов, уровень рассуждений, схема ответа и дополнительные параметры у этой возможности не передаются.

Вопрос:

Тип

Что отвечает модель

Критерии

Выбор

Один вариант из списка

Обязательно, от 1 до 255 вариантов: Массив имён вариантов или Соответствие «вариант → описание» (описание может быть пустым).

ДаНет

Вероятность ответа «да»

Необязательно: Структура с ключами Да и Нет — что значит каждый ответ.

Оценка

Уровень на шкале

Обязательно, от 2 до 10 уровней: Массив описаний уровней по порядку, от нулевого.

Инструкция (Строка) обязательна — что именно оценить.

Ограничения сервиса проверяются до обращения к сети, отказ — код 400 с причиной: неизвестный тип вопроса, пустая инструкция, число вариантов или уровней вне пределов, нет ни состояния, ни файлов, неподходящий тип или число файлов, тело запроса больше 4 500 000 байт. Изображения уходят в тело в Base64 — это примерно на треть больше их размера, поэтому в сумме они должны занимать не больше 3,3 МБ.

Данные — Соответствие с ответом сервиса как есть. Удобнее брать ответы из Сведения.Решения.

Сведения.Решения — Соответствие: ключ — имя вопроса, значение — Структура:

Поле

Тип

Описание

Тип

Строка

Выбор, ДаНет или Оценка.

Значение

Строка, Число, Неопределено

Выбор — выбранный вариант; ДаНет — вероятность «да» от 0 до 1; Оценка — ожидаемый номер уровня от нуля, дробный (2,7 — между вторым и третьим, ближе к третьему). Неопределено — модель на вопрос не ответила.

Вероятности

Соответствие, Неопределено

Вариант или номер уровня строкой → вероятность от 0 до 1.

Уверенность

Число, Неопределено

Уверенность модели в ответе, от 0 до 1.

Легенда

Соответствие, Неопределено

Для Оценка: номер уровня строкой → описание уровня.

Сервис сообщает токены запроса и ответа. Стоимость он сообщает отдельно, и коннектор запрашивает её сам — см. расход.

Вопрос = Новый Структура; Вопрос.Вставить("Тип", "Выбор"); Вопрос.Вставить("Инструкция", "Что на снимке: документ на листе, кассовая лента или не документ?"); Вопрос.Вставить("Критерии", СтрРазделить("sheet,tape,other", ",")); Вопросы = Новый Соответствие; Вопросы.Вставить("kind", Вопрос); Файлы = Новый Массив; Файлы.Добавить(Новый Структура("ИмяФайла, ДанныеФайла", "scan.jpg", ДанныеСнимка)); Параметры = Новый Структура; Параметры.Вставить("Модель", "openai/gpt-6-luna-decisions"); Параметры.Вставить("Вопросы", Вопросы); Параметры.Вставить("Файлы", Файлы); Результат = ДиспетчерПровайдеровИИ_зи.ВыполнитьВозможность(Провайдер, "Решения", Параметры); Если Результат.Успешно Тогда Ответ = Результат.Сведения.Решения.Получить("kind"); ВидНосителя = Ответ.Значение; // "tape" Уверенность = Ответ.Уверенность; // 0.97 КонецЕсли;

Остальные возможности

Возможность

Параметры

Данные при успехе

Эмбеддинги

Модель; ВходныеДанные — Строка или Массив строк

Соответствие: в data по элементу на входной текст, вектор — массив чисел в embedding.

ГенерацияИзображений

Модель; Промт — Строка, описание изображения; Размер — Строка, например "1024x1024"; Количество — Число

Соответствие: в data изображения — ссылкой (url) или в Base64 (b64_json), как вернул сервис.

РаспознаваниеРечи

Модель; ДанныеФайла — ДвоичныеДанные записи; ИмяФайла — Строка, по умолчанию file

Соответствие: текст — в text.

СинтезРечи

Модель; ВходнойТекст — Строка; Голос — Строка, имя голоса у сервиса

Структура HTTP-ответа: звук — в поле Тело (ДвоичныеДанные), формат выбирает сервис.

СозданиеЗадачиВидео

Модель; Промт — Строка, описание видео

Соответствие — ответ сервиса о созданной задаче.

СтатусЗадачиВидео

ПараметрыПути — Структура с ключом Задача: идентификатор задачи

Соответствие — ответ сервиса, статус в status.

РезультатЗадачиВидео

ПараметрыПути — как для статуса

Соответствие — ответ сервиса.

СписокМоделей, ПроверкаПодключения

—

Соответствие: перечень моделей в data. Для этих задач есть готовые ОбновитьКаталогМоделей и ПроверитьПодключение.

Состав ответов видео-возможностей определяет сервис — сверяйтесь с документацией RouterAI.

Сведения

Сведения — Структура с подробностями обращения. Есть в результате всегда, кроме отказа из-за транзакции.

Поле

Тип

Описание

Ответ

Строка

Для ЧатЗавершения — текст ответа модели, для Решения — ответы модели в JSON, для РаспознаваниеРечи — распознанный текст, для прочих — краткая сводка вроде «Векторов: 3, размерность 1536».

Решения

Соответствие, Неопределено

Только для Решения: ответы на вопросы, см. Решения.

ПричинаЗавершения

Строка

Почему модель закончила ответ (finish_reason): stop — сама, length — исчерпан лимит токенов.

МодельОтвета

Строка

Модель, которую назвал сервис.

ПоставщикМодели

Строка

Поставщик, которому RouterAI переслал запрос.

ТокеныЗапроса, ТокеныОтвета, ТокеныРассуждений, ТокеныИзКеша, ТокеныВсего

Число

Токены обращения — в том же смысле, что в расходе.

Стоимость, ВалютаСтоимости

Число, Строка

Стоимость, сообщённая сервисом; пустая валюта — не сообщена.

Длительность

Число

Время обращения, мс.

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

Пример

Функция ВекторыТекстов(Провайдер, Тексты) Параметры = Новый Структура; Параметры.Вставить("Модель", "openai/text-embedding-3-small"); // как в справочнике моделей Параметры.Вставить("ВходныеДанные", Тексты); Результат = ДиспетчерПровайдеровИИ_зи.ВыполнитьВозможность(Провайдер, "Эмбеддинги", Параметры); Если НЕ Результат.Успешно Тогда ВызватьИсключение Результат.ОписаниеОшибки; КонецЕсли; Векторы = Новый Массив; Для Каждого Элемент Из Результат.Данные.Получить("data") Цикл Векторы.Добавить(Элемент.Получить("embedding")); КонецЦикла; Возврат Векторы; КонецФункции

НоваяСессия

Создаёт сессию — операцию из нескольких обращений. Обращения одной сессии объединяются в журнале запросов идентификатором операции, а их расход накапливается в сессии.

Функция НоваяСессия(Провайдер, Промт = Неопределено, Модель = Неопределено) Экспорт

Параметр

Тип

Описание

Провайдер

СправочникСсылка.ПровайдерыИИ_зи

Провайдер операции.

Промт

СправочникСсылка.ПромтыИИ_зи, Неопределено

Промт, к которому журнал отнесёт обращения. На сам запрос не влияет.

Модель

СправочникСсылка.МоделиИИ_зи, Неопределено

Модель для журнала; не передана — журнал найдёт её в справочнике по идентификатору из параметров.

Возвращаемое значение. Структура. Вам может пригодиться поле ИдентификаторОперации (УникальныйИдентификатор) — отбор обращений операции в журнале. Остальные поля служебные: не меняйте их и не собирайте сессию сами. Сессия привязана к провайдеру — для другого провайдера создайте свою.

Сессия = ДиспетчерПровайдеровИИ_зи.НоваяСессия(Провайдер); Для Каждого Порция Из ПорцииТекстов Цикл Параметры = Новый Структура("Модель, ВходныеДанные", ИдентификаторМодели, Порция); Результат = ДиспетчерПровайдеровИИ_зи.ВыполнитьВозможность(Провайдер, "Эмбеддинги", Параметры, Сессия); Если НЕ Результат.Успешно Тогда Прервать; КонецЕсли; // Обработка векторов порции. КонецЦикла; Расход = ДиспетчерПровайдеровИИ_зи.ЗавершитьОперацию(Сессия, Результат);

ЗавершитьОперацию

Закрывает операцию сессии и возвращает её расход.

Функция ЗавершитьОперацию(Сессия, Результат) Экспорт

Параметр

Тип

Описание

Сессия

Структура

Сессия из НоваяСессия.

Результат

Структура

Итог операции с полями Успешно и ОписаниеОшибки — результат последнего обращения или ваш собственный.

Возвращаемое значение. Структура — расход всех обращений сессии (копия).

Если Результат.Успешно = Ложь, а последнее обращение к сервису прошло успешно (операция не удалась по вашей причине — например, ответ не прошёл вашу проверку), ОписаниеОшибки дописывается к последней записи операции в журнале. Вызывать метод не обязательно, но без него не будет ни общего расхода, ни этой отметки.

ВозможностьПоддерживается

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

Функция ВозможностьПоддерживается(Провайдер, Возможность) Экспорт

Параметры. Провайдер — СправочникСсылка.ПровайдерыИИ_зи; Возможность — Строка.

Возвращаемое значение. Булево. Ложь — и для провайдера, которого нет или у которого не задан вид. Признак «Используется» и настройки подключения не проверяются.