Files
rag-from-scratch/CLAUDE.md
T
davide 313fd8717e refactor: rimuove pipeline conversione PDF→MD, delegata a MinerU
Elimina conversione/ (9 stadi PyMuPDF) e tests/ (tutti unit/integration).
Il repository gestisce ora solo: pulizia MD, chunking, vettorizzazione e RAG.
Aggiorna CLAUDE.md e .gitignore per il nuovo flusso MinerU-first.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-20 14:21:16 +02:00

4.0 KiB

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/<stem>/auto/<stem>.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/<stem>/auto/<stem>.md direttamente — usare /prepare-md che lavora su una copia.

Input — struttura MinerU

MinerU produce una cartella per ogni documento. Posizionarla in sources/:

sources/<stem>/auto/<stem>.md                    ← Markdown principale (input pipeline)
sources/<stem>/auto/<stem>_content_list_v2.json  ← struttura ricca (chunk, bbox, tipo)
sources/<stem>/auto/<stem>_middle.json           ← dati intermedi di layout
sources/<stem>/auto/images/                      ← immagini estratte

<stem> = nome del documento, usato in tutti i comandi come identificatore.


Comandi

# Setup
python -m venv .venv && source .venv/bin/activate && pip install -r requirements.txt

# Chunking (legge sources/<stem>/auto/<stem>.md)
.venv/bin/python chunks/chunker.py --stem <stem>
.venv/bin/python chunks/chunker.py                    # tutti gli stem

# Vettorizzazione (richiede Ollama attivo)
.venv/bin/python ingestion/ingest.py --stem <stem>
.venv/bin/python ingestion/ingest.py --stem <stem> --force

# RAG interattivo
.venv/bin/python rag.py --stem <stem>
.venv/bin/python retrieve.py --stem <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/<stem>/chunks.json, chunks/<stem>/meta.json, chunks/<stem>/report.json

Vettorizzazione — ingestion/ingest.py

Legge chunks/<stem>/chunks.json, genera embedding via Ollama (EMBED_MODEL), indicizza in ChromaDB persistente (chroma_db/). Supporta collection multi-documento (--collection <nome> --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/<stem>/chunks.json
chunks/<stem>/meta.json
chunks/<stem>/report.json
chroma_db/<stem>/             ← collection ChromaDB

Skills custom

  • /prepare-md <path|stem> — 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.