Настройки 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 | Порт OpenSearch | 9200 |
llm.auth.ca-cert-path | Путь до CA, которой подписан серверный сертификат OpenSearch | — |
Параметр llm.auth.ca-cert-path обязателен — без него сервис не сможет валидировать серверный сертификат OpenSearch при проверке авторизации.
Параметры трассировки Langfuse (опционально)
SM-AI поддерживает отправку трассировок запросов в Langfuse. По умолчанию трассировка отключена.
| Параметр | Описание | Значение по умолчанию |
|---|---|---|
llm.langfuse.enabled | Включить отправку трассировок в Langfuse | false |
llm.langfuse.public-key | Публичный ключ проекта Langfuse | — |
llm.langfuse.secret-key | Секретный ключ проекта Langfuse | — |
llm.langfuse.host | URL инстанса Langfuse | https://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-провайдера |