2026-04-13 08:02:48 +02:00
# CLAUDE.md — RAG from Scratch
2026-04-15 11:38:45 +02:00
## Regole invarianti
2026-04-13 08:02:48 +02:00
2026-04-15 11:38:45 +02:00
- **Lingua:** Rispondi sempre in italiano.
- **Venv obbligatorio:** Usa `.venv/bin/python` o attiva con `source .venv/bin/activate` . Mai `pip` /`python` di sistema.
2026-04-17 13:44:41 +02:00
- **Non modificare `raw.md` :** Il file `raw.md` di ogni stem è immutabile. La copia di lavoro è sempre `clean.md` .
2026-04-13 08:02:48 +02:00
2026-04-15 11:38:45 +02:00
---
2026-04-17 13:44:41 +02:00
## Pipeline (operazioni in ordine)
2026-04-15 11:38:45 +02:00
```
2026-04-17 13:44:41 +02:00
PDF (sources/)
→ conversione (PDF → clean.md + structure_profile.json)
→ chunking (clean.md → chunks.json)
→ verifica (chunks.json → report + fix automatici)
→ vettorizzazione (chunks.json → ChromaDB)
→ retrieval (query → risposta via Ollama)
2026-04-15 11:38:45 +02:00
```
Il parametro `--stem` identifica il documento (nome PDF senza `.pdf` ). Lo stem è anche il nome della collection ChromaDB.
2026-04-13 08:02:48 +02:00
2026-04-15 11:38:45 +02:00
---
## File critici
| File | Ruolo |
|---|---|
2026-04-17 13:44:41 +02:00
| `config.py` | Fonte di verità: `EMBED_MODEL` , `OLLAMA_MODEL` , `TOP_K` , `TEMPERATURE` , `SYSTEM_PROMPT` |
| `chunker.py` | Chunking adattivo — `MIN_CHARS=200` , `MAX_CHARS=800` , `OVERLAP_S=2` |
| `verify_chunks.py` | Verifica chunk — stesse soglie di `chunker.py` |
| `fix_chunks.py` | Fix automatici su chunk anomali |
| `ingest.py` | Vettorizzazione ChromaDB — legge `EMBED_MODEL` da `config.py` |
| `rag.py` | Pipeline RAG interattiva |
| `conversione/pipeline.py` | Conversione PDF → clean Markdown strutturato |
2026-04-15 11:38:45 +02:00
---
2026-04-13 08:02:48 +02:00
2026-04-15 11:38:45 +02:00
## Regole di assistenza
2026-04-17 13:44:41 +02:00
**Modifica `EMBED_MODEL` in `config.py`: **
2026-04-15 11:38:45 +02:00
Avvisa sempre che serve rieseguire la vettorizzazione:
``` bash
2026-04-17 13:44:41 +02:00
python ingest.py --stem <stem> --force
2026-04-13 08:02:48 +02:00
```
2026-04-15 11:38:45 +02:00
`ingest.py` importa `EMBED_MODEL` direttamente da `config.py` — la coerenza è critica: se violata non produce errori ma restituisce risultati insensati.
**Modifica soglie chunking (`MIN_CHARS`, `MAX_CHARS`, `OVERLAP_S`): **
2026-04-17 13:44:41 +02:00
I valori compaiono in più file che vanno sincronizzati manualmente:
- `chunker.py`
- `verify_chunks.py`
- `fix_chunks.py`
2026-04-15 11:38:45 +02:00
2026-04-17 13:44:41 +02:00
**Conversione PDF → Markdown: **
`conversione/pipeline.py` produce `raw.md` e `clean.md` . Il `clean.md` va sempre revisionato dopo la conversione automatica — la qualità del RAG dipende da esso più di qualsiasi parametro tecnico. Suggerisci sempre `/prepare-md conversione/<stem>/clean.md` dopo la conversione.
2026-04-15 11:38:45 +02:00
2026-04-17 13:44:41 +02:00
**Verifica chunk: **
Dopo `verify_chunks.py` , usa `/step6-fix <stem>` prima di procedere con la vettorizzazione.
2026-04-15 11:38:45 +02:00
---
2026-04-13 08:02:48 +02:00
2026-04-15 11:38:45 +02:00
## Skills custom
2026-04-17 13:44:41 +02:00
- `/prepare-md <path>` — Revisione e correzione automatica di qualsiasi `clean.md` : sillabazione, artefatti, header malformati, paragrafi spezzati, gerarchia, sezioni vuote. Accetta path completo (`conversione/bitcoin/clean.md` ) o stem (`bitcoin` ).
2026-04-15 11:38:45 +02:00
- `/step6-fix <stem>` — Dry-run e applicazione fix chunk tramite `fix_chunks.py` .
---
2026-04-17 13:44:41 +02:00
## Output per stem
2026-04-15 11:38:45 +02:00
```
2026-04-17 13:44:41 +02:00
conversione/<stem>/raw.md ← immutabile
conversione/<stem>/clean.md ← copia di lavoro
conversione/<stem>/structure_profile.json
<stem>/chunks.json
<stem>/report.json
chroma_db/<stem>/ ← collection ChromaDB
2026-04-15 11:38:45 +02:00
```