Rinnova l’analisi dei dati OpenAI, LangChain e LlamaIndex per una facile estrazione.

Renew analysis of OpenAI, LangChain, and LlamaIndex data for easy extraction.

Introduzione

L’API di OpenAI, sviluppata da OpenAI, fornisce accesso ad alcuni dei modelli di linguaggio più avanzati disponibili oggi. Sfruttando quest’API e utilizzando LangChain & LlamaIndex, gli sviluppatori possono integrare la potenza di questi modelli nelle proprie applicazioni, prodotti o servizi. Con poche righe di codice, è possibile accedere alla vasta conoscenza e alle capacità dei modelli di linguaggio di OpenAI, aprendo un mondo di possibilità entusiasmanti.

Il nucleo dei modelli di linguaggio di OpenAI risiede nel Large Language Model, o LLM per breve. I LLM possono generare testo simile a quello umano e comprendere il contesto delle strutture linguistiche complesse. Addestrandosi su immense quantità di dati diversi, i LLM hanno acquisito una notevole capacità di comprendere e generare testo pertinente in contesti diversi.

Obiettivi di Apprendimento

In questo articolo esploreremo le entusiasmanti possibilità di:

  • Utilizzo dell’API di OpenAI combinata con LangChain e LlamaIndex per estrarre informazioni preziose da diversi documenti PDF senza fatica.
  • Come formattare le richieste per estrarre i valori in diverse strutture dati.
  • Come utilizzare GPTSimpleVectorIndex per una ricerca e un recupero efficienti dei documenti.

Questo articolo è stato pubblicato come parte del Data Science Blogathon.

LlamaIndex e LangChain

Utilizzare queste due librerie open-source per creare applicazioni che sfruttano la potenza dei grandi modelli di linguaggio (LLM). LlamaIndex fornisce un’interfaccia semplice tra i LLM e le fonti di dati esterne, mentre LangChain fornisce un framework per la creazione e la gestione di applicazioni alimentate da LLM. Anche se sia LlamaIndex che LangChain sono ancora in fase di sviluppo, hanno ancora il potenziale per rivoluzionare il modo in cui costruiamo le applicazioni.

Librerie Necessarie

Per prima cosa, installiamo le librerie necessarie e le importiamo.

!pip install llama-index==0.5.6 
!pip install langchain==0.0.148 
!pip install PyPDF2 

from llama_index import SimpleDirectoryReader, GPTSimpleVectorIndex, LLMPredictor, ServiceContext 
from langchain import OpenAI 
import PyPDF2 
import os

Per iniziare a utilizzare il servizio API di OpenAI, il primo passo è registrarsi per un account. Una volta registrati con successo, è possibile creare una chiave API specifica per il proprio account.

Raccomando di impostare la chiave API come variabile di ambiente per garantire un’integrazione senza interruzioni con il proprio codice e le proprie applicazioni. In questo modo è possibile memorizzare e recuperare in modo sicuro la chiave API all’interno dell’ambiente senza esporla esplicitamente nel codice. Questa pratica aiuta a mantenere la riservatezza della chiave API garantendo al contempo un facile accesso quando necessario.

os.environ["OPENAI_API_KEY"] = “API KEY”

Ora otteniamo la directory di lavoro corrente in cui risiedono i documenti e la salviamo in una variabile.

current_directory = os.getcwd()

Ora creeremo un oggetto per la classe LLMPredictor. LLMPredictor accetta un parametro llm. Qui utilizziamo un modello chiamato “text-davinci-003” dall’API di OpenAI.

llm_predictor = LLMPredictor(llm=OpenAI(model_name="text-davinci-003"))

Possiamo anche fornire diversi altri parametri opzionali, come

  • temperatura – Questo parametro controlla la casualità delle risposte del modello. Una temperatura di 0 significa che il modello sceglierà sempre il token successivo più probabile.
  • max_tokens – utilizzare il numero massimo di token per generare l’output.

Successivamente, creeremo un oggetto per la classe ServiceContext. Inizializziamo la classe ServiceContext utilizzando il metodo from_defaults, che inizializza diversi argomenti chiave di utilizzo comune, quindi non dobbiamo definirli separatamente.

service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)

In questo caso, chiamiamo il metodo from_defaults con il parametro llm_predictor, impostato sull’oggetto llm_predictor creato in precedenza. Ciò imposta l’attributo llm_predictor dell’istanza ServiceContext sull’oggetto llm_predictor.

Estrazione di Informazioni da Documenti Multipli in una Volta

