Intelligenza artificiale
LlamaIndex: Potenzia le tue Applicazioni LLM con Dati Personalizzati Facilmente

I grandi modelli linguistici (LLM) come la serie GPT di OpenAI sono stati addestrati su una vasta gamma di dati pubblicamente accessibili, dimostrando capacità notevoli nella generazione di testi, riassunto, risposta a domande e pianificazione. Nonostante la loro versatilità, una domanda frequentemente posta riguarda l’integrazione senza soluzione di continuità di questi modelli con dati personalizzati, privati o proprietari.
Le aziende e gli individui sono inondati di dati unici e personalizzati, spesso ospitati in varie applicazioni come Notion, Slack e Salesforce, o archiviati in file personali. Per sfruttare gli LLM per questi dati specifici, sono state proposte e sperimentate diverse metodologie.
Fine-tuning rappresenta un approccio, che consiste nell’aggiustare i pesi del modello per incorporare conoscenze da particolari set di dati. Tuttavia, questo processo non è senza sfide. Richiede uno sforzo sostanziale nella preparazione dei dati, abbinato a una procedura di ottimizzazione difficile, necessitando un certo livello di competenza in apprendimento automatico. Inoltre, le implicazioni finanziarie possono essere significative, in particolare quando si ha a che fare con grandi set di dati.
L’apprendimento in contesto è emerso come un’alternativa, dando priorità alla creazione di input e prompt per fornire all’LLM il contesto necessario per generare output precisi. Questo approccio mitiga la necessità di un lungo ritraining del modello, offrendo un mezzo più efficiente e accessibile per integrare dati privati.
Ma lo svantaggio di questo è la sua dipendenza dalle competenze e dall’esperienza dell’utente in prompt engineering. Inoltre, l’apprendimento in contesto potrebbe non essere sempre così preciso o affidabile come il fine-tuning, specialmente quando si ha a che fare con dati altamente specializzati o tecnici. La formazione pregressa del modello su un’ampia gamma di testi internet non garantisce la comprensione di specifici termini o contesti, che possono portare a output inaccurati o irrilevanti. Ciò è particolarmente problematico quando i dati privati provengono da un settore o industria di nicchia.
Inoltre, la quantità di contesto che può essere fornita in un singolo prompt è limitata, e le prestazioni dell’LLM possono deteriorarsi man mano che aumenta la complessità del compito. C’è anche la sfida della privacy e della sicurezza dei dati, poiché le informazioni fornite nel prompt potrebbero potenzialmente essere sensibili o confidenziali.
Mentre la comunità esplora queste tecniche, strumenti come LlamaIndex stanno guadagnando attenzione.
È stato avviato da Jerry Liu, un ex scienziato di ricerca di Uber. Mentre sperimentava con GPT-3 l’anno scorso, Liu ha notato i limiti del modello nel gestire dati privati, come file personali. Questa osservazione ha portato all’avvio del progetto open-source LlamaIndex.
L’iniziativa ha attirato investitori, assicurandosi 8,5 milioni di dollari in un recente round di finanziamento iniziale.
LlamaIndex facilita l’aggiornamento degli LLM con dati personalizzati, colmando il divario tra modelli pre-addestrati e casi d’uso di dati personalizzati. Attraverso LlamaIndex, gli utenti possono sfruttare i propri dati con gli LLM, sbloccando la generazione di conoscenze e il ragionamento con insight personalizzati.
Gli utenti possono fornire agli LLM i propri dati in modo semplice, creando un ambiente in cui la generazione di conoscenze e il ragionamento sono profondamente personalizzati e significativi. LlamaIndex affronta i limiti dell’apprendimento in contesto fornendo una piattaforma più user-friendly e sicura per l’interazione con i dati, garantendo che anche coloro con limitate competenze in apprendimento automatico possano sfruttare appieno il potenziale degli LLM con i propri dati privati.
Concetti di alto livello e alcune informazioni
1. Retrieval Augmented Generation (RAG):
RAG è un processo a due fasi progettato per accoppiare gli LLM con dati personalizzati, migliorando così la capacità del modello di fornire risposte più precise e informate. Il processo comprende:
- Fase di indicizzazione: questa è la fase preparatoria in cui vengono gettate le basi per la creazione della base di conoscenze.
- Fase di query: qui, la base di conoscenze viene setacciata per trovare il contesto rilevante per assistere gli LLM a rispondere alle query.
Viaggio di indicizzazione con LlamaIndex:
- Connector di dati: pensa ai connector di dati come al passaporto dei tuoi dati per LlamaIndex. Aiutano nell’importazione dei dati da varie fonti e formati, incapsulandoli in una rappresentazione ‘Document’ semplificata. I connector di dati possono essere trovati all’interno di LlamaHub, un repository open-source pieno di loader di dati. Questi loader sono progettati per una facile integrazione, consentendo un’esperienza plug-and-play con qualsiasi applicazione LlamaIndex.
- Documenti / Nodi: un Documento è come una valigia generica che può contenere diversi tipi di dati – sia esso un PDF, un output API o voci di database. D’altra parte, un Nodo è uno snippet o “pezzo” di un Documento, arricchito con metadati e relazioni con altri nodi, garantendo una solida base per il recupero preciso dei dati in seguito.
- Indici di dati: dopo l’ingestione dei dati, LlamaIndex aiuta a indicizzarli in un formato recuperabile. Sullo sfondo, divide i documenti grezzi in rappresentazioni intermedie, calcola le embedding vettoriali e deduce i metadati. Tra gli indici, ‘VectorStoreIndex’ è spesso la scelta più gettonata.
Tipi di indici in LlamaIndex: chiave per i dati organizzati
LlamaIndex offre diversi tipi di indici, ognuno per diverse esigenze e casi d’uso. Al centro di questi indici ci sono i “nodi” come discussi sopra. Cerchiamo di capire gli indici LlamaIndex con la loro meccanica e le applicazioni.
1. Indice di elenco:
- Meccanismo: un Indice di elenco allinea i nodi in modo sequenziale come un elenco. Dopo aver suddiviso i dati di input in nodi, vengono disposti in modo lineare, pronti per essere interrogati in modo sequenziale o tramite parole chiave o embedding.
- Vantaggio: questo tipo di indice brilla quando c’è bisogno di interrogazione sequenziale. LlamaIndex assicura l’utilizzo di tutti i dati di input, anche se superano il limite di token dell’LLM, interrogando intelligentemente il testo da ogni nodo e raffinando le risposte man mano che si naviga lungo l’elenco.
2. Indice di archivio vettoriale:
- Meccanismo: qui, i nodi si trasformano in embedding vettoriali, archiviati localmente o in un database vettoriale specializzato come Milvus. Quando viene interrogato, recupera i nodi più simili, canale verso il sintetizzatore di risposte.
- Vantaggio: se il tuo flusso di lavoro dipende dal confronto testuale per similarità semantica tramite ricerca vettoriale, questo indice può essere utilizzato.
3. Indice di albero:
- Meccanismo: in un Indice di albero, i dati di input si evolvono in una struttura ad albero, costruita dal basso verso l’alto dai nodi foglia (i pezzi di dati originali). I nodi genitori emergono come riassunti dei nodi foglia, creati utilizzando GPT. Durante un’interrogazione, l’indice dell’albero può attraversare dalla radice ai nodi foglia o costruire risposte direttamente dai nodi foglia selezionati.
- Vantaggio: con un Indice di albero, l’interrogazione di lunghi pezzi di testo diventa più efficiente, e l’estrazione di informazioni da vari segmenti di testo è semplificata.
4. Indice di parole chiave:
- Meccanismo: una mappa di parole chiave per nodi forma il nucleo di un Indice di parole chiave. Quando viene interrogato, le parole chiave vengono estratte dalla query, e solo i nodi mappati vengono portati alla ribalta.
- Vantaggio: quando hai query di utenti chiare, un Indice di parole chiave può essere utilizzato. Ad esempio, setacciare i documenti di sanità diventa più efficiente quando ci si concentra solo sui documenti pertinenti al COVID-19.
Installazione di LlamaIndex
L’installazione di LlamaIndex è un processo semplice. Puoi scegliere di installarlo direttamente da Pip o dal codice sorgente. (Assicurati di avere Python installato nel tuo sistema o puoi utilizzare Google Colab)
1. Installazione da Pip:
- Esegui il seguente comando:
pip install llama-index
- Nota: durante l’installazione, LlamaIndex potrebbe scaricare e archiviare file locali per alcuni pacchetti come NLTK e HuggingFace. Per specificare una directory per questi file, utilizza la variabile di ambiente “LLAMA_INDEX_CACHE_DIR”.
2. Installazione dal codice sorgente:
- Prima, clona il repository LlamaIndex da GitHub:
git clone https://github.com/jerryjliu/llama_index.git
- Una volta clonato, naviga nella directory del progetto.
- Avoirai bisogno di Poetry per gestire le dipendenze dei pacchetti.
- Ora, crea un ambiente virtuale utilizzando Poetry:
poetry shell - Infine, installa i requisiti del pacchetto principale con:
poetry install
Impostazione dell’ambiente per LlamaIndex
1. Setup OpenAI:
- Per impostazione predefinita, LlamaIndex utilizza OpenAI’s
gpt-3.5-turboper la generazione di testi etext-embedding-ada-002per il recupero e le embedding. - Per utilizzare questo setup, avrai bisogno di avere un
OPENAI_API_KEY. Ottienilo registrandoti sul sito web di OpenAI e creando un nuovo token API. - Hai la flessibilità di personalizzare il modello di linguaggio grande (LLM) in base alle tue esigenze di progetto. A seconda del tuo fornitore di LLM, potresti aver bisogno di chiavi e token di ambiente aggiuntivi.
2. Setup dell’ambiente locale:
- Se preferisci non utilizzare OpenAI, LlamaIndex passa automaticamente a modelli locali –
LlamaCPPellama2-chat-13Bper la generazione di testi, eBAAI/bge-small-enper il recupero e le embedding. - Per utilizzare
LlamaCPP, segui la guida di installazione fornita. Assicurati di installare il pacchettollama-cpp-python, idealmente compilato per supportare la tua GPU. Questo setup utilizzerà circa 11,5 GB di memoria tra CPU e GPU. - Per le embedding locali, esegui
pip install sentence-transformers. Questo setup locale utilizzerà circa 500 MB di memoria.
Con questi setup, puoi personalizzare il tuo ambiente per sfruttare il potere di OpenAI o eseguire modelli localmente, allineandoti con le tue esigenze di progetto e le tue risorse.
Un caso d’uso semplice: interrogazione di pagine web con LlamaIndex e OpenAI
Ecco uno script Python semplice per dimostrare come puoi interrogare una pagina web per informazioni specifiche:
!pip install llama-index html2text
import os
from llama_index import VectorStoreIndex, SimpleWebPageReader
# Inserisci la tua chiave OpenAI qui:
os.environ["OPENAI_API_KEY"] = "";
# URL che desideri caricare nel tuo archivio vettoriale:
url = "http://www.paulgraham.com/fr.html";
# Carica l'URL in documenti (possibili documenti multipli)
documents = SimpleWebPageReader(html_to_text=True).load_data([url])
# Crea un archivio vettoriale dai documenti
index = VectorStoreIndex.from_documents(documents)
# Crea un motore di query in modo da poter porre domande:
query_engine = index.as_query_engine()
# Poni quante domande desideri contro i dati caricati:
response = query_engine.query("Quali sono i 3 migliori consigli di Paul per raccogliere denaro?")
print(response)
I tre migliori consigli di Paul per raccogliere denaro sono: 1. Inizia con un numero basso quando raccogli denaro per la prima volta. Ciò consente flessibilità e aumenta le possibilità di raccogliere più fondi nel lungo termine. 2. Puntare a essere redditizio se possibile. Avere un piano per raggiungere la redditività senza fare affidamento su ulteriore finanziamento rende l'avvio più attraente per gli investitori. 3. Non ottimizzare per la valutazione. Sebbene la valutazione sia importante, non è il fattore più critico nella raccolta di fondi. Concentrati sull'ottenere i fondi necessari e trovare buoni investitori invece.
Con questo script, hai creato uno strumento potente per estrarre informazioni specifiche da una pagina web semplicemente ponendo una domanda. Ciò è solo un’occhiata a ciò che può essere realizzato con LlamaIndex e OpenAI quando si interroga i dati web.
LlamaIndex vs Langchain: scegliere in base al tuo obiettivo
La tua scelta tra LlamaIndex e Langchain dipenderà dall’obiettivo del tuo progetto. Se desideri sviluppare uno strumento di ricerca intelligente, LlamaIndex è una scelta solida, eccellendo come meccanismo di archiviazione intelligente per il recupero dei dati. D’altra parte, se desideri creare un sistema come ChatGPT con capacità di plugin, Langchain è la tua scelta. Non solo facilita molteplici istanze di ChatGPT e LlamaIndex, ma estende anche la funzionalità consentendo la costruzione di agenti multicompetenza. Ad esempio, con Langchain, puoi creare agenti in grado di eseguire codice Python mentre eseguono una ricerca su Google contemporaneamente. In sintesi, mentre LlamaIndex eccelle nella gestione dei dati, Langchain orchestra molti strumenti per offrire una soluzione olistica.


















