ИИ-функции

Искусственный интеллект в Gramax Enterprise Server расширяет возможности работы с документацией, предлагая две ключевые функции:

  1. ИИ-поиск. Умный поиск по смыслу, а не только по ключевым словам.

  2. ИИ-редактор. Помощник на базе большой языковой модели (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__HOST

  • EMBEDDING__TYPE, EMBEDDING__MODEL, EMBEDDING__DIMENSIONS, EMBEDDING__APIKEY

  • CHAT__TYPE, CHAT__MODEL, CHAT__APIKEY

  • AUTH__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).