Поиск

Функция ИИ-поиска подключается к порталу документации. Она позволяет находить ответы не только по точному совпадению ключевых слов, но и по смыслу — с учетом контекста и близости формулировок.

Требования

OpenAI API-совместимый инференс-сервер:

  • Облачные сервисы: OpenAI, DeepSeek.

  • Локальные или опенсорсные модели: LM Studio, Llama.cpp, vLLM или другой сервер, поддерживающий OpenAI API.

Для работы поиска используются две модели:

  1. Эмбеддинг-модель — преобразует статьи в векторные представления (эмбеддинги), которые сохраняются в векторной базе данных.

  2. Чат-модель — формирует итоговый релевантный ответ для пользователя на основе найденных статей.

Как работает

  1. Каталоги на портале документации разбиваются на части (чанки). Эти части преобразуются в эмбеддинги и сохраняются в векторной базе данных (Qdrant).

  2. Пользователь вводит запрос в портале для чтения Gramax.

  3. Gramax передает запрос на ИИ-сервер docportal-ai.

  4. ИИ-сервер docportal-ai разбивает запрос и ищет совпадения в векторной БД.

  5. На основе найденных совпадений чат-модель генерирует связный и понятный ответ.

  6. Ответ возвращается обратно в интерфейс портала документации Gramax, где пользователь его читает.

ИИ-сервер docportal-ai является прослойкой, которая соединяет портал документации, векторную БД и модели. Его можно масштабировать и использовать для нескольких порталов (см. параметр AI_INSTANCE_NAME).

Настройка

  1. Разверните Docker Compose с сервером поиска по инструкции — https://hub.docker.com/r/gramax/docportal-ai.

    Пример docker-compose.yml:

    version: "3.8" services: db: image: qdrant/qdrant environment: - QDRANT__SERVICE__MAX_REQUEST_SIZE_MB=512 ports: - 3006:6333 volumes: - server-ai-qdrant-storage:/qdrant/storage docportal-ai: image: gramax/docportal-ai environment: - VECTORDB__TYPE=qdrant - VECTORDB__HOST=http://db:6333 - EMBEDDING__TYPE=openai - EMBEDDING__MODEL=text-embedding-3-small - EMBEDDING__DIMENSIONS=1536 - EMBEDDING__APIKEY=<ваш API-ключ> - CHAT__TYPE=openai - CHAT__MODEL=gpt-4o - CHAT__APIKEY=<ваш API-ключ> - AUTH__ADMIN__TOKEN=<токен для Gramax> ports: - 3005:3005 volumes: - server-ai-api-storage:/app/storage - ./config.yaml:/app/config/config.yaml depends_on: - db volumes: server-ai-qdrant-storage: external: false server-ai-api-storage: external: false
  2. В docker-compose.yaml портала документации добавьте переменные окружения для подключения к ИИ-сервису:

    • AI_SERVER_URL — URL до сервиса docportal-ai. Не указывайте завершающий слэш (/).
      Пример: https://ai.docportal.local.

    • AI_TOKEN — токен авторизации, задается при запуске docportal-ai.

    • AI_INSTANCE_NAME — уникальный идентификатор вашего портала. Один экземпляр docportal-ai может обслуживать несколько порталов.

  3. Перезапустите docker-compose.yaml.

Стриминг поисковых ответов

Для корректной работы стриминга, необходимо правильно настроить прокси, который будет проксировать запросы к 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; } }