Con una piccola quantità di codice e alcune utili librerie, puoi creare questo potente strumento di analisi dei documenti.

Estrarre informazioni approfondite da documenti e dati è fondamentale per prendere decisioni informate. Tuttavia, sorgono problemi di privacy quando si tratta di informazioni sensibili. LangChain, in combinazione con l'API OpenAI, ti consente di analizzare i tuoi documenti locali senza la necessità di caricarli online.

Raggiungono questo obiettivo mantenendo i dati localmente, utilizzando incorporamenti e vettorizzazione per l'analisi ed eseguendo processi all'interno del proprio ambiente. OpenAI non utilizza i dati inviati dai clienti tramite la loro API per addestrare i loro modelli o migliorare i loro servizi.

Configurazione dell'ambiente

Crea un nuovo ambiente virtuale Python. Ciò garantirà che non vi siano conflitti di versione della libreria. Quindi eseguire il seguente comando da terminale per installare le librerie richieste.

pip install langchain openai tiktoken faiss-cpu pypdf
instagram viewer

Ecco una ripartizione di come utilizzerai ciascuna libreria:

  • LangChain: Lo utilizzerai per creare e gestire catene linguistiche per l'elaborazione e l'analisi del testo. Fornirà moduli per il caricamento di documenti, la suddivisione del testo, gli incorporamenti e l'archiviazione di vettori.
  • OpenAI: lo utilizzerai per eseguire query e ottenere risultati da un modello linguistico.
  • tiktoken: Lo utilizzerai per contare il numero di token (unità di testo) in un dato testo. Questo serve per tenere traccia del conteggio dei token quando si interagisce con l'API OpenAI che si addebita in base al numero di token utilizzati.
  • FAISS: lo utilizzerai per creare e gestire un archivio di vettori, consentendo il recupero rapido di vettori simili in base ai loro incorporamenti.
  • PyPDF: questa libreria estrae testo dai PDF. Aiuta a caricare i file PDF ed estrae il testo per un'ulteriore elaborazione.

Dopo aver installato tutte le librerie, il tuo ambiente è ora pronto.

Ottenere una chiave API OpenAI

Quando effettui richieste all'API OpenAI, devi includere una chiave API come parte della richiesta. Questa chiave consente al fornitore dell'API di verificare che le richieste provengano da una fonte legittima e che tu disponga delle autorizzazioni necessarie per accedere alle sue funzionalità.

Per ottenere una chiave API OpenAI, procedere al Piattaforma OpenAI.

Quindi, sotto il profilo del tuo account in alto a destra, fai clic su Visualizza le chiavi API. IL Chiavi API verrà visualizzata la pagina.

Clicca sul Crea un nuovo segretochiave pulsante. Assegna un nome alla chiave e fai clic su Crea una nuova chiave segreta. OpenAI genererà la tua chiave API che dovresti copiare e conservare in un posto sicuro. Per motivi di sicurezza, non potrai visualizzarlo nuovamente tramite il tuo account OpenAI. Se perdi questa chiave segreta, dovrai generarne una nuova.

Il codice sorgente completo è disponibile in a Repositorio GitHub.

Importazione delle librerie richieste

Per poter utilizzare le librerie installate nel tuo ambiente virtuale, devi importarle.

from langchain.document_loaders import PyPDFLoader, TextLoader
from langchain.text_splitter import CharacterTextSplitter
from langchain.embeddings.openai import OpenAIEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.llms import OpenAI

Nota che importi le librerie di dipendenze da LangChain. Ciò consente di utilizzare funzionalità specifiche del framework LangChain.

Caricamento del documento per l'analisi

Inizia creando una variabile che contenga la tua chiave API. Utilizzerai questa variabile più avanti nel codice per l'autenticazione.

# Hardcoded API key
openai_api_key = "Your API key"

Non è consigliabile codificare in modo rigido la chiave API se prevedi di condividere il codice con terze parti. Per il codice di produzione che intendi distribuire, utilizzare invece una variabile d'ambiente.

Successivamente, crea una funzione che carica un documento. La funzione dovrebbe caricare un PDF o un file di testo. Se il documento non è nessuno dei due, la funzione dovrebbe sollevare a ValoreErrore.

defload_document(filename):
if filename.endswith(".pdf"):
loader = PyPDFLoader(filename)
documents = loader.load()
elif filename.endswith(".txt"):
loader = TextLoader(filename)
documents = loader.load()
else:
raise ValueError("Invalid file type")

