Files
davide 70924a575a feat(step-9): aggiungi retrieve.py per retrieval puro senza LLM
Nuovo script interattivo che vettorizza la query e restituisce i chunk
più simili da ChromaDB senza chiamare Ollama per la generation.
Utile per debug del retrieval e verifica della qualità dei chunk.
Aggiornato README con rag.py e retrieve.py come opzioni alla pari.
2026-04-15 14:25:44 +02:00

3.4 KiB
Raw Permalink Blame History

Step 9 — Interrogazione del documento

Due modalità di interrogazione, entrambe con loop interattivo:

Script Modalità Quando usarlo
rag.py Retrieval + generazione LLM Risposta in linguaggio naturale
retrieve.py Solo retrieval (no LLM) Debug, verifica chunk, ricerca semantica

Prerequisiti

  • Step 8 completato (chroma_db/ popolata)
  • Ollama attivo con il modello di embedding scaricato
  • Per rag.py: anche il modello LLM scaricato

rag.py — Risposta in linguaggio naturale

source .venv/bin/activate
python step-9/rag.py --stem <nome>

Per ogni domanda: vettorizza la query, recupera i chunk più rilevanti da ChromaDB e genera la risposta tramite Ollama.

── Loop RAG ─────────────────────────────────────── (exit per uscire)

Domanda:
Sintassi Comportamento
<testo> Risposta basata sul documento
<testo> -v Risposta + chunk recuperati con score di similarità
exit Esce dal programma

Flusso interno:

domanda
    │
    ▼  embed (EMBED_MODEL, Ollama)
vettore N-dim
    │
    ▼  query ChromaDB — similarità coseno, top-K
chunk rilevanti
    │
    ▼  build_prompt (SYSTEM_PROMPT + contesti + domanda)
    │
    ▼  generate (OLLAMA_MODEL, Ollama)
risposta

Il LLM risponde esclusivamente dal contesto fornito. Se il contesto è irrilevante rispetto alla domanda, lo dichiara esplicitamente.


retrieve.py — Retrieval puro (senza LLM)

source .venv/bin/activate
python step-9/retrieve.py --stem <nome>

Vettorizza la query e restituisce i chunk più simili con score di similarità — senza chiamare Ollama per la generation. Utile per verificare la qualità del retrieval e diagnosticare risposte sbagliate.

── Loop retrieval ──────────────────────── (exit per uscire, -f per testo completo)

Query:
Sintassi Comportamento
<testo> Chunk più simili con score di similarità (testo troncato a 200 car.)
<testo> -f Chunk più simili con testo completo
exit Esce dal programma

Accetta --top-k N per sovrascrivere il valore di config.py per quella sessione.


Configurazione (config.py)

Parametro Default Descrizione
TOP_K 6 Chunk recuperati per ogni domanda. Valori consigliati: 310
TEMPERATURE 0.0 Deterministico a 0.0, creativo verso 1.0. Per RAG consigliato 0.0
NO_THINK True Disabilita il chain-of-thought interno dei modelli Qwen3/Qwen3.5. True = risposta diretta, più veloce
EMBED_MODEL "nomic-embed-text" Deve corrispondere al modello usato in step-8. Se cambiato, rieseguire step-8 con --force
OLLAMA_URL "http://localhost:11434" Modifica solo se Ollama gira su porta o host diversi
OLLAMA_MODEL "qwen3.5:0.8b" Modello LLM. Vedi step-7/README.md per la scelta
SYSTEM_PROMPT (vedi file) Istruzioni di comportamento inviate al LLM. Modifica per cambiare tono, lingua o condizione di fallback

Test senza RAG

Per verificare che Ollama risponda correttamente prima di interrogare il documento:

python step-9/test_ollama.py

Chat diretta con il modello, senza ChromaDB. Usa gli stessi parametri di config.py.