Блог Горошко Андрея Bitrix24,Искусственный интеллект Зарегистрировать сервис ai.engine.register

Зарегистрировать сервис ai.engine.register

При разработке и поддержке проектов на платформе 1С-Битрикс критически важно использовать современные стандарты D7 API. В этом руководстве мы детально изучим тему «Зарегистрировать сервис ai.engine.register», разберем архитектурные особенности и предоставим готовые к интеграции примеры кода.

Зарегистрировать сервис ai.engine.register

Тут может не хватать некоторых данных — дополним в ближайшее время

  • нужны правки под стандарт написания
  • не указаны типы параметров
  • не указана обязательность параметров
  • отсутствуют примеры
  • отсутствует ответ в случае успеха
  • отсутствует ответ в случае ошибки
  • не прописаны ссылки на несозданные ещё страницы.

> Scope: ai_admin
>
> Кто может выполнять метод: администратор

REST-метод для добавления пользовательского сервиса. Метод регистрирует engine, при повторном вызове обновляет его. Это не совсем место встройки, так как endpoint партнера должен следовать четким форматам.

ПараметрОписаниеС версии
name
unknown
Осмысленное и короткое название, которое будет появляться в интерфейсе пользователя.
code
unknown
Уникальный код engine
category
unknown
Может быть либо text (генерация текста), либо image (генерация картинок), либо audio (распознавание текста).
completions_url
unknown
endpoint для обработки пользовательского запроса.
settings
unknown
Тип AI (см. описание ниже). Необязательный.23.800

Метод в случае успеха вернёт ID добавленного engine.

Тип AI

Массив параметров:

ПараметрОписаниеС версии
code_alias
unknown
Тип AI. Доступны значения: ChatGPT (Open AI), GigaChat (Сбер), YandexGPT (Яндекс) (по умолчанию ChatGPT).
model_context_type
unknown
Тип подсчета контекста. Доступны значения: token — токены, symbol — символы. По умолчанию token.
model_context_limit
unknown
Объем контекста (по умолчанию 16К). Перед отправкой вам запроса пользователя, проверяется лимит контекста согласно типу подсчета.

Практические примеры использования в коде

  • JS
    try
    {
    	const response = await $b24.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,
    			},
    		}
    	);
    	
    	const result = response.getData().result;
    	console.info(result);
    }
    catch( error )
    {
    	console.error(error);
    }
  • PHP
    try {
        $response = $b24Service
            ->core
            ->call(
                '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,
                    ],
                ]
            );
    
        $result = $response
            ->getResponseData()
            ->getResult();
    
        echo 'Success: ' . print_r($result, true);
        // Нужная вам логика обработки данных
        processData($result);
    
    } catch (Throwable $e) {
        error_log($e->getMessage());
        echo 'Error registering AI engine: ' . $e->getMessage();
    }
  • BX24.js
    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 необходимо вынести строчки кода в отдельную часть.

Шаблон для создания пользовательского endpoint можно использовать для кастомизации собственного сервиса.

Важные моменты:

1. Скрипт должен принять запрос, отработать его быстро, принять и добавить в свою внутреннюю очередь.
2. Сервис с типом «image» должен отправлять асинхронные запросы.
3. Уметь возвращать различные статусы ответа (есть в примере):

  • 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Массив предшествующих сообщений в хронологическом порядке. Например, список комментариев к посту. Первым в таком списке контекста считается авторское сообщение (сам пост). Важно: Объем контекста, отправляемого вашему провайдеру, зависит от указанного вами объема провайдера и типа подсчета (подробнее в документации по провайдеру). По умолчанию метод подсчета «токены», объем 16K. Отправлять контекст непосредственной нейронке вы должны только если передан параметр collect_context, равный true (1). В остальных случаях он передается как доп.информация на ваше усмотрение.23.800.0
max_tokensМаксимальное число лексем. Параметр контролирует длину вывода. Необязательный.
temperature^^Температура. Параметр контролирует случайность вывода (низкие значения делают вывод более сфокусированным и детерминированным). Обязательный.

\ — Обязательные параметры

Пример

Допустим, к вам приходит (помимо прочей информации) три массива данных.

  • prompt — содержит текущий запрос, это просто текст;
  • payload_role — некий текст, содержащий инструкции;
  • context — массив (допустим, тоже не пустой).

В этом случае, результирующий массив мы получаем как:

[
    [
        "role": "system",
        "content": "$payload_role"
    ],
    [
        // весь массив context, или его часть, если вы хотите сэкономить запрос
        // но помните, что он идет в хронологическом порядке (снизу самые последние сообщения)
    ],
    [
        "role": "user",
        "content": "$prompt" // это текущий запрос, и он НЕ входит в контекст
    ]
]

💡 Экспертное мнение и рекомендации

Советы эксперта по интеграции:

  • Всегда используйте кэширование при частых запросах к ai.engine.register, чтобы разгрузить базу данных.
  • Соблюдайте стандарты PSR при написании обработчиков для «Зарегистрировать сервис ai.engine.register».
  • Регулярно проводите аудит производительности системы с помощью встроенного монитора 1С-Битрикс.

Похожая задача в бизнесе?

Помогу автоматизировать процессы и внедрить ИИ

Меня зовут Андрей Горошко. Я Full-stack разработчик и эксперт по 1С-Битрикс. Настраиваю CRM Битрикс24, разрабатываю защищенные API и создаю умных ИИ-агентов для автоматизации рутины.

Related Post

Как использовать метод SDK department.update в Битрикс24Как использовать метод SDK department.update в Битрикс24

При разработке и поддержке проектов на платформе 1С-Битрикс критически важно использовать современные стандарты D7 API. В этом руководстве мы детально изучим тему «Как использовать метод SDK department.update в Битрикс24», разберем

Добавить новый раздел товаров crm.productsection.addДобавить новый раздел товаров crm.productsection.add

При разработке и поддержке проектов на платформе 1С-Битрикс критически важно использовать современные стандарты D7 API. В этом руководстве мы детально изучим тему «Добавить новый раздел товаров crm.productsection.add», разберем архитектурные особенности

Получить значения всех полей привязки элемента корзины к оплате sale.paymenti…Получить значения всех полей привязки элемента корзины к оплате sale.paymenti…

Каждый PHP-разработчик, работающий с экосистемой Bitrix Framework, должен глубоко понимать работу её ключевых компонентов. В этой статье мы проведем подробный аудит темы «Получить значения всех полей привязки элемента корзины к