Il prossimo passo consiste nell’iterare attraverso ogni documento presente nella directory.

for filename in os.listdir(current_directory):
  if os.path.isfile(os.path.join(current_directory, filename)):

Utilizziamo la prima riga per iterare attraverso ogni file nella current_directory, mentre la seconda riga assicura che i file attraverso i quali stiamo iterando siano documenti validi e non directory.

documents = SimpleDirectoryReader(input_files=[f"{filename}"]).load_data()

La classe SimpleDirectoryReader legge i dati da una directory. Riceve un parametro chiamato input_files e genera dinamicamente un singolo nome file utilizzando la variabile filename, che viene poi passata ad essa.

Il metodo load_data viene chiamato sull’istanza di SimpleDirectoryReader. Questo metodo è responsabile del caricamento dei dati dai file di input specificati e del ritorno dei documenti caricati.

index = GPTSimpleVectorIndex.from_documents(documents, service_context=service_context)

La classe GPTSimpleVectorIndex è progettata per creare un indice per la ricerca e il recupero efficiente dei documenti. Chiameremo il metodo from_documents della classe con i seguenti parametri:

  • documents: questo parametro rappresenta i documenti che saranno indicizzati.
  • service_context: questo parametro rappresenta il contesto del servizio che viene passato.

Ora costruiremo la nostra richiesta. Sto cercando di estrarre il numero totale di casi registrati sotto “Cyber Crimes”. Quindi la mia richiesta è qualcosa del genere:

Qual è il numero totale di casi registrati sotto i Cyber Crimes?

prompt = f"""
what is the total number of cases registered under Cyber Crimes?
"""

response = index.query(prompt)
print(response)

Ora interrogheremo l’indice creato in precedenza con la nostra richiesta utilizzando la linea di codice sopra, ottenendo una risposta come questa.

Possiamo riscrivere la richiesta in qualcosa come questo per restituire solo il conteggio.

“Qual è il numero totale di casi registrati sotto i Cyber Crimes? Restituisci solo il risultato intero.”

Che restituirà la risposta come questa,

Possiamo anche salvare la risposta in qualsiasi struttura dati, ad esempio un dizionario. Per questo, creiamo prima un dizionario vuoto. E assegniamo la risposta a una particolare chiave; nel nostro caso, possiamo assegnarla al nome del file associato, all’anno del crimine, ecc.

Codice completo per l’utilizzo di LangChain e LlamaIndex

current_directory = os.getcwd()
def extract_data():

    llm_predictor = LLMPredictor(llm=OpenAI(model_name="text-davinci-003"))
    service_context = ServiceContext.from_defaults(llm_predictor=llm_predictor)
    for filename in os.listdir(current_directory):
      if os.path.isfile(os.path.join(current_directory, filename)):
        documents = SimpleDirectoryReader(input_files=[f"{filename}"]).load_data()
        index = GPTSimpleVectorIndex.from_documents(documents, service_context=service_context)
        
        prompt = f"""
        what is the total number of cases registered under Cyber Crimes.

        return the integer result only
        """
        response = index.query(prompt)
        cyber_crimes[filename] = response.response
        print(response)

Conclusione

In questo articolo, abbiamo esplorato le interessanti possibilità dell’utilizzo dell’API di OpenAI combinata con LangChain e LlamaIndex per estrarre informazioni preziose dai documenti PDF senza sforzo.

Le possibilità riguardanti il leverage del potere combinato dell’API di OpenAI, LangChain e LlamaIndex sono illimitate. Qui, abbiamo solo graffiato la superficie di ciò che questi strumenti possono offrire.

Punti chiave

  • Con la varietà di connettori disponibili in LangChain e LlamaIndex, possiamo integrare senza soluzione di continuità i modelli LLM in qualsiasi fonte di dati che scegliamo.
  • Possiamo esplorare vari formati e fonti di dati per estrarre le informazioni necessarie.
  • Possiamo scegliere qualsiasi struttura dati che soddisfi le nostre esigenze, consentendoci di condurre ulteriori analisi senza sforzo. Che si tratti di una semplice lista, di un database strutturato o persino di un formato personalizzato, possiamo salvare i dati estratti in modo che soddisfi al meglio i nostri obiettivi.

Inoltre, possiamo andare un passo avanti e istruire il modello stesso su come formattare la risposta. Ad esempio, se preferiamo che l’output sia in un oggetto JSON, possiamo facilmente specificare questa preferenza.

Domande frequenti

I media mostrati in questo articolo non sono di proprietà di Analytics Vidhya e sono utilizzati a discrezione dell’autore.