Che cos'è LlamaIndex?

21 agosto 2024

Autori

Vanna Winland

AI Advocate & Technology Writer

Erika Russi

Data Scientist, IBM

LlamaIndex è un framework di orchestrazione dei dati open source per la creazione di applicazioni basate su modelli linguistici di grandi dimensioni (LLM). LlamaIndex è disponibile in Python e TypeScript e impiega una combinazione di strumenti e funzionalità che semplificano il processo di context augmentation per i casi d'uso dell'AI generativa (gen AI) attraverso una pipeline RAG (Retrieval-Augmented) .

Design 3D di palline che rotolano su una pista

Le ultime notizie e insight sull'AI 


Scopri notizie e insight selezionati da esperti in materia di AI, cloud e molto altro nella newsletter settimanale Think. 

Come funziona LlamaIndex?

LlamaIndex consente agli utenti di gestire e organizzare i propri dati privati o personalizzati attraverso l'integrazione dei dati e la context augmentation.

Context augmentation

La context augmentation avviene quando vengono forniti dati alla finestra di contesto di un LLM, sostanzialmente arricchendo gli LLM con dati privati o esterni.

Gli LLM open source ampiamente utilizzati sono pre-addestrati su grandi quantità di dati pubblici. Questi LLM su larga scala aiutano a risolvere molti problemi reali. Tuttavia, l'addestramento per un caso d'uso specifico richiede una notevole quantità di tempo e risorse. Inoltre, i dati interni di un modello sono aggiornati solo per il periodo del pre-addestramento. A seconda del modello, la context augmentation è necessaria per far sì che i modelli riflettano la conoscenza in tempo reale degli eventi attuali.

I foundation model stanno guadagnando popolarità in quanto sono modelli AI flessibili e riutilizzabili che possono essere applicati a quasi tutti i domini o le attività. I foundation model simili alla serie IBM® Granite vengono addestrati su dati selezionati. Tuttavia, sia che il modello venga addestrato su un set di dati di grandi dimensioni o su un foundation model pre-addestrato, sarà probabilmente necessario addestrarlo su fonti esterne di dati specifici del dominio. Questo processo è facilitato da un framework di sistema che collega l'LLM ai dati privati per adattarlo al caso d'uso o all'obiettivo generale dell'applicazione. La parte dello stack di applicazioni che facilita la connessione degli LLM alle fonti di dati personalizzate è costituita da framework di dati come LlamaIndex.

Integrazione dei dati

I dati provengono da molte fonti in molti formati; spetta al framework dei dati acquisire, trasformare e organizzare i dati da utilizzare per gli LLM. Spesso i dati sono isolati e non strutturati. Per ottenerli e strutturarli, un framework di dati come LlamaIndex deve farli passare attraverso un processo comunemente chiamato ingestion pipeline.

Una volta che i dati sono stati acquisiti e trasformati in un formato che l'LLM può utilizzare, il passaggio successivo è convertire le informazioni in una struttura di dati per l'indicizzazione. La procedura comune è la conversione dei dati non strutturati in incorporamenti vettoriali. Questo processo è chiamato "creazione di un incorporamento" nell'elaborazione del linguaggio naturale (NLP) ma viene definito "indicizzazione" nella terminologia dei dati.1 L'indicizzazione è necessaria perché consente all'LLM di interrogare e recuperare i dati acquisiti tramite l'indice vettoriale. I dati possono essere indicizzati in base alla strategia di query scelta.

L'integrazione dei dati facilita la context augmentation, integrando i dati privati nella finestra di contesto o "base di conoscenza" dell'LLM. La lunghezza della finestra di contesto dei modelli Granite 3B e 8B di IBM è stata recentemente estesa a 128.000 token.2 Una finestra di contesto più ampia consente al modello di conservare una maggiore quantità di testo nella memoria di lavoro, migliorando la sua capacità di tenere traccia dei dettagli chiave durante conversazioni estese, analisi di testi lunghi e utilizzo di grandi basi di codice. Questa funzionalità consente ai chatbot LLM di produrre risposte coerenti sia nel breve termine che in un contesto più esteso.

Tuttavia, anche con una finestra di contesto ampia, un modello ottimizzato potrebbe comportare costi considerevoli sia per l'addestramento che per l'inferenza. L'ottimizzazione dei modelli con dati specifici o privati richiede trasformazioni dei dati e sistemi che promuovano metodi di recupero dati efficienti per il prompting LLM. La metodologia RAG è considerata un'opzione promettente per facilitare la modellazione linguistica con contesto ampio.3

