1a0ebafda5
fix(step-9): passa SYSTEM_PROMPT come campo system nell'API Ollama anziche concatenato nel prompt — risolve risposte di fallback errate con modelli piccoli
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: 3–10 |
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.