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