Files
rag-from-scratch/step-9/README.md
T
davide d50f7f64a9 step-9: add pipeline RAG interattiva
Aggiunge rag.py (loop interattivo retrieval+generation), config.py
(tutti i parametri in un unico file), test_ollama.py (verifica
Ollama senza ChromaDB) e README.md dedicato.
Aggiunge .env.example e aggiorna .gitignore
2026-04-14 15:57:29 +02:00

2.4 KiB
Raw Blame History

Step 9 — Pipeline RAG

Loop interattivo che risponde a domande in linguaggio naturale sul documento indicato. Per ogni domanda: vettorizza la query, recupera i chunk più rilevanti da ChromaDB e genera la risposta tramite Ollama.


Prerequisiti

  • Step 8 completato (chroma_db/ popolata)
  • Ollama attivo con il modello di embedding e il modello LLM scaricati

Avvio

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

--stem è l'unico argomento CLI. Tutti gli altri parametri si configurano in config.py.


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

Loop interattivo

── 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.


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.