Поиск
Функция ИИ-поиска подключается к порталу документации. Она позволяет находить ответы не только по точному совпадению ключевых слов, но и по смыслу — с учетом контекста и близости формулировок.
Требования
OpenAI API-совместимый инференс-сервер:
Облачные сервисы: OpenAI, DeepSeek.
Локальные или опенсорсные модели: LM Studio, Llama.cpp, vLLM или другой сервер, поддерживающий OpenAI API.
Для работы поиска используются две модели:
Эмбеддинг-модель — преобразует статьи в векторные представления (эмбеддинги), которые сохраняются в векторной базе данных.
Чат-модель — формирует итоговый релевантный ответ для пользователя на основе найденных статей.
Как работает
Каталоги на портале документации разбиваются на части (чанки). Эти части преобразуются в эмбеддинги и сохраняются в векторной базе данных (Qdrant).
Пользователь вводит запрос в портале для чтения Gramax.
Gramax передает запрос на ИИ-сервер
docportal-ai.ИИ-сервер
docportal-aiразбивает запрос и ищет совпадения в векторной БД.На основе найденных совпадений чат-модель генерирует связный и понятный ответ.
Ответ возвращается обратно в интерфейс портала документации Gramax, где пользователь его читает.
ИИ-сервер docportal-ai является прослойкой, которая соединяет портал документации, векторную БД и модели. Его можно масштабировать и использовать для нескольких порталов (см. параметр AI_INSTANCE_NAME).
Настройка
Разверните 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В
docker-compose.yamlпортала документации добавьте переменные окружения для подключения к ИИ-сервису:AI_SERVER_URL— URL до сервисаdocportal-ai. Не указывайте завершающий слэш (/).
Пример:https://ai.docportal.local.AI_TOKEN— токен авторизации, задается при запускеdocportal-ai.AI_INSTANCE_NAME— уникальный идентификатор вашего портала. Один экземплярdocportal-aiможет обслуживать несколько порталов.
Перезапустите
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; } }