step-8: add ingest.py, align README

- ingest.py: embed chunks via Ollama nomic-embed-text, index in
  ChromaDB (cosine space); --stem / --force / batch-100 / ETA display
- README: fix step-8 input path (step-5 → step-6), script path
  (scripts/ → step-8/), add --force explanation and real timings
This commit is contained in:
2026-04-14 10:59:40 +02:00
parent a5f8b8d119
commit 7d95872a8e
2 changed files with 249 additions and 11 deletions
+25 -11
View File
@@ -506,17 +506,29 @@ Ollama è sempre disponibile sul sistema.
### Step 8 — Vettorizzazione
**Tipo:** automatico (lento)
**Input:** `step-5/<stem>/chunks.json`
**Input:** `step-6/<stem>/chunks.json`
**Output:** `chroma_db/` popolato
**Script:** `scripts/ingest.py`
**Script:** `step-8/ingest.py`
```bash
python scripts/ingest.py step-5/documento/chunks.json
source .venv/bin/activate
python step-8/ingest.py --stem <nome>
```
Trasforma ogni chunk in un vettore numerico e lo salva in ChromaDB.
È il processo più lento — su CPU circa 1-3 secondi per chunk.
Per 300 chunk aspetta 5-15 minuti.
È il processo più lento — su CPU circa 1 secondo per chunk.
Per 900 chunk aspetta circa 15 minuti.
**Argomenti:**
| Argomento | Descrizione |
|---|---|
| `--stem <nome>` | Processa un singolo documento. Senza questo argomento processa tutti gli stem trovati in `step-6/` |
| `--force` | Cancella e ricrea la collection se esiste già. Senza `--force`, se la collection è presente lo step viene saltato |
**Quando usare `--force`:**
Se hai modificato i chunk (es. hai rieseguito step-6 dopo correzioni), la collection in ChromaDB
contiene ancora i vecchi vettori. `--force` la cancella e la ricrea da zero con i chunk aggiornati.
**Cosa succede per ogni chunk:**
@@ -528,7 +540,7 @@ vettore di 768 numeri
[0.23, -0.41, 0.87, 0.12, ...]
▼ ChromaDB
salva: testo + vettore + metadati
salva: testo + vettore + metadati (sezione, titolo, sub_index)
```
**Perché 768 numeri:**
@@ -541,14 +553,16 @@ Questo è ciò che permette il retrieval semantico.
```
✅ Ollama OK — nomic-embed-text disponibile
📦 301 chunk da ingestire
[ 1/301] ✓ sezione_1__sotto_1__s0 ETA: 290s
[ 2/301] ✓ sezione_1__sotto_2__s0 ETA: 287s
📦 872 chunk da ingestire
[ 1/872] ✓ sezione_1__sotto_1__s0 ETA: 870s
[ 2/872] ✓ sezione_1__sotto_2__s0 ETA: 867s
...
[301/301] ✓ sezione_9__sotto_42__s0 ETA: 0s
[872/872] ✓ sezione_9__sotto_42__s0 ETA: 0s
✅ Ingestione completata in 312s — 301/301 chunk salvati
✅ Ingestione completata in 718s — 872/872 chunk salvati
Collection 'nietzsche' in chroma_db/
```
`chroma_db/` contiene ora tutti i vettori su disco.