Modelli e piattaforme di IA

LlamaIndex: potenziare le tue applicazioni LLM con dati personalizzati facilmente

mm
Aggiungi Unite.AI alle tue fonti preferite su Google

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 testo, riassunto, risposta a domande e pianificazione. Nonostante la loro versatilità, una domanda frequente riguarda l’integrazione senza problemi 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 (CRM ), 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 set di dati specifici. Tuttavia, questo processo non è senza sfide. Richiede un notevole sforzo nella preparazione dei dati, accompagnato da una difficile procedura di ottimizzazione, necessitando un certo livello di competenza in apprendimento automatico. Inoltre, le implicazioni finanziarie possono essere significative, in particolare quando si hanno a che fare con grandi set di dati.

L’apprendimento in contesto è emerso come un’alternativa, che dà priorità alla creazione di input e prompt per fornire all’LLM il contesto necessario per generare output precisi. Questo approccio mitigia 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 nella progettazione dei prompt. 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. L’addestramento pregresso del modello su una vasta gamma di testi internet non garantisce la comprensione di jargon specifici o contesti, il che può portare a output inaccurati o irrilevanti. Ciò è particolarmente problematico quando i dati privati provengono da un dominio di nicchia o settore.

Inoltre, la quantità di contesto che può essere fornita in un singolo prompt è limitata, e le prestazioni dell’LLM potrebbero peggiorare 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 essere potenzialmente sensibili o confidenziali.

Mentre la comunità esplora queste tecniche, strumenti come LlamaIndex stanno guadagnando attenzione.

Llama Index

Llama Index

È stato avviato da Jerry Liu, un ex scienziato ricercatore di Uber. Mentre sperimentava con GPT-3 l’anno scorso, Liu notò le limitazioni del modello nell’elaborazione dei dati privati, come i file personali. Questa osservazione portò all’avvio del progetto open-source LlamaIndex.

L’iniziativa ha attirato investitori, assicurandosi 8,5 milioni di dollari in una recente fase di finanziamento iniziale.

LlamaIndex facilita l’aggiunta di dati personalizzati agli LLM, 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 informati. LlamaIndex affronta le limitazioni 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. Generazione aumentata con recupero (RAG):

LlamaIndex RAG

LlamaIndex 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 si gettano le basi per la creazione di una base di conoscenze.
LlamaIndex INDEXES

LlamaIndex Indexing

  • Fase di query: qui, la base di conoscenze viene scansionata per trovare contesto rilevante per assistere gli LLM nella risposta alle query.
LlamaIndex QUERY STAGE

LlamaIndex Query Stage

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 di ‘Documento’ 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.
Llama hub

