# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. --- ## Lingua e comportamento - **Lingua:** Rispondi sempre in italiano. - **Prima di eseguire qualsiasi istruzione**, esponi: 1. Come intendi procedere (approccio, file coinvolti). 2. Se l'istruzione ha problemi concettuali — e perché — con una proposta alternativa. 3. Aspetta conferma o correzione prima di toccare il codice, salvo che l'istruzione sia banale (rinomina, formattazione). --- ## Missione Pipeline RAG su documenti accademici. La conversione PDF → Markdown è delegata a **MinerU** (tool esterno). Questo repository si occupa solo di: pulizia Markdown, chunking, vettorizzazione e retrieval/generazione. ``` MinerU (esterno) → sources//auto/.md ↓ /prepare-md (pulizia) ↓ chunker.py (chunking adattivo) ↓ ingest.py (embedding → ChromaDB) ↓ rag.py / retrieve.py ``` --- ## Regole invarianti - **Venv:** Usa `.venv/bin/python`. Mai `pip`/`python` di sistema. - **Niente LLM nella pipeline:** chunking e pulizia devono essere rule-based e riproducibili. - **Input immutabile:** Non modificare mai `sources//auto/.md` direttamente — usare `/prepare-md` che lavora su una copia. --- ## Input — struttura MinerU MinerU produce una cartella per ogni documento. Posizionarla in `sources/`: ``` sources//auto/.md ← Markdown principale (input pipeline) sources//auto/_content_list_v2.json ← struttura ricca (chunk, bbox, tipo) sources//auto/_middle.json ← dati intermedi di layout sources//auto/images/ ← immagini estratte ``` `` = nome del documento, usato in tutti i comandi come identificatore. --- ## Comandi ```bash # Setup python -m venv .venv && source .venv/bin/activate && pip install -r requirements.txt # Chunking (legge sources//auto/.md) .venv/bin/python chunks/chunker.py --stem .venv/bin/python chunks/chunker.py # tutti gli stem # Vettorizzazione (richiede Ollama attivo) .venv/bin/python ingestion/ingest.py --stem .venv/bin/python ingestion/ingest.py --stem --force # RAG interattivo .venv/bin/python rag.py --stem .venv/bin/python retrieve.py --stem # retrieval puro, senza LLM ``` --- ## Architettura ### Chunking — `chunks/` | File | Responsabilità | |------|---------------| | `chunker.py` | Chunking adattivo del Markdown; legge `structure_profile.json` per scegliere la strategia | | `config.py` | Parametri: `TARGET_CHARS`, `OVERLAP_SENTENCES`, `CHUNK_TOLERANCE`, `STRATEGY_OVERRIDES` | | `verify_chunks.py` | Verifica qualità chunk (copertura, lunghezze, overlap) | | `fix_chunks.py` | Correzioni post-chunking | Output: `chunks//chunks.json`, `chunks//meta.json`, `chunks//report.json` ### Vettorizzazione — `ingestion/ingest.py` Legge `chunks//chunks.json`, genera embedding via Ollama (`EMBED_MODEL`), indicizza in ChromaDB persistente (`chroma_db/`). Supporta collection multi-documento (`--collection --stems doc1 doc2`). ### RAG — file radice | File | Responsabilità | |------|---------------| | `rag.py` | Loop interattivo: retrieval + generazione Ollama | | `retrieve.py` | Retrieval puro (debug senza LLM) | | `config.py` | `TOP_K`, `TEMPERATURE`, `OLLAMA_MODEL`, `EMBED_MODEL`, `SYSTEM_PROMPT`, `OLLAMA_URL` | ### Output per stem ``` chunks//chunks.json chunks//meta.json chunks//report.json chroma_db// ← collection ChromaDB ``` --- ## Skills custom - `/prepare-md ` — corregge il Markdown MinerU: sillabazione, artefatti, header malformati, gerarchia incoerente. Opera su una copia, non sull'originale. - `/post-chunk` — verifica e perfeziona i chunk prima della vettorizzazione.