Sistema completo per Retrieval-Augmented Generation (RAG) che permette di interrogare il paper accademico TurboQuant usando modelli LLM locali tramite Ollama.
Questo sistema ti permette di:
- Indicizzare il paper TurboQuant (o qualsiasi PDF)
- Fare domande in linguaggio naturale sul contenuto
- Ottenere risposte basate sul contesto del documento
- Chat interattiva per esplorazione approfondita
TurboQuant Γ¨ un metodo di quantizzazione vettoriale che comprime vettori ad alta dimensionalitΓ minimizzando la distorsione, con applicazioni in:
- Quantizzazione KV cache in Large Language Models
- Nearest neighbor search efficiente
- Compressione di embeddings
- Python 3.8+
- Ollama installato e in esecuzione
cd turboquant_ollama_system
chmod +x install.sh
./install.sh# 1. Crea ambiente virtuale
python3 -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# 2. Installa dipendenze
pip install -r requirements.txt
# 3. Scarica modelli Ollama
ollama pull nomic-embed-text
ollama pull llama3.2python main.py index /mnt/okcomputer/upload/2504.19874v1.pdfOpzioni avanzate:
python main.py index paper.pdf \
--chunk-size 1000 \
--chunk-overlap 200 \
--embedding-model mxbai-embed-largepython main.py query "Cos'Γ¨ TurboQuant?"Con opzioni:
python main.py query "Quali sono i vantaggi rispetto alla Product Quantization?" \
--top-k 5 \
--temperature 0.3 \
--llm-model mistralpython main.py chatEsempio di sessione:
β Domanda: Spiega l'Algorithm 1
π‘ Risposta (llama3.2, 3.45s):
L'Algorithm 1 descrive TurboQuant ottimizzato per MSE...
π Fonti:
1. Pagina 10 (Methods) - Score: 0.892
2. Pagina 11 (Methods) - Score: 0.845
python main.py infoβββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β USER QUERY β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β EMBEDDING βββββΆβ FAISS βββββΆβ RETRIEVAL β β
β β (Ollama) β β VECTOR DB β β (Top-K) β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β
βΌ
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
β β CONTEXT βββββΆβ LLM βββββΆβ RESPONSE β β
β β BUILDER β β (Ollama) β β (RAG) β β
β ββββββββββββββββ ββββββββββββββββ ββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
turboquant_ollama_system/
βββ main.py # CLI principale
βββ pdf_extractor.py # Estrazione testo da PDF
βββ embeddings.py # Gestione embeddings
βββ vector_store.py # Vector database (FAISS)
βββ rag_engine.py # Motore RAG
βββ requirements.txt # Dipendenze
βββ install.sh # Script installazione
βββ setup.py # Setup package
βββ data/ # Dati (creato automaticamente)
βββ vector_store/ # Indice FAISS (creato automaticamente)
βββ cache/ # Cache embeddings (creato automaticamente)
Embeddings (Ollama):
nomic-embed-text(default, 768 dim)mxbai-embed-large(1024 dim, migliore qualitΓ )snowflake-arctic-embed(1024 dim)
LLM (Ollama):
llama3.2(default, 3B params, veloce)mistral(7B params, migliore ragionamento)llama3.1(8B params)phi3(Microsoft, 3.8B params)
| Parametro | Default | Descrizione |
|---|---|---|
chunk_size |
800 | Caratteri per chunk |
chunk_overlap |
150 | Sovrapposizione tra chunk |
top_k |
5 | Numero di fonti recuperate |
temperature |
0.3 | CreativitΓ LLM (0-1) |
from rag_engine import OllamaRAG
# Inizializza
rag = OllamaRAG(
embedding_backend="ollama",
embedding_model="nomic-embed-text",
llm_model="llama3.2"
)
# Indicizza
rag.index_document("paper.pdf", chunk_size=800)
# Query
response = rag.query(
"Quali sono i teoremi principali?",
k=5,
temperature=0.3
)
print(response.answer)
print(f"Fonti: {len(response.sources)}")Su NVIDIA A100 con llama3.2:
- Indicizzazione: ~2 minuti per 15 pagine
- Query: ~2-4 secondi (incluso retrieval + generation)
- Memoria: ~500MB RAM per indice
# Verifica che Ollama sia in esecuzione
curl http://localhost:11434/api/tags
# Avvia Ollama
ollama serve# Scarica il modello
ollama pull nomic-embed-text
ollama pull llama3.2# Usa modelli piΓΉ piccoli
python main.py query "..." --llm-model phi3# Concetti base
python main.py query "Cos'Γ¨ la quantizzazione vettoriale?"
# Algoritmi
python main.py query "Spiega l'Algorithm 2 step by step"
# Teoremi
python main.py query "Enuncia il Theorem 1 e spiega la dimostrazione"
# Confronti
python main.py query "Confronta TurboQuant con Product Quantization"
# Applicazioni
python main.py query "Come si applica TurboQuant alla KV cache?"
# Metriche
python main.py query "Quali sono i bound di distorsione per MSE?"- Fork del repository
- Crea un branch (
git checkout -b feature/xyz) - Commit (
git commit -am 'Add feature') - Push (
git push origin feature/xyz) - Apri una Pull Request
MIT License - Vedi LICENSE per dettagli.
- Paper: TurboQuant: Online Vector Quantization
- Ollama: ollama.com
- FAISS: facebookresearch/faiss
Creato con β€οΈ per la ricerca e l'apprendimento