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.
3.4 KiB
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: 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 |
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.