Retrieval Augmented Generation (RAG)

La RAG è uno dei metodi più conosciuti e utilizzati per la context augmentation. La RAG consente agli LLM di utilizzare una base di conoscenza specializzata, migliorando la capacità degli LLM di fornire risposte più precise alle domande.4 Il tipico processo di retrieval augmentation avviene in tre fasi:

  1. Chunking: l'input a sequenza lunga viene suddiviso in frammenti.
  2. Incorporamento: ogni frammento è codificato in un incorporamento che può essere elaborato dall'LLM.
  3. Recupero: i frammenti incorporati più utili vengono recuperati in base alla query.

I framework di dati come LlamaIndex semplificano il processo di data ingestion e recupero dei dati fornendo chiamate API complete per ogni fase del modello RAG. Questo processo è basato sul concetto di un motore di query che consente agli utenti di porre domande sui propri dati. L'interrogazione di dati esterni e la richiesta di conoscenze contestuali agli LLM rendono possibile la creazione di applicazioni LLM specifiche per un dominio.

AI Academy

Ecco perché i foundation model rappresentano un cambio di paradigma per l'AI

Scopri una nuova classe di modelli AI flessibili e riutilizzabili che possono sbloccare nuove entrate, ridurre i costi e aumentare la produttività, consulta quindi la nostra guida per approfondire.

Workflow dei dati di LlamaIndex

LlamaIndex utilizza la RAG per aggiungere e collegare dati esterni al datapool a cui gli LLM hanno già accesso. Le applicazioni tra cui motori di query, chatbot e agenti utilizzano tecniche RAG per completare le attività.5

Il workflow di LlamaIndex può essere suddiviso in alcuni passaggi:

  1. Data ingestion (caricamento)
  2. Indicizzazione e memorizzazione
  3. Esecuzione di query

L'obiettivo di questo workflow è aiutare ad acquisire, strutturare e consentire agli LLM di accedere a dati privati o specifici del dominio. L'accesso a dati più pertinenti consente agli LLM di rispondere in modo più accurato ai prompt, che si tratti di creare chatbot o motori di query.

Data ingestion (caricamento)

La data ingestion o "caricamento" dei dati è il primo passo per collegare fonti di dati esterne a un LLM. Per LlamaIndex, la data ingestion consiste nel caricare i dati affinché l'applicazione possa utilizzarli. La maggior parte dei dati privati o personalizzati è spesso archiviata in formati quali application programming interface (API), PDF, immagini, database SQL (Structured Query Language) e molti altri. LlamaIndex può caricare oltre 160 diversi formati di dati, inclusi set di dati strutturati, semistrutturati e non strutturati.

I connettori di dati, noti anche come "loader" di dati, recuperano e acquisiscono i dati dalla loro fonte di origine. I dati raccolti vengono trasformati in una raccolta di dati e metadati. Queste raccolte sono chiamate "Documenti" in LlamaIndex. I connettori di dati, o "reader" in LlamaIndex, acquisiscono e caricano vari formati di dati. LlamaIndex dispone di un lettore integrato che converte tutti i file presenti in ogni directory in documenti, tra cui Markdown, PDF, documenti Word, presentazioni PowerPoint, immagini, file audio e video.6 Per tenere conto di altri formati di dati non inclusi nella funzionalità integrata, sono disponibili dei connettori di dati attraverso LlamaHub, un registro di data loader open source. Questa fase del workflow prevede la creazione di una base di conoscenza per formare indici sui dati, in modo che possano essere interrogati e utilizzati dagli LLM.

Indicizzazione e memorizzazione

Una volta che i dati sono stati acquisiti, il framework di dati deve trasformare e organizzare i dati in una struttura che possa essere recuperata dall'LLM. Gli indici dei dati strutturano i dati in rappresentazioni che gli LLM possono utilizzare. LlamaIndex offre diversi tipi di indici complementari alla strategia di query dell'applicazione, tra cui: un indice di database vettoriale, un indice di riepilogo e un indice di grafo della conoscenza.

Una volta caricati e indicizzati, i dati possono essere memorizzati. LlamaIndex supporta molti database vettoriali che variano per architettura, complessità e costo. Per impostazione predefinita, LlamaIndex memorizza tutti i dati indicizzati solo nella memoria.