Dopo aver caricato i documenti, creare un file CharacterTextSplitter. Questo divisore dividerà i documenti caricati in blocchi più piccoli in base ai caratteri.

 text_splitter = CharacterTextSplitter(chunk_size=1000, 
chunk_overlap=30, separator="\n")

return text_splitter.split_documents(documents=documents)

La suddivisione del documento garantisce che i blocchi abbiano dimensioni gestibili e siano ancora collegati a un contesto sovrapposto. Ciò è utile per attività come l'analisi del testo e il recupero delle informazioni.

Interrogare il documento

È necessario un modo per eseguire query sul documento caricato per ricavarne approfondimenti. Per fare ciò, crea una funzione che accetta a domanda stringa e a documentalista come input. Quindi crea a RecuperoQA istanza utilizzando il file documentalista e un'istanza del modello linguistico OpenAI.

defquery_pdf(query, retriever):
qa = RetrievalQA.from_chain_type(llm=OpenAI(openai_api_key=openai_api_key),
chain_type="stuff", retriever=retriever)
result = qa.run(query)
print(result)

Questa funzione utilizza l'istanza QA creata per eseguire la query e stampare il risultato.

Creazione della funzione principale

La funzione principale controllerà il flusso complessivo del programma. Richiederà l'input dell'utente per il nome file di un documento e caricherà quel documento. Quindi crea un file OpenAIEmbeddings istanza per incorporamenti e costrutto a negozio di vettori in base ai documenti caricati e incastri. Salva questo archivio vettoriale in un file locale.

Successivamente, carica l'archivio vettoriale persistente dal file locale. Quindi inserisci un ciclo in cui l'utente può inserire query. IL principale la funzione passa queste query a query_pdf funzione insieme al retriever dell'archivio vettoriale persistente. Il ciclo continuerà finché l'utente non inserirà "exit".

defmain():
filename = input("Enter the name of the document (.pdf or .txt):\n")
docs = load_document(filename)
embeddings = OpenAIEmbeddings(openai_api_key=openai_api_key)
vectorstore = FAISS.from_documents(docs, embeddings)
vectorstore.save_local("faiss_index_constitution")
persisted_vectorstore = FAISS.load_local("faiss_index_constitution", embeddings)
query = input("Type in your query (type 'exit' to quit):\n")

while query != "exit":
query_pdf(query, persisted_vectorstore.as_retriever())
query = input("Type in your query (type 'exit' to quit):\n")

Gli incorporamenti catturano le relazioni semantiche tra le parole. I vettori sono una forma in cui puoi rappresentare parti di testo.

Questo codice converte i dati di testo nel documento in vettori utilizzando gli incorporamenti generati da OpenAIEmbeddings. Quindi indicizza questi vettori utilizzando FAISS, per il recupero e il confronto efficienti di vettori simili. Questo è ciò che consente l'analisi del documento caricato.

Infine, usa il costrutto __name__ == "__main__". per chiamare la funzione principale se un utente esegue il programma in modalità autonoma:

if __name__ == "__main__":
main()

Questa app è un'applicazione da riga di comando. Come estensione, puoi usa Streamlit per aggiungere un'interfaccia web all'app.

Esecuzione dell'analisi dei documenti

Per eseguire l'analisi del documento, archivia il documento che desideri analizzare nella stessa cartella del progetto, quindi esegui il programma. Ti verrà chiesto il nome del documento che desideri analizzare. Inserisci il suo nome completo, quindi inserisci le query che il programma dovrà analizzare.

Lo screenshot seguente mostra i risultati dell'analisi di un PDF.

L'output seguente mostra i risultati dell'analisi di un file di testo contenente il codice sorgente.

Assicurati che i file che desideri analizzare siano in formato PDF o testo. Se i tuoi documenti sono in altri formati, puoi farlo convertirli in formato PDF utilizzando strumenti online.

Comprendere la tecnologia dietro i modelli linguistici di grandi dimensioni

LangChain semplifica la creazione di applicazioni utilizzando modelli linguistici di grandi dimensioni. Ciò significa anche che astrae ciò che accade dietro le quinte. Per capire esattamente come funziona l'applicazione che stai creando, dovresti familiarizzare con la tecnologia alla base dei modelli linguistici di grandi dimensioni.