landvex: Datafabrik + Vision + Infrastruktur för 50GB skalning
Datafabrik: - Skördare: crawler, källvitlista, upphandlingsskördare - Extraktor: LLM-baserad schemastyrd extraktion - Upplösare: Entitetsupplösning och deduplicering - Köer: Schemalagd / kunddriven / fält - Agentorkestrering: 20+ parallella agenter Vision: - Identify-modell: ResNet50 + kontrastivt lärande - Träningspipeline: NT-Xent loss - Vektordatabas: FAISS för snabb sökning - OCR-pipeline: Typskyltsläsning Infrastruktur: - Docker Compose production - Terraform för AWS ECS - Prometheus + Grafana monitorering - Neo4j + FAISS + MinIO + Redis
This commit is contained in:
+98
-55
@@ -3,82 +3,125 @@
|
||||
> Kunskapsgraf över visuellt identifierbar fysisk infrastruktur.
|
||||
> Grafen är produkten. Allt annat — appar, API:er, dashboards — är gränssnitt mot grafen.
|
||||
|
||||
## Struktur
|
||||
## Arkitektur (skalad för 50GB+ agentkraft)
|
||||
|
||||
```
|
||||
projects/landvex/
|
||||
├── 00-styrning/ # Validering, verifiering
|
||||
├── 10-data/ # Master-data (JSON)
|
||||
│ ├── lvx-klassposter-master-v3.json
|
||||
│ ├── lvx-produktmodeller-*.json
|
||||
│ ├── lvx-graf-kanter-v3.json
|
||||
│ └── lvx-id-register.json
|
||||
├── 20-automation/ # Ingest-pipeline
|
||||
│ ├── ingest.py
|
||||
│ └── intag/ # Kandidatposter per våg
|
||||
├── 30-produkt/ # API-spec, demosvar
|
||||
├── 40-strategi/ # Genome-strategi, IOL-spec
|
||||
├── api/ # FastAPI Identify-API
|
||||
├── db/ # Neo4j-laddning
|
||||
├── scripts/ # Export, bygghjälp
|
||||
├── arkiv/ # Ersatta versioner
|
||||
└── build.sh # Master byggscript
|
||||
┌─────────────────────────────────────────────────────────────────┐
|
||||
│ LANDVEX IOL v3 │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ SaaS-lager │ Identify API │ Tillverkarportal │
|
||||
│ (API-nycklar, │ (foto → │ (claims, │
|
||||
│ billing, SLAs) │ kandidater) │ verifiering) │
|
||||
├──────────────────────┼────────────────┼────────────────────────┤
|
||||
│ Datafabrik │ Vision │ QUIXZOOM │
|
||||
│ (skördning, │ (embeddings, │ (bounties, │
|
||||
│ extraktion, │ OCR, │ fältverifiering, │
|
||||
│ entitetsupplösning)│ träning) │ individregister) │
|
||||
├──────────────────────┴────────────────┴────────────────────────┤
|
||||
│ Property Graph (Neo4j) │ Vektordatabas (FAISS) │
|
||||
│ 64 noder → 1M+ noder │ 0 → 1M+ embeddings │
|
||||
├─────────────────────────────────────────────────────────────────┤
|
||||
│ Ingest Pipeline → Master Data → Graf-export → API │
|
||||
└─────────────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
## Komponenter
|
||||
|
||||
### Datafabrik (`datafabrik/`)
|
||||
Automatiserad datainsamling och bearbetning.
|
||||
|
||||
| Modul | Beskrivning |
|
||||
|-------|-------------|
|
||||
| `skordare/` | Webb-crawlers för tillverkare, upphandlingar, standarder |
|
||||
| `extraktor/` | LLM-baserad schemastyrd extraktion (GPT-4o-mini) |
|
||||
| `upplosare/` | Entitetsupplösning och deduplicering |
|
||||
| `koer/` | Tre köer: schemalagd / kunddriven / fält |
|
||||
| `agent_orkestrering.py` | Koordinerar 20+ parallella agenter |
|
||||
|
||||
### Vision (`vision/`)
|
||||
Bildigenkänning och träning.
|
||||
|
||||
| Modul | Beskrivning |
|
||||
|-------|-------------|
|
||||
| `modeller/` | Identify-modell (ResNet50 + kontrastivt lärande) |
|
||||
| `traening/` | Träningspipeline med NT-Xent loss |
|
||||
| `embeddings/` | FAISS-vektordatabas + OCR-pipeline |
|
||||
| `dataset/` | Bilddataset från Zoomer-foton och tillverkare |
|
||||
|
||||
### API (`api/`)
|
||||
FastAPI-baserad Identify API.
|
||||
|
||||
| Endpoint | Beskrivning |
|
||||
|----------|-------------|
|
||||
| `POST /v0/identify` | Bild → rankade kandidater |
|
||||
| `GET /v0/objects/{id}` | Komplett post |
|
||||
| `GET /v0/search` | Fritextsök |
|
||||
| `POST /v0/feedback` | Skapa bounty |
|
||||
|
||||
### Infrastruktur (`infrastruktur/`)
|
||||
|
||||
| Komponent | Teknik |
|
||||
|-----------|--------|
|
||||
| Graf-databas | Neo4j Enterprise |
|
||||
| Vektordatabas | FAISS |
|
||||
| Objektlagring | MinIO (S3-kompatibel) |
|
||||
| Köer | Redis |
|
||||
| Monitorering | Prometheus + Grafana |
|
||||
| Orkestrering | AWS ECS Fargate |
|
||||
|
||||
## Snabbstart
|
||||
|
||||
```bash
|
||||
# Bygg & kör allt
|
||||
# 1. Bygg och starta lokalt
|
||||
./build.sh
|
||||
|
||||
# Endast API (förutsätter Neo4j)
|
||||
docker compose up -d api
|
||||
# 2. Produktion med Docker Compose
|
||||
docker compose -f docker-compose.prod.yml up -d
|
||||
|
||||
# Endast data-export
|
||||
python3 scripts/export_csv.py
|
||||
python3 db/load_to_neo4j.py
|
||||
# 3. Skala ut med Terraform
|
||||
cd infrastruktur/terraform
|
||||
terraform apply
|
||||
|
||||
# 4. Kör agentarmén för Tier 1
|
||||
python3 datafabrik/agent_orkestrering.py --tier 1 --domäner TRP,ELN,VAT
|
||||
```
|
||||
|
||||
## API
|
||||
|
||||
| Endpoint | Beskrivning |
|
||||
|----------|-------------|
|
||||
| `GET /health` | Status + antal poster/kanter |
|
||||
| `POST /v0/identify` | Bild → rankade kandidater |
|
||||
| `GET /v0/objects/{lvx_id}` | Komplett post |
|
||||
| `GET /v0/objects/{lvx_id}/succession` | Ersättningskedja |
|
||||
| `GET /v0/search?q=...` | Fritextsök |
|
||||
| `GET /v0/standards/{b}/objects` | Standard → objekt |
|
||||
| `POST /v0/feedback` | Fel/okänt → bounty |
|
||||
|
||||
## Data
|
||||
|
||||
- **64 noder** (37 klasser + 27 modeller)
|
||||
- **176 kanter** (80 LVX-upplösta, 82 standard, 14 textnoder)
|
||||
- **9 domäner**: TRP, ELN, VAT, TEL, BYG, PRK, JVG, HMN, FLG
|
||||
- **Verifieringsnivåer**: obekräftad → källbelagd → fältverifierad → tillverkarbekräftad
|
||||
|
||||
## Arkitektur
|
||||
## Dataflöde
|
||||
|
||||
```
|
||||
Ingest Pipeline API Layer Graph DB
|
||||
─────────────────────────────────────────────────────────
|
||||
Kandidatposter → resolve/merge → Neo4j (propertygraf)
|
||||
↓ ↓ ↓
|
||||
Extraktion → Identify API → Query/Search
|
||||
↓ ↓ ↓
|
||||
Zoomer-bounties ← Feedback ← Succession
|
||||
Skördare → Rådata → Extraktor → Kandidatposter → Upplösare →
|
||||
Master v3 → Graf-export → Neo4j + FAISS → API → Kund
|
||||
↑_________________________________________________↓
|
||||
(feedback → bounty → ny skördning)
|
||||
```
|
||||
|
||||
## Mätetal
|
||||
|
||||
| Mått | Nu | Mål (12 mån) |
|
||||
|------|-----|--------------|
|
||||
| Objektklasser | 37 | 500+ |
|
||||
| Produktmodeller | 27 | 100 000+ |
|
||||
| Grafkanter | 176 | 1 000 000+ |
|
||||
| Identify konfidens | Mockad | >90% top-3 |
|
||||
| Kostnad/faktum | N/A | <$0.001 |
|
||||
|
||||
## Regler
|
||||
|
||||
1. **Fakta bär alltid källa** — inga påståenden utan proveniens
|
||||
2. **Landvex-ID är permanent** — namn ändras, ID aldrig
|
||||
3. **Konfidens exponeras alltid** — kunden ser aldrig osäkert som sanning
|
||||
4. **Problem utan källa filtreras bort** — vid API-serialisering
|
||||
1. **Enda sanningskälla:** `10-data/` + `lvx-objekt-schema.json`
|
||||
2. **Aldrig mock i kundnära väg**
|
||||
3. **Källa på varje påstående**
|
||||
4. **ID:n mintas endast via registertjänsten**
|
||||
5. **Verifieringstrappan är enkelriktad**
|
||||
|
||||
## Dokument
|
||||
|
||||
- [Genome-strategi](40-strategi/landvex-genome-strategi.md)
|
||||
- [IOL-grundspec](40-strategi/iol-grundspecifikation.md)
|
||||
- [API-spec](30-produkt/lvx-pilot-api-spec.md)
|
||||
- [Agentarmé](00-styrning/AGENTARME.md)
|
||||
|
||||
## Team
|
||||
|
||||
58 agenter · 11 skvadroner · 4 faser
|
||||
|
||||
Litet kärnteam, stor agentflotta. **Skalning sker i beräkning, inte i huvuden.**
|
||||
|
||||
Reference in New Issue
Block a user