Indice di database vettoriale

L'indice di database vettoriale è comunemente utilizzato nelle applicazioni LLM seguendo il modello RAG perché eccelle nella gestione delle query in linguaggio naturale. L'accuratezza del recupero dalle query in linguaggio naturale dipende dalla ricerca semantica, ovvero dalla ricerca basata sul significato piuttosto che sulla corrispondenza delle parole chiave.7 La ricerca semantica è abilitata convertendo i dati di input in incorporamenti vettoriali. Un incorporamento vettoriale è una rappresentazione numerica della semantica dei dati che l'LLM può elaborare. La relazione matematica tra incorporamenti vettoriali consente agli LLM di recuperare i dati in base al significato dei termini di query per generare risposte con un contesto più ampio.

L'indice di database vettoriale prende le raccolte di dati o gli oggetti "Document" e li suddivide in nodi che sono unità atomiche di dati che rappresentano un "chunk" (frammento) dei dati di origine "Document"). Una volta che la raccolta di dati è stata suddivisa in diversi frammenti, vengono creati gli incorporamenti vettoriali di ciascun frammento di dati. I dati integrati sono ora in un formato su cui l'LLM può eseguire delle query. Questi indici vettoriali possono essere memorizzati per evitare la reindicizzazione. Il modo più semplice per memorizzare i dati è salvarli su disco, ma LlamaIndex si integra con più database vettoriali e modelli di incorporamento.8

Per cercare gli incorporamenti, la query dell'utente viene prima convertita in un incorporamento vettoriale. Successivamente, viene utilizzato un processo matematico per classificare tutti gli incorporamenti in base alla loro similarità semantica con la query.

L'indice di database vettoriale utilizza il top-k semantic retrieval per restituire gli incorporamenti più simili insieme ai relativi frammenti di testo. LlamaIndex è progettato per facilitare la creazione e la gestione di indici su larga scala per un recupero efficiente delle informazioni.

Esecuzione di query

L'ultima fase del workflow è l'implementazione di motori di query per gestire le richieste prompt agli LLM. La fase di query si divide in tre parti: recupero, post-elaborazione e sintesi delle risposte. Il recupero avviene quando i documenti più pertinenti vengono recuperati e restituiti dall'indice vettoriale. La post-elaborazione avviene quando i blocchi di incorporamento o "Nodi" recuperati vengono facoltativamente riadattati tramite riclassificazione, trasformazione o filtraggio. La sintesi della risposta si ha quando i dati e i prompt più pertinenti vengono combinati e inviati all'LLM per generare una risposta.

Motori di query

I motori di query consentono agli utenti di porre domande sui propri dati, elaborando una query in linguaggio naturale e restituendo una risposta contestuale.9 I motori di query sono composti da uno o più indici e retriever. È possibile utilizzare contemporaneamente più motori di query per raccolte di dati con più tipi di indice. LlamaIndex offre diversi motori di query per dati strutturati e semistrutturati, ad esempio un motore di query JSON per l'interrogazione di documenti JSON.

Agenti di dati

Gli agenti di dati sono agenti AI basati su LLM in grado di eseguire una serie di attività sui dati, tra cui funzioni di lettura e scrittura.10 Gli agenti di dati di LlamaIndex sono knowledge work basati su LLM che possono svolgere le seguenti funzioni:

  • Ricerca e recupero automatizzati su diversi tipi di dati: non strutturati, semistrutturati e strutturati
  • Chiamate API a servizi esterni che possono essere elaborate immediatamente, indicizzate o memorizzate nella cache
  • Memorizzazione della cronologia delle conversazioni
  • Esecuzione di attività di dati semplici e complesse

