Сервисы

search-service

Семантический поиск Conveyor — индексация и retrieval по узлам, плагинам и документации через Qdrant и embeddings.

search-service — опциональный сервис семантического поиска: индексирует узлы, плагины и справку, отдаёт релевантные результаты по embeddings (Qdrant), при необходимости использует Neo4j. Очередь индексации (BullMQ) — через Redis. Слушает TCP :3000 и health :3001.

На какие вопросы отвечает раздел: Зачем нужен поиск? Какие хранилища использует? Обязателен ли он?

Цель

Быстро находить нужные узлы/плагины/разделы справки по смыслу запроса и давать контекст flow-agent.

Задачи

  • индексация сущностей (узлы, плагины, документация);
  • retrieval по embeddings из Qdrant;
  • reconcile/relay индексов;
  • intent-классификация запросов.

Требования

  • Redis — BullMQ-очередь outbox индексации (SEARCH_SERVICE_INDEX_RELAY_*). Без доступного Redis relay/worker не поднимутся: при неверном REDIS_HOST типична ошибка ECONNREFUSED на 127.0.0.1:6379.
  • Qdrant (REST 6333, не gRPC 6334) — векторное хранилище. Образ qdrant/qdrant:v1.17.x совместим с клиентом @qdrant/qdrant-js 1.17.x в backend.
  • embeddings (Ollama/OpenAI-совместимый API).
  • PostgreSQL. Опционально Neo4j.

Ограничения

  • опционален. Семантический retrieval по embeddings требует search-service, Qdrant и проиндексированный каталог.
  • качество зависит от модели embeddings и полноты индекса;
  • fetch failed / Failed to obtain server version в логах обычно означает недоступность Qdrant по QDRANT_URL (сеть, сервис не поднят, неверный порт).
  • Проверка без curl (prod-образы — node:alpine, curl не установлен):
    • предпочтительно: GET /health/deep на search-service (HTTP :3001) — блок qdrant должен быть ok;
    • из контейнера search-service: node -e "fetch('http://qdrant:6333/collections').then(r=>r.text()).then(console.log).catch(e=>{console.error(e);process.exit(1)})";
    • с хоста, если Qdrant проброшен наружу: curl -fsS http://127.0.0.1:6333/collections.

Настройки и переменные окружения

ПеременнаяЗачемНа что влияетПо умолчанию
SEARCH_SERVICE_TCP_LISTENАдрес TCP-сервисаПорт/интерфейс поиска0.0.0.0:3000
SEARCH_SERVICE_HEALTH_HTTP_LISTENАдрес healthПроверки готовности0.0.0.0:3001
SEARCH_SERVICE_START_MODEРежим стартаПоведение индексации при запускеlazy
EMBEDDING_MODELМодель embeddingsКачество векторизации
QDRANT_URLАдрес Qdrant (REST)Где хранятся векторыhttp://qdrant:6333
QDRANT_API_KEYAPI key Qdrant Cloud / securedЗаголовок авторизации
OLLAMA_BASE_URLАдрес LLM/embeddingsИсточник embeddingshttp://ollama:11434
HELP_INTENT_MODEL / HELP_INTENT_WEIGHTКлассификация intentРанжирование «помощь vs поиск»
SEARCH_SERVICE_NEO4J_*Доступ к Neo4jГрафовые связи (опц.)
DATABASE_URLПодключение к PostgresМетаданные индексов
REDIS_HOST / REDIS_PORTАдрес RedisBullMQ: relay и worker очереди индексацииlocalhost / 6379 (в compose — redis:6379)
SEARCH_SERVICE_INDEX_RELAY_ENABLEDВключить relay+workerАсинхронная индексация в Qdranttrue

Параметры retrieval/reconcile (SEARCH_RETRIEVAL_*, SEARCH_SERVICE_INDEX_RELAY_*, SEARCH_SERVICE_RECONCILE_*) — в «Справочнике».

Дальше