ИИ-функции
Искусственный интеллект в Gramax Enterprise Server расширяет возможности работы с документацией, предлагая две ключевые функции:
ИИ-поиск. Умный поиск по смыслу, а не только по ключевым словам.
ИИ-редактор. Помощник на базе большой языковой модели (LLM) для генерации и редактирования текста, а также транскрипции речи.
Для работы используется отдельный LLM-сервис, который запускается вместе с Gramax.
Если вы ранее уже загружали docker-compose.yaml и .env файлы для Gramax, их требуется обновить до последней версии, чтобы в них появились необходимые для ИИ-сервисов компоненты.
Требования
OpenAI API-совместимый инференс-сервер:
Облачные сервисы: OpenAI, DeepSeek.
Локальные или опенсорсные модели: LM Studio, Llama.cpp, vLLM или другой сервер, поддерживающий OpenAI API.
Настройка LLM-сервиса
Для активации ИИ-возможностей необходимо настроить переменные в .env файле, расположенном рядом с docker-compose.yaml. Конфигурация включает в себя настройку как для векторного поиска, так и для ИИ-редактора.
Необходимые переменные:
VECTORDB__TYPE,VECTORDB__HOSTEMBEDDING__TYPE,EMBEDDING__MODEL,EMBEDDING__DIMENSIONS,EMBEDDING__APIKEYCHAT__TYPE,CHAT__MODEL,CHAT__APIKEYAUTH__ADMIN__TOKEN
Пример полной .env конфигурации:
# --- Настройки векторной базы данных --- VECTORDB__TYPE=qdrant VECTORDB__HOST=http://db:6333 # Адрес внутреннего Qdrant-сервиса из docker-compose # --- Настройки для векторного поиска (Embeddings) --- EMBEDDING__TYPE=openai EMBEDDING__MODEL=text-embedding-3-small # Модель для создания векторов EMBEDDING__DIMENSIONS=1536 # Размерность векторов для указанной модели EMBEDDING__APIKEY=<ВАШ_КЛЮЧ_ОТ_ПРОВАЙДЕРА_EMBEDDINGS> # --- Настройки для ИИ-редактора (Chat) --- CHAT__TYPE=openai CHAT__MODEL=gpt-4o # Модель для генерации текста CHAT__APIKEY=<ВАШ_КЛЮЧ_ДЛЯ_ЧАТА> # --- Ключ для доступа к LLM-сервису --- AUTH__ADMIN__TOKEN=<СОЗДАЙТЕ_СЕКРЕТНЫЙ_КЛЮЧ>
Стриминг поисковых ответов
Для корректной работы стриминга, необходимо правильно настроить прокси, который будет проксировать запросы к LLM-сервису.
Пример для Angie
upstream vm-ai-gramax { zone http:vm-ai-gramax 1m; server <ip>:<port>; } server { listen <ip>:80; server_name ai-server.gramax www.ai-server.gramax; return 301 https://$server_name$request_uri; } server { listen <ip>:443 ssl; http2 on; server_name ai-server.gramax www.ai-server.gramax; status_zone https:ai-server.gramax; include /etc/angie/http.d/common/ssl-gram-ax.conf; include /etc/angie/http.d/common/noindex_robots.conf; include /etc/angie/http.d/common/error_pages.conf; location / { include /etc/angie/http.d/common/reverse-proxy.conf; client_max_body_size 500m; proxy_http_version 1.1; proxy_pass http://vm-ai-gramax; proxy_buffering off; proxy_cache off; proxy_read_timeout 3600s; proxy_send_timeout 3600s; tcp_nodelay on; } }
Подключение Gramax к LLM-сервису
После настройки LLM-сервиса необходимо «сообщить» основному приложению Gramax, как к нему обращаться. Для этого в .env файле установите следующие переменные:
AI_TOKEN— токен авторизации. Укажите здесь то же значение, что и вAUTH__ADMIN__TOKENдля LLM-сервиса.AI_SERVER_URL— URL для доступа к LLM-сервису. Если вы не меняли настройки, это будет{GES_URL}/ai.AI_INSTANCE_NAME— уникальный идентификатор вашего портала. Это позволяет одному LLM-сервису работать с несколькими независимыми порталами Gramax. Придумайте любое уникальное имя, например,my-docs-portal.
Запуск и остановка
Для запуска Gramax Enterprise Server вместе с LLM-сервисами используйте команду:
docker compose --profile ai up -d
Для остановки используйте команду:
docker compose --profile ai down
Справочник по переменным окружения
Ниже представлено детальное описание всех переменных для тонкой настройки LLM-сервиса.
Настройка векторной базы данных
VECTORDB__TYPE— тип векторной БД. Обязателен.Значение:
qdrant.
VECTORDB__HOST— адрес для подключения к БД Qdrant. Обязателен.По умолчанию:
http://db:6333
Настройка эмбеддингов (для поиска)
EMBEDDING__TYPE— тип провайдера для создания эмбеддингов. Обязателен.Значения:
openai: для OpenAI и любых других API-совместимых сервисов (например, Deepseek, OpenRouter, Ollama).
EMBEDDING__MODEL— название модели, которую будет использовать провайдер. Модель должна поддерживать создание эмбеддингов (Embeddings). Обязателен.Примечание: Список доступных моделей и их названия смотрите в документации вашего провайдера (OpenAI, Ollama и т.д.).
Пример:
text-embedding-3-large,text-embedding-3-small,mxbai-embed-large.
EMBEDDING__DIMENSIONS— размерность векторов, которую создает модель. Это значение обычно указано в документации к модели. Обязателен.Пример:
1536
EMBEDDING__APIKEY— API-ключ для доступа к сервису провайдера. Некоторые провайдеры могут требовать его наличие, даже если он не используется. В таком случае можно указать любую строку.EMBEDDING__HOST— адрес API-сервера провайдера. Нужно указывать для OpenAI-совместимых провайдеров (кроме самого OpenAI) или для удаленного Ollama.Примеры:
https://api.deepseek.com/v1,http://my-ollama-host:11434.
EMBEDDING__SOCKSPROXYURL— адрес SOCKS5-прокси. Полезно, если доступ к API провайдера возможен только через прокси-сервер (например, из-за корпоративных ограничений или блокировок).Формат:
socks5://user:password@host:portПример:
socks5://proxy_user:proxy_pass@192.168.1.1:1080
Настройка LLM для генерации ответов (для ИИ-редактора)
Для работы ИИ-редактора используются модели, поддерживающие технологию Chat Completions — это стандартный способ взаимодействия с чат-ботами, когда модель продолжает диалог или выполняет текстовую задачу.
CHAT__TYPE— тип провайдера. Обязателен.Значение:
openai(поддерживает OpenAI и совместимые с ним сервисы).
CHAT__MODEL— название модели, которая будет использоваться для генерации текста. Обязателен.Пример:
gpt-4o,gpt-3.5-turbo.
CHAT__APIKEY— API-ключ для доступа к сервису провайдера. Некоторые провайдеры могут требовать его наличие, даже если он не используется. В таком случае можно указать любую строку.CHAT__SOCKSPROXYURL— адрес SOCKS5-прокси. Полезно, если доступ к API провайдера возможен только через прокси-сервер (например, из-за корпоративных ограничений или блокировок).Формат:
socks5://user:password@host:port
Общие настройки
AUTH__ADMIN__TOKEN— секретный токен для авторизации запросов от Gramax к LLM-сервису. Придумайте надежное строковое значение. Обязателен.
Настройка CORS
CORS__ALLOWED_{INDEX}— Добавляет разрешенный origin для CORS.{INDEX}— это индекс элемента, начиная с0. Если переменные не заданы, разрешаются запросы с любого origin.Пример:
CORS__ALLOWED_0="http://example.com",CORS__ALLOWED_1="https://my-site.io".
Настройка логирования
Вы можете гибко настроить, куда и какого уровня логи будет отправлять LLM-сервис.
LOGGING__CONSOLE— Включает/выключает вывод логов в консоль Docker.Значения:
true(по умолч.),false.
Для отправки логов во внешние системы (например, файл или Elasticsearch) настройте "получателей" (targets), используя индекс {INDEX} для каждого.
Пример: Логирование в файл
# Настраиваем первого получателя (индекс 0) LOGGING__TARGETS_0__TYPE=file LOGGING__TARGETS_0__LEVEL=info # Уровень логов (trace, debug, info, warn, error, fatal) LOGGING__TARGETS_0__OPTIONS__DESTINATION=app/logs/llm-service.log # Путь к файлу
Пример: Логирование в Elasticsearch
# Настраиваем второго получателя (индекс 1) LOGGING__TARGETS_1__TYPE=elasticsearch LOGGING__TARGETS_1__LEVEL=warn LOGGING__TARGETS_1__OPTIONS__NODE=http://localhost:9200 LOGGING__TARGETS_1__OPTIONS__INDEX=gramax-llm-logs # Опциональная авторизация LOGGING__TARGETS_1__OPTIONS__AUTH__USERNAME=elastic LOGGING__TARGETS_1__OPTIONS__AUTH__PASSWORD=your_password
Все переменные для логирования:
LOGGING__TARGETS_{INDEX}__TYPE— (Обязательно для получателя) Тип:file,seq,elasticsearch.LOGGING__TARGETS_{INDEX}__LEVEL— Минимальный уровень логов для этого получателя. По умолч.:trace.LOGGING__TARGETS_{INDEX}__OPTIONS__DESTINATION— (Дляtype="file") Путь к файлу.LOGGING__TARGETS_{INDEX}__OPTIONS__SERVERURL— (Дляtype="seq") Адрес Seq-сервера.LOGGING__TARGETS_{INDEX}__OPTIONS__APIKEY— (Дляtype="seq") API-ключ для Seq.LOGGING__TARGETS_{INDEX}__OPTIONS__NODE— (Дляtype="elasticsearch") Адрес узла Elasticsearch.LOGGING__TARGETS_{INDEX}__OPTIONS__INDEX— (Дляtype="elasticsearch") Имя индекса в Elasticsearch.LOGGING__TARGETS_{INDEX}__OPTIONS__AUTH__*— Настройки авторизации для Elasticsearch (USERNAME,PASSWORD,APIKEY).