LlamaIndex hub (https://llamahub.ai/)

  • 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 è un pezzo o “chunk” di un Documento, arricchito con metadati e relazioni con altri nodi, garantendo una solida base per il recupero dei dati in seguito.
  • Indici di dati: dopo l’ingestione dei dati, LlamaIndex aiuta nell’indicizzazione di questi dati in un formato recuperabile. Sullo sfondo, disarticola i documenti grezzi in rappresentazioni intermedie, calcola le embedding di vettori e deduce i metadati. Tra gli indici, ‘VectorStoreIndex’ è spesso la scelta più gettonata.

Tipi di indici in LlamaIndex: chiave per dati organizzati

LlamaIndex offre diversi tipi di indici, ciascuno per diverse esigenze e casi d’uso. Al cuore di questi indici ci sono i “nodi” come discussi sopra. Cerchiamo di capire gli indici LlamaIndex con la loro meccanica e applicazioni.

1. Indice di elenco:

  • Meccanismo: un Indice di elenco allinea i nodi in sequenza come un elenco. Dopo aver suddiviso i dati di input in nodi, vengono disposti in modo lineare, pronti per essere interrogati sia in sequenza che tramite parole chiave o embedding.
  • Vantaggio: questo tipo di indice eccelle 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 scende lungo l’elenco.

2. Indice di archivio vettoriale:

  • Meccanismo: qui, i nodi si trasformano in embedding di vettori, archiviati localmente o in un database di vettori specializzato come Milvus. Quando viene eseguita una query, recupera i nodi più simili nella parte superiore, canalizzandoli verso il sintetizzatore di risposte.
  • Vantaggio: se il tuo flusso di lavoro dipende dal confronto di testi per similarità semantica tramite ricerca vettoriale, questo indice può essere utilizzato.

3. Indice albero:

  • Meccanismo: in un Indice albero, i dati di input evolvono in una struttura ad albero, costruita dal basso verso l’alto a partire dai nodi foglia (i chunk originali di dati). I nodi genitori emergono come riassunti dei nodi foglia, creati utilizzando GPT. Durante una query, l’indice albero può attraversare dalla radice ai nodi foglia o costruire risposte direttamente dai nodi foglia selezionati.
  • Vantaggio: con un Indice albero, l’interrogazione di lunghi chunk di testo diventa più efficiente, e l’estrazione di informazioni da vari segmenti di testo è semplificata.

4. Indice di parole chiave:

  • Meccanismo: un Indice di parole chiave si basa su una mappa di parole chiave ai nodi. Quando viene eseguita una query, le parole chiave vengono estratte dalla query, e solo i nodi mappati vengono portati in primo piano.
  • Vantaggio: quando hai query utente chiare, un Indice di parole chiave può essere utilizzato. Ad esempio, setacciare attraverso documenti di salute diventa più efficiente quando ci si concentra solo sui documenti pertinenti a 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 d’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.
  • Avoirà bisogno di Poetry per la gestione delle dipendenze dei pacchetti.
  • Ora, crea un ambiente virtuale utilizzando Poetry:
    poetry shell
  • Infine, installa i requisiti del pacchetto principale con:
    poetry install

Configurazione dell’ambiente per LlamaIndex

1. Configurazione di OpenAI:

  • Per default, LlamaIndex utilizza OpenAI’s gpt-3.5-turbo per la generazione di testo e text-embedding-ada-002 per il recupero e gli embedding.
  • Per utilizzare questa configurazione, avrai bisogno di 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) sottostante 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. Configurazione dell’ambiente locale:

  • Se preferisci non utilizzare OpenAI, LlamaIndex passa automaticamente ai modelli locali – LlamaCPP e llama2-chat-13B per la generazione di testo, e BAAI/bge-small-en per il recupero e gli embedding.
  • Per utilizzare LlamaCPP, segui la guida di installazione fornita. Assicurati di installare il pacchetto llama-cpp-python, idealmente compilato per supportare la tua GPU. Questa configurazione utilizzerà circa 11,5 GB di memoria tra CPU e GPU.
  • Per gli embedding locali, esegui pip install sentence-transformers. Questa configurazione locale utilizzerà circa 500 MB di memoria.

Con queste configurazioni, puoi adattare il tuo ambiente per sfruttare il potere di OpenAI o eseguire modelli localmente, allineandoti con le tue esigenze di progetto e 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 ottenere informazioni specifiche:

!pip install llama-index html2text


<p>import os
from llama_index import VectorStoreIndex, SimpleWebPageReader</p>

<p># Inserisci la tua chiave API di OpenAI qui:
os.environ["OPENAI_API_KEY"] = ""</p>

<p># URL che desideri caricare nel tuo archivio vettoriale:
url = "http://www.paulgraham.com/fr.html"</p>

<p># Carica l'URL in documenti (possibili documenti multipli)
documents = SimpleWebPageReader(html_to_text=True).load_data([url])</p>

<p># Crea un archivio vettoriale dai documenti
index = VectorStoreIndex.from_documents(documents)</p>

<p># Crea un motore di query in modo da poter porre domande:
query_engine = index.as_query_engine()</p>

<p># 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 inizialmente. Ciò consente flessibilità e aumenta le possibilità di raccogliere più fondi nel lungo termine.
2. Punta 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 nel fundraising. Concentrati sull'ottenere i fondi necessari e trovare buoni investitori invece.
Google Colab Llama Index Notebook

Google Colab Llama Index Notebook

Con questo script, hai creato uno strumento potente per estrarre informazioni specifiche da una pagina web semplicemente ponendo una domanda. Questo è solo un esempio di ciò che può essere realizzato con LlamaIndex e OpenAI quando si interroga un dato 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 più istanze di ChatGPT e LlamaIndex, ma estende anche la funzionalità consentendo la costruzione di agenti multi-task. 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 più strumenti per offrire una soluzione olistica.

LlamaIndex Logo Artwork created using Midjourney

LlamaIndex Logo Artwork created using Midjourney

Ho trascorso gli ultimi cinque anni immergendomi nel mondo affascinante del Machine Learning e del Deep Learning. La mia passione e la mia esperienza mi hanno portato a contribuire a oltre 50 progetti di ingegneria del software diversi, con un focus particolare su AI/ML. La mia curiosità in corso mi ha anche portato verso l'elaborazione del linguaggio naturale, un campo che sono ansioso di esplorare ulteriormente.