Сервисы
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-js1.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_KEY | API key Qdrant Cloud / secured | Заголовок авторизации | — |
OLLAMA_BASE_URL | Адрес LLM/embeddings | Источник embeddings | http://ollama:11434 |
HELP_INTENT_MODEL / HELP_INTENT_WEIGHT | Классификация intent | Ранжирование «помощь vs поиск» | — |
SEARCH_SERVICE_NEO4J_* | Доступ к Neo4j | Графовые связи (опц.) | — |
DATABASE_URL | Подключение к Postgres | Метаданные индексов | — |
REDIS_HOST / REDIS_PORT | Адрес Redis | BullMQ: relay и worker очереди индексации | localhost / 6379 (в compose — redis:6379) |
SEARCH_SERVICE_INDEX_RELAY_ENABLED | Включить relay+worker | Асинхронная индексация в Qdrant | true |
Параметры retrieval/reconcile (
SEARCH_RETRIEVAL_*,SEARCH_SERVICE_INDEX_RELAY_*,SEARCH_SERVICE_RECONCILE_*) — в «Справочнике».