Files
rag-from-scratch/step-9
davide 1a0ebafda5 docs(step-8): aggiungi regole per parametri ottimali
fix(step-9): passa SYSTEM_PROMPT come campo system nell'API Ollama
anziche concatenato nel prompt — risolve risposte di fallback errate
con modelli piccoli
2026-04-14 19:10:43 +02:00
..
2026-04-14 15:57:29 +02:00
2026-04-14 15:57:29 +02:00

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.