Перейти к основному содержимому
Версия: 6.0

Настройки SM-AI

Общая информация

SM-AI — централизованный сервис вывода LLM-моделей. Разворачивается как отдельный сервис на выделенном сервере и не требует установки на узлы кластера OpenSearch.


Настройка пользователя в OpenSearch

Для авторизации запросов к SM-AI используется отдельный внутренний пользователь OpenSearch. Его учетные данные передаются от OpenSearch к SM-AI и проверяются через REST API OpenSearch.

1. Создание пользователя в OpenSearch

Создайте внутреннего пользователя sm_ai_user через Навигационное меню - Параметры системы - Настройки безопасности - Внутренние пользователи - Создать внутреннего пользователя.

2. Сохранение пароля в keystore OpenSearch

Пароль пользователя sm_ai_user должен быть сохранен в keystore OpenSearch:

POST _core/keystore/sm.core.ai.password
{
"value": "<пароль созданного пользователя>"
}

Параметры запуска SM-AI

Параметры запуска указываются в конфигурационном файле application.properties, который располагается рядом с JAR-файлом сервиса.

Основные параметры

ПараметрОписаниеЗначение по умолчанию
server.portПорт, на котором SM-AI принимает входящие соединения8010
llm.model-registry-pathПуть до файла реестра моделей model_registry.json./configs/model_registry.json
llm.default-timeout-msТаймаут ожидания ответа от LLM-провайдера в миллисекундах30000
llm.max-rows-per-callМаксимальное количество строк во входных данных одного запроса50
llm.max-bytes-per-rowМаксимальный размер одной строки входных данных в байтах65536
llm.max-tokens-per-callМаксимальное суммарное количество токенов входных данных в запросе65536
llm.strict-limitsРежим жестких лимитов: при true запрос отклоняется при превышении лимита, при false данные усекаются до допустимого размераfalse
logging.file.pathДиректория хранения лог-файловlogs

Параметры HTTPS на входе

SM-AI принимает входящие соединения по HTTPS. Сертификаты передаются в формате PEM; приватный ключ — в формате PKCS#8 без пароля.

ПараметрОписаниеЗначение по умолчанию
server.ssl.enabledВключить HTTPS на входеtrue
server.ssl.certificateПуть до серверного сертификата SM-AI в формате PEM
server.ssl.certificate-private-keyПуть до приватного ключа серверного сертификата (PKCS#8, без пароля)

Параметры проверки авторизации через OpenSearch

SM-AI валидирует входящие запросы через OpenSearch. Клиент должен передать заголовок Authorization в формате HTTP Basic Authentication (Basic <base64(логин:пароль)>); SM-AI без изменений передает этот заголовок в REST API OpenSearch (/_plugins/_security/api/account). Соединение SM-AI → OpenSearch выполняется по HTTPS с проверкой серверного сертификата OpenSearch по указанному CA.

ПараметрОписаниеЗначение по умолчанию
llm.auth.opensearch-hostХост OpenSearch для валидации учетных данныхlocalhost
llm.auth.opensearch-portПорт OpenSearch9200
llm.auth.ca-cert-pathПуть до CA, которой подписан серверный сертификат OpenSearch
Обратите внимание!

Параметр llm.auth.ca-cert-path обязателен — без него сервис не сможет валидировать серверный сертификат OpenSearch при проверке авторизации.

Параметры трассировки Langfuse (опционально)

SM-AI поддерживает отправку трассировок запросов в Langfuse. По умолчанию трассировка отключена.

ПараметрОписаниеЗначение по умолчанию
llm.langfuse.enabledВключить отправку трассировок в Langfusefalse
llm.langfuse.public-keyПубличный ключ проекта Langfuse
llm.langfuse.secret-keyСекретный ключ проекта Langfuse
llm.langfuse.hostURL инстанса Langfusehttps://cloud.langfuse.com
llm.langfuse.environmentМетка окружения (например, production, staging)
llm.langfuse.releaseВерсия релиза для группировки трассировок

Реестр моделей

Список доступных LLM-моделей задается в файле model_registry.json. Путь до файла задается параметром llm.model-registry-path.

Файл является массивом объектов, каждый из которых описывает одну модель:

ПолеОписаниеОбязательное
nameИдентификатор модели, используемый в запросах к /llm-run и в ответе /modelsДа
providerПровайдер LLM-сервера; поддерживается vllmДа
endpointБазовый URL vLLM-сервера (до /v1)Да
model_idИдентификатор модели на стороне vLLMДа
typeТип интерфейса модели; поддерживается chatДа
max_contextМаксимальный контекст модели в токенахНет
default_temperatureТемпература генерации по умолчаниюНет
default_max_tokensМаксимальное количество токенов в ответе по умолчаниюНет

Пример конфигурации:

[
{
"name": "gpt-oss-20b",
"provider": "vllm",
"endpoint": "http://vllm-server.local:8000/v1",
"model_id": "openai/gpt-oss-20b",
"type": "chat",
"max_context": 128000,
"default_temperature": 0.2,
"default_max_tokens": 10000
}
]
к сведению

Файл реестра моделей перечитывается автоматически при изменении — перезапуск сервиса не требуется.


Пример application.properties

server.port=8010

# HTTPS на входе
server.ssl.enabled=true
server.ssl.certificate=/app/opensearch/config/sm-ai-cert.pem
server.ssl.certificate-private-key=/app/opensearch/config/sm-ai-key.pem

llm.model-registry-path=/app/opensearch/utils/sm-ai/configs/model_registry.json
llm.default-timeout-ms=30000
llm.max-rows-per-call=50
llm.max-bytes-per-row=65536
llm.max-tokens-per-call=65536
llm.strict-limits=false

# Проверка авторизации через OpenSearch
llm.auth.opensearch-host=localhost
llm.auth.opensearch-port=9200
llm.auth.ca-cert-path=/app/opensearch/config/ca-cert.pem

# Langfuse (опционально)
llm.langfuse.enabled=false

logging.file.path=/app/logs/opensearch/sm-ai

Проверка работоспособности

После запуска сервис доступен по следующим эндпоинтам:

МетодПутьОписаниеАвторизация
GET/healthПроверка состояния: возвращает {"status":"ok"}Не требуется
GET/modelsСписок моделей из реестраТребуется
POST/llm-runВыполнение запроса к LLM-моделиТребуется

Пример проверки /health (заголовок авторизации не требуется):

curl https://sm-ai-host:8010/health

Пример вызова /models с заголовком HTTP Basic Authentication:

curl https://sm-ai-host:8010/models \
-u <логин>:<пароль>
к сведению

Если server.ssl.enabled=false, эндпоинты доступны по http://.


Коды ответов

Успешные ответы возвращаются в формате, специфичном для эндпоинта (см. раздел проверка работоспособности). Ошибки — в едином формате:

{"detail": {"status": "...", "message": "..."}}
HTTP-кодСитуация
200Успешный ответ
400Невалидный JSON в теле запроса
400Прочие ошибки выполнения запроса (нарушение лимитов, некорректные параметры и т.п.)
403Ошибка авторизации
422Ошибка валидации тела запроса
502Ошибка LLM-провайдера или невалидный structured output
502Непредвиденная ошибка сервиса
504Таймаут ожидания ответа от LLM-провайдера