86 lines
2.4 KiB
Markdown
86 lines
2.4 KiB
Markdown
|
|
# 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
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
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:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
python step-9/test_ollama.py
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
Chat diretta con il modello, senza ChromaDB. Usa gli stessi parametri di `config.py`.
|