РаботаСМоделямиИИ_зи
Запрос к модели по промту, поиск промта по имени, параметры промта для кода, представление расхода, проверка подключения, обновление каталога моделей и запись параметров в промт.
Основной модуль коннектора. Где вызывать, единый результат и расход — в разделе Программный интерфейс.
ВыполнитьЗапросПоПромту
Отправляет модели запрос по сохранённому промту и возвращает её ответ. Провайдер, модель, системный текст и прочие настройки берутся из промта; часть из них можно переопределить на один вызов, сам промт при этом не меняется.
Функция ВыполнитьЗапросПоПромту(ПараметрыЗапроса) Экспорт
Параметры
ПараметрыЗапроса — Структура:
Ключ | Тип | Описание |
| СправочникСсылка.ПромтыИИ_зи, Строка | Обязательный. Ссылка либо имя для кода промта, регистр букв не важен. Имени нет или его носят несколько промтов — отказ 400. |
| Строка | Текст запроса. Обязателен, если у запроса нет системного текста. Модели решений не нужен, если переданы |
| Массив из Структура | Файлы к сообщению пользователя, см. «Файлы» ниже. |
| СправочникСсылка.ПровайдерыИИ_зи | Вместо провайдера промта. |
| СправочникСсылка.МоделиИИ_зи | Вместо модели промта. |
| Строка | Вместо системного текста промта; пустая строка — запрос без системного текста. Ключ не передан — текст промта. |
| Число | Вместо температуры промта. 0 не переопределяет. |
| Строка | Вместо уровня промта: |
| Число | Вместо «Максимум токенов» промта: предел ответа, токенов. |
| Число | Вместо «Таймаут, с» промта: сколько секунд ждать ответа на одно обращение. |
| Булево | Генерация, которой мало обычного таймаута. Пока выполняется обычным запросом с ожиданием |
| Число | Ожидание длительной операции, с. Не передано — 300. |
| Число | Зарезервирован для фонового режима длительной операции, сейчас не читается. |
Не переданный или незаполненный ключ переопределения означает «как в промте»; исключение — пустой СистемныйТекст. Числовой ключ, равный 0, отрицательный или не числовой, тоже ничего не переопределяет. Дополнительные параметры, схема ответа, порции и проверка суммы строк берутся только из промта.
Возвращаемое значение
Единый результат. При успехе Данные — текст ответа модели (Строка), а если в промте задана схема ответа — текст JSON-объекта: разберите его ПрочитатьJSON. У промта с моделью решений Данные — тоже JSON-объект по схеме ответа, см. Модель решений.
Если запрос дошёл до обращения к сервису, результат дополнен полями:
Поле | Тип | Описание |
| Строка | Как схема ответа дошла до модели: |
| Строка | Уровень, фактически переданный модели. Пусто — не задан или модель уровень не настраивает. |
| Число | Сколько запросов к модели выполнено; без порций — 1. |
| Структура | Расход всех обращений запроса, см. Расход. |
| Строка | Отбор обращений этого запроса в журнале запросов. |
| Соответствие | Только у модели решений: вероятности и уверенность ответов на каждый вопрос. Состав — как |
Если метод отказал по собственной проверке — промт не найден, в нём не задан таймаут, у чат-модели нет ни сообщения, ни системного текста, не выбраны провайдер или модель, модель принадлежит другому провайдеру, ошибка в схеме ответа, порциях или проверке суммы строк, неизвестный уровень рассуждений, настройки промта не подходят модели решений, — результат приходит без этих полей. Обращайтесь к ним через Свойство.
Особенности
Исключение. При непредвиденном сбое — например, если у пользователя нет прав на чтение промта — метод вызывает исключение. Если сбой случился после обращения к сервису, итог сперва записывается в журнал запросов. Где отказ не должен прерывать вашу операцию, вызывайте метод в
Попытка … Исключение.Таймаут берётся из промта («Таймаут, с») и там обязателен, если не передан при вызове. Сервис не ответил вовремя —
КодСостояния = 504, а подсказка в описании называет, где увеличить время: в промте, в ключеТаймаутили вПредельноеВремяГенерации.Переопределённые предел и время видны в журнале запросов: поле «Переопределено при вызове» перечисляет ключи, взятые из вызова, а пустое значит, что всё взято из промта. Рядом — фактически отправленные «Максимум токенов» и «Таймаут, с».
Длительная операция пока не использует фоновый режим сервиса: запрос идёт обычным способом и ждёт
ПредельноеВремяГенерации. В журнале это отмечено как «ДлительнаяОперация (синхронно)». Ключи можно передавать уже сейчас: когда фоновый режим появится, вызов менять не придётся.Провайдер и модель меняются парой: модель должна принадлежать провайдеру запроса, иначе отказ 400.
Температура 0 означает «не задана». Переопределить ею нельзя, а промт с нулевой температурой отправляет запрос без неё — модель берёт своё значение по умолчанию.
Уровень рассуждений не передаётся модели, которая, судя по каталогу моделей провайдера, рассуждения не настраивает. Что ушло на деле, видно в поле
УровеньРассуждений.Без сообщения пользователя задание целиком лежит в системном тексте. Если нет и файлов, системный текст уходит модели как сообщение пользователя.
Пустой ответ модели без схемы считается успехом: в
Данныепопадает пояснение коннектора — «Модель вернула пустой ответ…» или, если исчерпан лимит токенов, совет увеличить «Максимум токенов» в промте (либо ключМаксимумТокенов, если предел передан при вызове).
Файлы
Файлы — массив структур с ключами ИмяФайла (Строка с расширением, по нему определяется тип) и ДанныеФайла (ДвоичныеДанные). Файлы ставятся в сообщение пользователя перед текстом; сообщение может состоять из одних файлов.
Провайдер | Допустимые типы |
RouterAI | pdf, png, jpg, jpeg, webp |
Yandex | png, jpg, jpeg, webp — PDF сервис не принимает |
До отправки отклоняются (код 400) файл другого типа, без имени или пустой, а также изображение для модели, которая по каталогу провайдера не принимает изображения. PDF у RouterAI принимает любая модель: сервис сам извлекает из него текст. Если каталог ничего не сообщает о модели (так у Yandex), проверки нет, и текстовая модель может ответить так, будто изображения нет.
Схема ответа и порции
Если в промте задана схема ответа (см. Промты):
ответ модели обязан быть одним JSON-объектом, иначе
Успешно = ЛожьприКодСостояния = 200, а вДанные— исходный текст модели;при заданных порциях модель возвращает массив по частям, отдельным запросом на каждую.
Данные— склеенный объект (поля вне массива — из первой порции),Порций— число запросов, не больше 50. Ошибка любой порции — неуспех всего запроса с её номером в описании;при заданной проверке суммы строк расхождение больше допуска или пустой итог дают
Успешно = ЛожьприКодСостояния = 200; ответ модели остаётся вДанные.
Модель решений
Если в промте выбрана модель решений (в каталоге у неё выход «решения», например openai/gpt-6-luna-decisions), запрос уходит не в чат, а возможностью Решения. Вызов не меняется: тот же ВыполнитьЗапросПоПромту, и Данные — тот же JSON-объект по схеме ответа. Поменять модель в промте можно без правки кода.
Схема ответа для такой модели обязательна: каждое свойство верхнего уровня — вопрос, имя свойства — имя вопроса, description (иначе title, иначе имя) — инструкция к нему. В карточке промта вопросы задаются таблицей на странице «Вопросы», схему она пишет сама (см. Промты).
Свойство схемы | Вопрос | Значение в |
| Выбор варианта | Выбранный вариант, строка. |
| Выбор варианта с описаниями | Выбранный вариант, строка. |
| Да или нет |
|
| Да или нет с описаниями ответов; можно описать только один |
|
| Оценка по уровням, уровни — по возрастанию |
|
Свойство другой формы — объект, массив, строка без вариантов, boolean с вариантами не из true и false — отклоняется с именем свойства и перечнем поддержанных форм.
Задание модели решений — в схеме: что спросить и что значат варианты, говорят description свойств. Системный текст и сообщение пользователя для неё необязательны. Если они есть, то уходят вместе, через пустую строку, как часть того, что модель оценивает, — рядом с изображениями из Файлы. Поэтому пишите туда контекст («снимок сделан при приёмке товара»), а не указания вроде «определи…»: указания модель приняла бы за оцениваемые данные. Одного снимка без текста достаточно. Нет ни текста, ни файлов — отказ 400 до обращения к сервису.
Ограничения файлов строже, чем у чата: только png, jpg, jpeg, webp, не больше 8, всё тело запроса — не больше 4 500 000 байт.
Температура, максимум токенов, уровень рассуждений и дополнительные параметры промта модели решений не передаются. Порции и проверка суммы строк к ней не применяются: промт с ними не запишется, а запрос по такому промту отклоняется с кодом 400 до обращения к сервису.
Вероятности и уверенность ответов — в поле Решения результата:
Результат = РаботаСМоделямиИИ_зи.ВыполнитьЗапросПоПромту(ПараметрыЗапроса); Если Результат.Успешно Тогда Чтение = Новый ЧтениеJSON; Чтение.УстановитьСтроку(Результат.Данные); Ответ = ПрочитатьJSON(Чтение, Истина); // {"kind": "tape"} Чтение.Закрыть(); Решения = Неопределено; Если Результат.Свойство("Решения", Решения) Тогда Уверенность = Решения.Получить("kind").Уверенность; КонецЕсли; КонецЕсли;
Пример
Промт с заданием в системном тексте и схемой ответа разбирает присланный документ:
Функция ДанныеДокумента(Промт, ИмяФайла, ДанныеФайла) Файлы = Новый Массив; Файлы.Добавить(Новый Структура("ИмяФайла, ДанныеФайла", ИмяФайла, ДанныеФайла)); ПараметрыЗапроса = Новый Структура; ПараметрыЗапроса.Вставить("Промт", Промт); ПараметрыЗапроса.Вставить("Файлы", Файлы); Результат = РаботаСМоделямиИИ_зи.ВыполнитьЗапросПоПромту(ПараметрыЗапроса); Если НЕ Результат.Успешно Тогда ВызватьИсключение Результат.ОписаниеОшибки; КонецЕсли; Чтение = Новый ЧтениеJSON; Чтение.УстановитьСтроку(Результат.Данные); Документ = ПрочитатьJSON(Чтение, Истина); Чтение.Закрыть(); Возврат Документ; КонецФункции
ПромтПоИмени
Находит промт по имени для кода. ВыполнитьЗапросПоПромту принимает имя и сам, функция нужна, когда требуется ссылка.
Функция ПромтПоИмени(Имя) Экспорт
Параметры. Имя — Строка: имя для кода промта, регистр букв не важен.
Возвращаемое значение. СправочникСсылка.ПромтыИИ_зи. Пустая ссылка — промта с таким именем нет либо имя носят несколько промтов: так бывает только после записи в обход проверки.
ПараметрыПромта
Читает параметры для кода промта — значения, которые задают в конкретной базе: порог уверенности, ссылку на объект базы. Модели они не передаются, применяет их ваш код.
Функция ПараметрыПромта(Промт) Экспорт
Параметры. Промт — СправочникСсылка.ПромтыИИ_зи или Строка: ссылка либо имя для кода промта.
Возвращаемое значение.
Структура: ключ — имя параметра, значение — его значение. Если в этой базе значение не задано —
Неопределено.Неопределено— промт не найден либо его имя носят несколько промтов. Опечатка в имени промта поэтому не выглядит как «параметр не задан».
Параметры = РаботаСМоделямиИИ_зи.ПараметрыПромта("ПроверкаСнимкаДокумента"); Если Параметры = Неопределено Тогда ВызватьИсключение "Не найден промт ПроверкаСнимкаДокумента"; КонецЕсли; Порог = Неопределено; Параметры.Свойство("ПорогУверенности", Порог); Если Порог = Неопределено Тогда Порог = 0.8; // в этой базе порог не задан КонецЕсли;
Особенности. Строку с недопустимым или повторным именем функция пропускает, из повторных остаётся первая. Такие строки бывают только после записи промта в обход проверки. Без права на чтение промтов функция вызывает исключение.
ПредставлениеРасхода
Возвращает строку о расходе для показа пользователю.
Функция ПредставлениеРасхода(Расход) Экспорт
Параметры. Расход — Структура или Неопределено: расход из результата ВыполнитьЗапросПоПромту или из ДиспетчерПровайдеровИИ_зи.ЗавершитьОперацию.
Возвращаемое значение. Строка вида «Токенов: 12 345 (запрос 10 000, ответ 2 345); время: 38,2 с; стоимость: 1,23 RUB». Если обращений несколько, добавляется их число, если модель рассуждала — токены рассуждений. Стоимость, сообщённая не всеми обращениями, помечается «не менее», не сообщённая — «стоимость не сообщена». Пустая строка — токены не расходовались или передан не расход.
Расход = Неопределено; Результат.Свойство("Расход", Расход); // поля может не быть ТекстРасхода = РаботаСМоделямиИИ_зи.ПредставлениеРасхода(Расход);
ПроверитьПодключение
Проверяет, что провайдер настроен и сервис принимает его ключ. Обращение пишется в журнал запросов.
Функция ПроверитьПодключение(Провайдер) Экспорт
Параметры. Провайдер — СправочникСсылка.ПровайдерыИИ_зи.
Возвращаемое значение. Единый результат; при успехе Данные — строка «Подключение успешно. Доступно моделей: N.».
ОбновитьКаталогМоделей
Загружает перечень моделей провайдера в справочник моделей — то же, что команда «Обновить каталог моделей» в карточке провайдера (см. Провайдеры и модели).
Функция ОбновитьКаталогМоделей(Провайдер) Экспорт
Параметры. Провайдер — СправочникСсылка.ПровайдерыИИ_зи.
Возвращаемое значение. Единый результат; при успехе Данные — Структура со счётчиками (Число): Добавлено — новых моделей, Активировано — снова доступных, Деактивировано — помеченных недоступными, ПараметровДобавлено — новых элементов справочника параметров моделей.
Особенности.
Затрагиваются только модели этого провайдера, сопоставление — по идентификатору модели. Карточка найденной модели целиком перезаписывается сведениями сервиса.
Модель, которой нет в ответе, помечается недоступной, но не удаляется: ссылки на неё из промтов сохраняются.
Если обращение к сервису не удалось или сервис вернул пустой перечень, каталог не меняется.
Нужна роль «Добавление / изменение ИИ», без неё метод завершится исключением.
СохранитьПараметрыВПромт
Записывает в промт провайдера, модель, системный текст, температуру и уровень рассуждений — например, подобранные пользователем в вашей форме.
Функция СохранитьПараметрыВПромт(Промт, ПараметрыСохранения) Экспорт
Параметры. Промт — СправочникСсылка.ПромтыИИ_зи; ПараметрыСохранения — Структура:
Ключ | Тип | Описание |
| СправочникСсылка.ПровайдерыИИ_зи | Не передан, а модель передана — записывается провайдер модели. |
| СправочникСсылка.МоделиИИ_зи | Должна принадлежать провайдеру, иначе отказ 400. |
| Строка | |
| Число | |
| Строка | Необязательный: ключ не передан — уровень промта не меняется, пустая строка — уровень по умолчанию модели. Значения — как в |
Возвращаемое значение. Единый результат; при успехе Данные — наименование промта.
Особенности.
Первые четыре реквизита записываются всегда: ключ, которого нет в структуре, очищает реквизит промта. Передавайте все четыре.
Максимум токенов, таймаут, дополнительные параметры и схема ответа не меняются.
Нужна роль «Добавление / изменение ИИ». Если промт записать не удалось, возвращается отказ 400 с причиной.