diff --git a/CLAUDE.md b/CLAUDE.md index 698d0e4..fc0e27b 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -3,77 +3,44 @@ ## Regole invarianti - **Lingua:** Rispondi sempre in italiano. -- **Venv obbligatorio:** Usa `.venv/bin/python` o attiva con `source .venv/bin/activate`. Mai `pip`/`python` di sistema. -- **Non modificare `raw.md`:** Il file `raw.md` di ogni stem è immutabile. La copia di lavoro è sempre `clean.md`. +- **Venv:** Usa `.venv/bin/python` o `source .venv/bin/activate`. Mai `pip`/`python` di sistema. +- **`raw.md` immutabile:** La copia di lavoro è sempre `clean.md`. --- -## Pipeline (operazioni in ordine) +## Pipeline ``` -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) +PDF → conversione → chunking → verifica → vettorizzazione → retrieval ``` -Il parametro `--stem` identifica il documento (nome PDF senza `.pdf`). Lo stem è anche il nome della collection ChromaDB. +`--stem` = nome PDF senza estensione = nome collection ChromaDB. + +Per i path degli script e degli output usa `git ls-files` o esplora la root: la struttura è in evoluzione verso un programma unico. --- -## File critici +## Configurazione -| File | Ruolo | -|---|---| -| `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 | +`config.py` è la fonte di verità: `EMBED_MODEL`, `OLLAMA_MODEL`, `TOP_K`, `TEMPERATURE`, `SYSTEM_PROMPT`. + +**Se cambi `EMBED_MODEL`:** riesegui ingest con `--force` — embedding incoerenti non producono errori ma risposte insensate. + +**Se cambi `MIN_CHARS` / `MAX_CHARS`:** cerca tutte le occorrenze nel repo e sincronizza. --- -## Regole di assistenza +## Workflow consigliato -**Modifica `EMBED_MODEL` in `config.py`:** -Avvisa sempre che serve rieseguire la vettorizzazione: -```bash -python ingest.py --stem --force -``` -`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`):** -I valori compaiono in più file che vanno sincronizzati manualmente: -- `chunker.py` -- `verify_chunks.py` -- `fix_chunks.py` - -**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//clean.md` dopo la conversione. - -**Verifica chunk:** -Dopo `verify_chunks.py`, usa `/step6-fix ` prima di procedere con la vettorizzazione. +1. Converti il PDF con lo script di conversione +2. `/prepare-md conversione//clean.md` +3. Chunking +4. Vettorizza con `--stem ` +6. `python rag.py --stem ` --- ## Skills custom -- `/prepare-md ` — 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`). -- `/step6-fix ` — Dry-run e applicazione fix chunk tramite `fix_chunks.py`. - ---- - -## Output per stem - -``` -conversione//raw.md ← immutabile -conversione//clean.md ← copia di lavoro -conversione//structure_profile.json -/chunks.json -/report.json -chroma_db// ← collection ChromaDB -``` +- `/prepare-md ` — corregge `clean.md`: sillabazione, artefatti, header, paragrafi spezzati, gerarchia. +- `/step6-fix ` — verifica chunk, dry-run e applicazione fix via `fix_chunks.py`.