ai.engine.register
Scope: ai_admin Права на выполнение: администратор
ai.engine.register
REST-метод для добавления пользовательского сервиса. Метод регистрирует engine, при повторном вызове обновляет его. Это не совсем место встройки, так как endpoint партнера должен следовать четким форматам.
Параметры
Параметр | Описание | С версии |
---|---|---|
name | Осмысленное и короткое название, которое будет появляться в интерфейсе пользователя. | |
code | Уникальный код engine | |
category | Может быть либо text (генерация текста), либо image (генерация картинок), либо audio (распознавание текста). | |
completions_url | endpoint для обработки пользовательского запроса. | |
settings | Тип AI (см. описание ниже). Необязательный. | 23.800 |
Метод в случае успеха вернет ID добавленного engine.
Тип AI
Массив параметров:
Параметр | Описание | С версии |
---|---|---|
code_alias | Тип AI. Доступны значения:
Под каждый тип создаются свои препромпты и их лучше не перемешивать. Провайдер при регистрации должен заявить, под какой тип нейронки он подходит лучше: именно препромпты этого типа будут отправляться на провайдер. В текущий момент это завязка только на препромпты, в будущем возможно расширение влияния типа AI. | |
model_context_type | Тип подсчета контекста (см. описание context ниже). Доступны значения:
| |
model_context_limit | Объем контекста (по умолчанию 16К). Перед отправкой вам запроса пользователя, проверяется лимит контекста согласно типу подсчета. |
Пример
BX24.callMethod( 'ai.engine.register', { name: 'Ivanov GPT', code: 'ivanov_gpt', category: 'text', completions_url: 'https://antonds.ru/ai/aul/completions/', settings: { code_alias: 'ChatGPT', model_context_type: 'token', model_context_limit: 16*1024, }, }, function(result) { if(result.error()) { console.error(result.error()); } else { console.info(result.data()); } } );
Endpoint
Внимание! В скрипте все в едином потоке кода, это для примера. В режиме production необходимо вынести строчки кода 30-54 в отдельную часть.
Шаблон для создания пользовательского endpoint можно использовать для кастомизации собственного сервиса.
Обратите внимание, скрипт должен:
- принять запрос, отработать его быстро, принять и добавить в свою внутреннюю очередь.
- уметь возвращать различные статусы ответа (есть в примере):
- 200 — обычный переход по ссылке;
- 202 — если вы приняли запрос и добавили в очередь;
- 503 — если сервис недоступен.
Как делать ответ в случае готовности – указано в шаблоне.
Ответ ожидается в течение определенного времени (тоже упоминается в скрипте), потом колбек становится невалидным.
Важно! Помимо кода ответа, в случае успешной генерации, обработчик должен обязательно возвращать json_encode(['result' => 'OK'])
.
Если категория провайдера audio, то в ключе prompt вам вернётся массив:
- file - ссылка до файла (обратите внимание, может быть без расширения!),
- fields - вспомогательный внутренний массив, состоящий в свою очередь из:
- type – content-type файла, как раз на случай, если он без расширения (например, "audio/ogg"),
- prompt – вспомогательный промпт для аудио-файла (может содержать ключевую информацию для помощи в распознавании файла: например, название вашей компании).
В ответе провайдеру уходят так же дополнительные поля:
Поля | Описание | С версии |
---|---|---|
auth | Данные по авторизации, | 23.600.0 |
payload_raw | Сырое значение промпта (при использовании Copilot там будет символьный код использованного промпта) | 23.600.0 |
payload_provider | Символьный код провайдера препромпта (при использовании Copilot там будет prompt). | 23.600.0 |
payload_prompt_text | Если payload_provider = prompt , будет содержаться сырая инструкция препромпта. Это не обработанный препромпт для самостоятельного анализа. Подробнее в документации по промптам. | 23.800.0 |
payload_markers | Массив дополнительных маркеров от пользователя (original_message, user_message, language), использованный при формировании промпта. Подробнее в документации по промптам. | 23.800.0 |
payload_role | Роль (инструкция), использованная при формировании промпта. В GPT-подобных системах вы должны отправлять эту роль как системную в массиве сообщений. | 23.800.0 |
context. | Массив предшествующих сообщений в хронологическом порядке. Например, список комментариев к посту. Первым в таком списке контекста считается авторское сообщение (сам пост).
Важно:
| 23.800.0 |
max_tokens | Максимальное число лексем. Параметр контролирует длину вывода. Необязательный. | |
temperature | Температура. Параметр контролирует случайность вывода (низкие значения делают вывод более сфокусированным и детерминированным). Обязательный. |
Пример
Допустим, к вам приходит (помимо прочей информации) три массива данных.
- prompt - содержит текущий запрос, это просто текст;
- payload_role - некий текст, содержащий инструкции;
- context - массив (допустим, тоже не пустой).
В этом случае, результирующий массив мы получаем как:
[ [ 'role' => 'system', 'content' => $payload_role, ], [ // весь массив context, или его часть, если вы хотите сэкономить запрос // но помните, что он идет в хронологическом порядке (снизу самые последние сообщения) ], [ 'role' => 'user', 'content' => $prompt,// это текущий запрос, и он НЕ входит в контекст ] ];