ADR
ADR-007: Radar Local Knowledge Layer
ADR-007: Radar Local Knowledge Layer
Дата: 2026-06-17 Статус: draft (Foundation — не implementation)
Контекст
Radar — exploration-контур SprosOS. Его задача: собирать сигналы спроса, извлекать JTBD, формировать opportunity cards и питать базу гипотез. Для этого нужна инфраструктура хранения, которая:
- Держит большие объёмы сырых данных (отзывы, страницы, выгрузки, serp snapshots)
- Позволяет делать embedding и semantic search
- Не сжигает бюджет на облачное хранение гигабайтов мусора
Решение: локальный knowledge layer как data refinery + cloud как control plane.
Архитектура
┌──────────────────────────────────────────────────────────────────┐
│ Локальный ПК (Radar Node) │
│ │
│ ┌──────────────┐ ┌──────────────┐ ┌────────────────────────┐ │
│ │ Raw Storage │ │ Normalized │ │ Semantic / Vector │ │
│ │ (MinIO/fs) │ │ (Postgres) │ │ (Qdrant) │ │
│ │ │ │ │ │ │ │
│ │ HTML, JSONL │ │ Evidence │ │ Embeddings │ │
│ │ CSV, snap │ │ Signal │ │ Chunks │ │
│ │ dumps │ │ JTBDCandidate│ │ Summaries │ │
│ └──────────────┘ └──────────────┘ └────────────────────────┘ │
│ ▲ │
│ ┌───────────────────────┴──────────────────────────────────────┐│
│ │ n8n Orchestrator ││
│ │ Connectors → Evidence Pipeline → Semantic Extractors ││
│ └──────────────────────────────────────────────────────────────┘│
│ │
│ ┌──────────────┐ ┌──────────────────┐ ┌──────────────────┐ │
│ │ Redis │ │ Python Workers │ │ Ollama/vLLM │ │
│ │ (queue) │ │ (mining) │ │ (local LLM) │ │
│ └──────────────┘ └──────────────────┘ └──────────────────┘ │
└──────────────────────────────────────────────────────────────────┘
│ sync (summary-level)
▼
┌──────────────────────────────────────────────────────────────────┐
│ Облако (SprosOS UI) │
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────────┐ │
│ │ Opportunity │ │ Radar │ │ System Console │ │
│ │ Pipeline │ │ Vectors │ │ Sync/ConnectorHealth │ │
│ └──────────────┘ └──────────────┘ └──────────────────────┘ │
└──────────────────────────────────────────────────────────────────┘
3 слоя хранения
1. Raw / Cold Storage
- Что: сырые артефакты: HTML, JSON, CSV, отзывы, serp snapshots, страницы
- Технология: MinIO или локальная файловая система (parquet/JSONL)
- Почему: дёшево, не надо embedding-ить весь мусор
- Индекс: метаданные в Postgres (source, date, url, size, hash)
2. Normalized Storage
- Что: структурированные сущности Radar
- Технология: PostgreSQL
- Сущности:
Vector— направление разведкиSource— источник данныхEvidenceItem— единица свидетельстваSignal— выделенный сигналPainCluster— кластер болейJTBDCandidate— гипотеза JTBDOpportunity— готовая возможностьOpportunityScore— оценка возможностиConnectorRun— лог прогона коннектораRadarRun— лог прогона вектора
3. Semantic / Vector Layer
- Что: embeddings, semantic retrieval, similarity, re-clustering
- Технология: Qdrant
- Какие данные: summaries, cleaned chunks, extracted problem statements, JTBD candidates, opportunity cards
- Что НЕ векторизовать: весь html, сырые архивы, мусорные страницы
Локальный стек (docker-compose outline)
services:
postgres:
image: postgres:16
volumes: [radar-postgres-data:/var/lib/postgresql/data]
qdrant:
image: qdrant/qdrant
volumes: [radar-qdrant-data:/qdrant/storage]
redis:
image: redis:7-alpine
minio:
image: minio/minio
volumes: [radar-minio-data:/data]
command: server /data --console-address :9001
n8n:
image: n8nio/n8n
volumes: [radar-n8n-data:/home/node/.n8n]
depends_on: [postgres, redis]
worker:
build: ./workers
depends_on: [postgres, qdrant, redis, minio]
ollama: # опционально
image: ollama/ollama
volumes: [radar-ollama-data:/root/.ollama]
Cloud ↔ Local sync model
| Тип данных | Где хранится | Что уходит в cloud |
|---|---|---|
| Raw evidence | Локально | Ничего (только метаданные) |
| Normalized entities | Postgres локально | Summary-level копия для UI |
| Embeddings | Qdrant локально | Ничего (только при поиске) |
| Opportunity cards | Postgres локально | ✅ В облачный UI |
| Connector logs | Postgres локально | ✅ Health/status summary |
| Evidence count/score | Postgres локально | ✅ Агрегаты для дашборда |
Безопасность
- Raw-данные не покидают локальный ПК
- Embeddings — локально, не уходят в облако
- В облако: только summary, opportunity cards, статусы, агрегаты
Когда строить
NOW: Foundation (этот ADR + registries + docs)
NEXT: Radar Lite MVP — cloud-first, без локального узла
LATER: Развёртывание локального Radar Node, когда будет реальная потребность в объёмах
Решение
✅ Локальный knowledge layer — будущая инфраструктура Radar.
✅ Сейчас — foundation: ADR, registries, архитектура.
✅ Radar Lite MVP — на облаке, без локального узла.
✅ Локальный узел — после подтверждения ценности Radar.
Связанные документы
docs/reports/REPORT-RADAR-FOUNDATION-AUDIT.md— аудит текущего mining/radardocs/registries/entity-registry.yaml— Radar entities (to be added)docs/infra/RADAR-LOCAL-NODE.md— подробный план локального узлаdocs/radar/agent-roles.md— роли субагентов