Gli agenti AI possono interagire con l'ambiente esterno tramite una serie di API e strumenti. LlamaIndex supporta l'agente OpenAI Function (sviluppato sulla base dell'API OpenAI Function) e un agente ReAct. I componenti fondamentali degli agenti di dati sono un "reasoning loop" o il paradigma di ragionamento dell'agente e le "tool abstraction" che sono gli strumenti stessi.

Reasoning loop

Gli agenti usano un reasoning loop, o paradigma, per risolvere i problemi in più fasi. In LlamaIndex, sia gli agenti OpenAI Function che ReAct seguono uno schema simile per decidere quali strumenti utilizzare, nonché la sequenza e i parametri per chiamare ciascuno strumento. Il modello di ragionamento è chiamato ReAct o ragionamento e azione. Questo processo può essere un semplice processo di selezione degli strumenti in un'unica fase oppure un processo più complesso in cui vengono selezionati più strumenti in ogni fase.

Tool abstraction degli agenti

Le tool abstraction delineano il modo in cui l'agente accede e usa gli strumenti. LlamaIndex offre strumenti e ToolSpecs, una classe Python che rappresenta una specifica API completa con cui un agente può interagire. La tool abstraction di base definisce un'interfaccia generica in grado di ricevere una serie di argomenti e restituire un contenitore generico per l'output dello strumento, in grado di acquisire qualsiasi risposta. LlamaIndex fornisce tool abstraction che inglobano i motori di query dei dati esistenti e abstraction per le funzioni che possono essere utilizzate dalla classe tool spec.

  • FunctionTool: converte qualsiasi funzione in uno strumento che può essere utilizzato dagli agenti.
  • QueryEngineTool: consente agli agenti di utilizzare la ricerca e il recupero tramite motore di query.

Una tool spec consente agli utenti di definire servizi completi, piuttosto che singoli strumenti che gestiscono compiti specifici. Ad esempio, le tool spec Gmail consentono all'agente di leggere e comporre le e-mail.11 Ecco un esempio di come potrebbe essere definita:

class GmailToolSpec(BaseToolSpec):
    “””Load emails from the user’s account”””
    spec_functions = [“load_data”,“create_draft”, “send_email”]
    def load_data(self) -> List[Document]:
...

def create_draft(
    self,
    to: List[str],
    subject: [str],
    message: [str],
) -> str: “Create and insert a draft email”
...

def send_draft(
    self,
    draft_id: str = None
) -> str: “Send a draft email.”
...

Ogni funzione viene convertita in uno strumento, utilizzando l'astrazione "FunctionTool".

LlamaIndex utilizza il repository di strumenti di LlamaHub, composto da oltre 15 Tool Specs con cui gli agenti possono interagire. Questo elenco comprende servizi pensati per migliorare e arricchire la capacità degli agenti di svolgere diverse azioni. Di seguito sono riportate alcune delle diverse specifiche incluse nel repository:

  • Specifica SQL + database vettoriale
  • Specifica Gmail
  • Ollama
  • LangChainLLM

Strumenti di utilità

LlamaIndex offre strumenti di utilità che possono ampliare le funzionalità degli strumenti esistenti, tra cui:

  • OnDemandLoaderTool: trasforma qualsiasi data loader esistente di LlamaIndex in uno strumento che può essere utilizzato da un agente.
  • LoadAndSearchToolSpec: accetta gli strumenti esistenti come input e produce sia uno strumento di caricamento che uno strumento di ricerca come output.

Integrazione con gli LLM

LlamaIndex funziona con foundation model open source come la serie IBM® Granite, Llama2 e OpenAI e altri framework LLM tra cui LangChain e Ollama. Gli LLM possono essere utilizzati in una miriade di modi come moduli autonomi o collegati ad altri moduli principali di LlamaIndex.12 Gli LLM possono essere utilizzati anche per far sì che gli agenti AI agiscano come knowledge worker che seguono workflow autonomi.

Agenti AI

LlamaIndex ha ampliato le sue funzionalità per includere l'uso di agenti AI basati su LLM che agiscono come knowledge worker. Gli agenti AI di LlamaIndex seguono un modello comportamentale ReAct (ragionamento e azione). Gli agenti ReAct seguono un paradigma di ragionamento che istruisce l'agente a pianificare e ragionare, migliorando iterativamente le risposte. Questo tipo di agente AI può essere interpretato come una forma di prompting basato su un ragionamento sequenziale. Gli agenti sono in grado di utilizzare gli strumenti per l'integrazione con altri LLM. Ad esempio, la raccolta di strumenti di connessione dati e agenti LlamaHub.

Casi d’uso

LlamaIndex offre diversi esempi di casi d'uso nella sua documentazione, con link a diversi tutorial.13

  • Chatbot: LlamaIndex offre un'analogia con stato per un motore di query chiamato motore di chat. Un motore di chat fornisce un'interfaccia di alto livello per le conversazioni (interazioni reciproche piuttosto che una singola domanda e risposta). Si può pensare ai motori di chat come a una versione più personalizzata di un'applicazione ChatGPT. Le implementazioni del motore di chat includono una modalità che utilizza un agente React. LlamaIndex offre un tutorial su come creare un chatbot che utilizzi un Data Agent.
  • Prompt: LlamaIndex utilizza l'integrazione con LLM e i workflow come astrazioni basate su eventi per concatenare le richieste di prompt. Il prompting è fondamentale per qualsiasi applicazione basata su LLM.
  • Question-answering (RAG): LlamaIndex offre la possibilità di eseguire la RAG su documenti non strutturati con query in linguaggio naturale. LlamaIndex offre anche un modo per eseguire query su dati strutturati con text-to-SQL e text-to-Pandas.14
  • Estrazione di dati strutturati: gli LLM elaborano il linguaggio naturale ed estraggono dettagli semanticamente significativi come nomi, date, indirizzi e cifre e li presentano in un formato coerente e strutturato indipendentemente dalla fonte di origine. Una volta strutturati, i dati possono essere inviati a un database o ulteriormente analizzati con strumenti come LlamaParse.
  • Agenti autonomi: gli agenti AI possono essere utilizzati per varie applicazioni LLM. Ad esempio, gli utenti possono creare un'applicazione RAG basata su agenti creando, con i propri dati, un assistente di ricerca arricchito da informazioni contestuali in grado di rispondere a domande semplici e di gestire compiti di ricerca complessi.15
Soluzioni correlate
Foundation Model

Esplora la libreria IBM di foundation model nel portfolio di watsonx per scalare in sicurezza l'AI generativa per la tua azienda.

Scopri watsonx.ai
Soluzioni di intelligenza artificiale

Metti l'AI al servizio della tua azienda grazie all'esperienza leader di settore e alla gamma di soluzioni di IBM nel campo dell'AI.

Esplora le soluzioni AI
Consulenza e servizi sull'AI

Reinventa i workflow e le operazioni critiche aggiungendo l'AI per massimizzare le esperienze, il processo decisionale in tempo reale e il valore di business.

Esplora i servizi AI
Fai il passo successivo

Esplora la libreria IBM dei foundation model nel portafoglio di IBM watsonx per scalare in sicurezza l'AI generativa per la tua azienda.

Esplora watsonx.ai Esplora le soluzioni AI
Note a piè di pagina

1 Elena Lowery, "Use Watsonx.Ai with LlamaIndex to Build Rag Applications", Use Watsonx.ai with LlamaIndex to build RAG applications, 28 maggio 2024, https://community.ibm.com/community/user/watsonx/blogs/elena-lowery/2024/05/28/use-watsonxai-with-llamaindex-to-build-rag-applica.

2 Matt Stallone et al., "Scaling Granite Code Models to 128K Context", arXiv.org, 18 luglio 2024, https://arxiv.org/abs/2407.13739.

3 Matt Stallone et al., "Scaling Granite Code Models to 128K Context".

4 Kim Martineau, "What Is Retrieval-Augmented Generation (Rag)?", IBM Research, 1 maggio 2024, https://research.ibm.com/blog/retrieval-augmented-generation-RAG.

5 "High-Level Concepts", LlamaIndex, https://docs.llamaindex.ai/en/stable/getting_started/concepts/.

6 "Loading Data (Ingestion)", LlamaIndex, https://docs.llamaindex.ai/en/stable/understanding/loading/loading/.

7 Elena Lowery, "Use Watsonx.Ai with LlamaIndex to Build Rag Applications".

8 Elena Lowery, "Use Watsonx.Ai with LlamaIndex to Build Rag Applications".

9 "Query Engine", LlamaIndex, https://docs.llamaindex.ai/en/latest/module_guides/deploying/query_engine/.

10 Jerry Liu, "Data Agents", Medium, 13 luglio 2023, https://medium.com/llamaindex-blog/data-agents-eed797d7972f.

11 "Google", LlamaIndex, https://docs.llamaindex.ai/en/stable/api_reference/tools/google/.

12 "Using LLMs", LlamaIndex, https://docs.llamaindex.ai/en/latest/module_guides/models/llms/.

13 "Use Cases", LlamaIndex, https://docs.llamaindex.ai/en/latest/use_cases/.

14 "Question-Answering (RAG)", LlamaIndex, https://docs.llamaindex.ai/en/stable/use_cases/q_and_a/.

15 "Agents", LlamaIndex, https://docs.llamaindex.ai/en/stable/use_cases/agents/.