Программный интерфейс
Как вызывать коннектор из своего кода — модули, место вызова, единый результат и расход.
Из своего кода коннектор вызывается через два общих модуля:
Модуль | Для чего |
Основное: запрос к модели по промту, параметры промта для кода, проверка подключения, обновление каталога моделей. | |
Прочие возможности сервисов — эмбеддинги, изображения, речь, видео — и операции из нескольких обращений с общим расходом. |
Остальные модули расширения внутренние: их состав и методы меняются без предупреждения, вызывать их нельзя.
Где вызывать
Оба модуля только серверные, без вызова сервера. С клиента обращайтесь к ним через свою серверную процедуру: &НаСервереБезКонтекста в модуле формы или общий модуль с флагом «Вызов сервера».
Откуда вызывать:
ваша конфигурация с установленным расширением (
.cfe) или конфигурация из поставки (.cf) — модули вызываются напрямую из любого серверного кода;внешняя обработка или отчёт в базе с коннектором — так же, из серверного кода;
внешнее соединение — недоступно.
Вне транзакции
Внутри активной транзакции запрос к сервису отклоняется сразу, до обращения к сети: Успешно = Ложь, КодСостояния = 400. Ответа сервиса порой ждут минутами, и всё это время транзакция держала бы блокировки. Вызывайте коннектор до транзакции, а результат записывайте отдельно.
Права
Код выполняется с правами текущего пользователя. Для запросов к моделям достаточно роли «Чтение просмотр ИИ». СохранитьПараметрыВПромт и ОбновитьКаталогМоделей пишут в справочники коннектора, им нужна роль «Добавление / изменение ИИ». О ролях — в статье Установка.
Единый результат
Методы, которые обращаются к сервису, возвращают структуру:
Поле | Тип | Смысл |
| Булево | Истина — ответ получен и прошёл проверки коннектора. |
| Произвольный | Результат; что именно — описано у каждого метода. При неуспехе обычно |
| Число | HTTP-код ответа сервиса или код отказа коннектора. |
| Строка | Причина неуспеха — готовый текст для пользователя с именем провайдера. При успехе пусто. |
Методы дополняют структуру своими полями — они перечислены в описании методов. Решение принимайте по Успешно, а код помогает понять причину:
Код | Что произошло |
200 | Сервис ответил. Если при этом |
400 | Запрос отклонён до отправки: не заполнены обязательные данные, не подходит файл, у провайдера не задан ключ или провайдер не используется, возможность не поддерживается, вызов в транзакции. Тот же код возвращает и сервис, если не принял запрос. |
504 | Сервис не ответил за время таймаута. |
500 | Нет связи с сервисом, его ответ не удалось разобрать или сервис сообщил о сбое. |
Прочие | Ответ сервиса: 401 — неверный ключ, 402 — на балансе провайдера недостаточно средств, 403 — доступ запрещён, 429 — превышен лимит запросов, 502 и 503 — сервис недоступен. |
Расход
Расход операции — структура в поле Расход результата ВыполнитьЗапросПоПромту; её же возвращает ДиспетчерПровайдеровИИ_зи.ЗавершитьОперацию.
Поле | Тип | Смысл |
| Число | Обращений к сервису, включая отклонённые до отправки. |
| Число | Токены запроса, в том числе взятые из кеша. |
| Число | Токены ответа, в том числе потраченные на рассуждения. |
| Число | Из них — на рассуждения. |
| Число | Токены запроса, которые сервис взял из кеша. |
| Число | Итог токенов, как его сообщил сервис. Если сервис итога не сообщил (так отвечают модели решений), — сумма токенов запроса и ответа. |
| Число | Сумма стоимостей, сообщённых сервисом. Сам коннектор стоимость не рассчитывает. |
| Строка | Пусто — сервис стоимость не сообщил, и нулевая |
| Булево | Ложь — часть обращений израсходовала токены, но стоимость не сообщила; тогда |
| Число | Суммарное время обращений, мс. |
Стоимость в рублях сообщает RouterAI, Yandex её не сообщает. Ответ модели решений стоимости не содержит: коннектор сразу после ответа запрашивает её у RouterAI отдельным обращением и записывает в ту же запись журнала. Если сервис стоимость так и не отдал, обращение остаётся успешным, а стоимость — не сообщённой. Готовую строку для пользователя возвращает РаботаСМоделямиИИ_зи.ПредставлениеРасхода.
Журнал запросов
Каждое обращение к сервису — одна запись в журнале запросов, включая отклонённые до отправки и прерванные исключением. Обращения одной операции объединены идентификатором операции. Не попадают в журнал только вызовы внутри транзакции и отказы ВыполнитьЗапросПоПромту по настройкам промта, найденные до обращения к сервису. Как смотреть журнал — в статье Журнал запросов и расход.
Пример
Промт «Ответ на вопрос клиента» заранее создан в пользовательском режиме (см. Промты): в нём выбраны провайдер и модель, задан системный текст, имя для кода — ОтветНаВопросКлиента. Наименование промта можно менять: код находит его по имени.
&НаСервереБезКонтекста Функция ОтветНаВопрос(ТекстВопроса) ПараметрыЗапроса = Новый Структура; ПараметрыЗапроса.Вставить("Промт", "ОтветНаВопросКлиента"); ПараметрыЗапроса.Вставить("СообщениеПользователя", ТекстВопроса); Результат = РаботаСМоделямиИИ_зи.ВыполнитьЗапросПоПромту(ПараметрыЗапроса); Если НЕ Результат.Успешно Тогда ВызватьИсключение Результат.ОписаниеОшибки; КонецЕсли; Возврат Результат.Данные; КонецФункции