Ancorare la nostra chat ai risultati di Towards Data Science
Questa è la terza puntata di una serie. I primi due post introducono un’implementazione di base solo con database vettoriale di un chatbot usando Milvus e un’implementazione del chatbot con LlamaIndex. Continuiamo a usare LlamaIndex in questa edizione, ma aggiungeremo qualcosa per “ancorare” i nostri risultati. TruEra ha un ottimo commento sulla groundedness e una breve descrizione in uno dei loro blog sulla valutazione RAG.
In questo articolo, vedremo come ancorare i nostri risultati RAG per Towards Data Science tramite LlamaIndex in tre sezioni:
Configurazione per ancorare i nostri risultati RAG
Definizione dei parametri del nostro chatbot Towards Data Science
Ancorare i nostri risultati tramite citazioni
Configurazione per ancorare i nostri risultati RAG
Come per qualsiasi app, il primo passo è configurare i prerequisiti. Per questo esempio, iniziamo installando quattro librerie diverse. Abbiamo bisogno di llama-index, python-dotenv, pymilvus e openai. Queste quattro librerie ci aiutano rispettivamente a orchestrare il nostro LLM con il recupero, gestire le variabili d’ambiente, lavorare con un database vettoriale e lavorare con OpenAI.
! pip install llama-index python-dotenv openai pymilvus
Il blocco di codice successivo configura OpenAI e Zilliz (il database vettoriale Milvus gestito). Usiamo la funzione load_dotenv per recuperare le nostre variabili d’ambiente, in genere memorizzate nel file '.env'. Poi, passiamo i nomi delle variabili necessarie usando os per ottenere i valori. OpenAI è il nostro LLM e Zilliz è il nostro database vettoriale. In questo esempio, usiamo Zilliz e una collection memorizzata nel cloud per mantenere i nostri dati tra più versioni dell’app.
import os
from dotenv import load_dotenv
import openai
load_dotenv()
openai.api_key = os.getenv("OPENAI_API_KEY")
zilliz_uri = os.getenv("ZILLIZ_URI")
zilliz_token = os.getenv("ZILLIZ_TOKEN")
Definizione dei parametri per il nostro chatbot Towards Data Science
Successivamente, definiamo i parametri del nostro chatbot RAG. Dobbiamo configurare tre elementi: il modello di embedding, il database vettoriale Milvus e le astrazioni di passaggio dati di LlamaIndex. Per prima cosa, configuriamo il nostro modello di embedding. Per questo esempio, usiamo il modello di embedding che abbiamo utilizzato nel mio blog precedente per eseguire lo scraping e incorporare i dati, ovvero il modello HuggingFace MiniLM L12. Possiamo caricare questi dati tramite LlamaIndex usando il modulo HuggingFaceEmbedding.
from llama_index.embeddings import HuggingFaceEmbedding
embed_model = HuggingFaceEmbedding(model_name="sentence-transformers/all-MiniLM-L12-v2")
In secondo luogo, configuriamo il database vettoriale. Poiché Zilliz Cloud è una versione completamente gestita e ottimizzata di Milvus, possiamo collegarlo usando il modulo MilvusVectorStore. Forniamo URI, token, nome della collection, metrica di similarità e chiave di testo per connetterci alla nostra istanza Milvus ospitata in Zilliz Cloud.
Abbiamo ottenuto il nostro URI e i token Zilliz in precedenza dalle nostre variabili d’ambiente. Il nome della collection, la metrica di similarità e la chiave di testo sono ereditati dalla prima parte di questa serie di blog, dove abbiamo creato la collection durante l’ingestione.
from llama_index.vector_stores import MilvusVectorStore
vdb = MilvusVectorStore(
uri = zilliz_uri,
token = zilliz_token,
collection_name = "tds_articles",
similarity_metric = "L2",
text_key="paragraph"
)
Infine, mettiamo insieme le nostre astrazioni dei dati di LlamaIndex. I due elementi nativi di cui abbiamo bisogno sono il service context, che passa alcuni servizi predefiniti, e il vector store index, che crea un “index” LlamaIndex da un vector store. In questo caso usiamo il service context per passare il nostro modello di embedding. Poi passiamo il database vettoriale Milvus esistente e il service context creato per creare il nostro indice vettoriale.
from llama_index import VectorStoreIndex, ServiceContext
service_context = ServiceContext.from_defaults(embed_model=embed_model)
vector_index = VectorStoreIndex.from_vector_store(vector_store=vdb, service_context=service_context)
Ancorare i nostri risultati tramite citazioni in LlamaIndex
Citazioni e attribuzioni sono un’aggiunta importante al tuo RAG. Ti permettono di sapere da dove provengono le risposte nel tuo corpus di documenti e di valutare quanto siano ancorati i risultati del tuo RAG.
LlamaIndex offre un modo semplice per implementare le citazioni tramite il loro modulo CitationQueryEngine. È facilissimo iniziare con questo modulo. Usando from_args e passando l’indice vettoriale, possiamo istanziare un motore di query con citazioni. Abbiamo definito il campo di testo nell’indice vettoriale in precedenza, quindi non dobbiamo aggiungere nulla.
from llama_index.query_engine import CitationQueryEngine
query_engine = CitationQueryEngine.from_args(
vector_index
)
Una volta che abbiamo un motore di query, dobbiamo solo inviare una query. Per questo esempio, ho chiesto: “What is a large language model?” Questa è una risposta che ci aspettiamo di poter ottenere da Towards Data Science. Ho anche aggiunto pprint per stampare l’output in modo leggibile.
res = query_engine.query("What is a large language model?")
from pprint import pprint
pprint(res)
L’immagine qui sotto mostra un esempio di come apparirebbe una risposta. Contiene la risposta e cita le sue fonti nel testo. Ci permette di sapere che la risposta è ancorata e da dove proviene.
Riepilogo dell’ancoraggio dei risultati RAG tramite citazioni e attribuzioni
Questo tutorial è il terzo di una serie incentrata sulla creazione di un chatbot tramite RAG. Usiamo gli stessi dati di Towards Data Science per tutti questi tutorial. Questo tutorial usa citazioni e attribuzioni per garantire che i tuoi risultati siano ancorati.
Citazioni e attribuzioni risolvono due problemi che il RAG tradizionalmente presenta. Primo, ci permettono di sapere da dove stiamo estraendo i dati. Secondo, ci permettono di vedere quanto siano “vere” le risposte secondo i dati. Questo concetto è anche chiamato “groundedness.”
Abbiamo usato LlamaIndex e Zilliz Cloud per costruire questo tutorial RAG. LlamaIndex ci consente di avviare facilmente un motore che estrarrà le citazioni, purché esistano nel vector store. Zilliz Cloud ci permette di rendere persistenti i dati facilmente tra più progetti.
Per rileggere l’intera serie Chat Towards Data Science, ecco i link:
Continua a leggere

The Real Bottlenecks in Autonomous Driving — And How AI Infrastructure Can Solve Them
Autonomous driving faces a data bottleneck. Learn how AI-native vector databases like Zilliz solve scale, cost, and insight challenges across AV pipelines.

Zilliz Cloud Enterprise Vector Search Powers High-Performance AI on AWS
Zilliz Cloud on AWS powers secure, scalable, ultra-fast vector search for enterprise AI apps, with BYOC, sub-10ms latency, and zero-DevOps simplicity.

What is the K-Nearest Neighbors (KNN) Algorithm in Machine Learning?
KNN is a supervised machine learning technique and algorithm for classification and regression. This post is the ultimate guide to KNN.



