Sådan analyseres dokumenter med LangChain og OpenAI API

Læsere som dig hjælper med at støtte MUO. Når du foretager et køb ved hjælp af links på vores websted, kan vi optjene en affiliate-kommission. Læs mere.

Uddrag af indsigt fra dokumenter og data er afgørende for at træffe informerede beslutninger. Der opstår dog bekymringer om privatlivets fred, når man håndterer følsomme oplysninger. LangChain, i kombination med OpenAI API, giver dig mulighed for at analysere dine lokale dokumenter uden at skulle uploade dem online.

De opnår dette ved at holde dine data lokalt, bruge indlejringer og vektorisering til analyse og udføre processer i dit miljø. OpenAI bruger ikke data indsendt af kunder via deres API til at træne deres modeller eller forbedre deres tjenester.

Opsætning af dit miljø

Opret et nyt virtuelt Python-miljø. Dette sikrer, at der ikke er nogen biblioteksversionskonflikter. Kør derefter følgende terminalkommando for at installere de nødvendige biblioteker.

 pip install langchain openai tiktoken faiss-cpu pypdf 

Her er en oversigt over, hvordan du vil bruge hvert bibliotek:

  • Langkæde: Du vil bruge det til at skabe og administrere sproglige kæder til tekstbehandling og analyse. Det vil give moduler til dokumentindlæsning, tekstopdeling, indlejringer og vektorlagring.
  • OpenAI: Du vil bruge det til at køre forespørgsler og opnå resultater fra en sprogmodel.
  • tiktoken: Du vil bruge det til at tælle antallet af tokens (tekstenheder) i en given tekst. Dette er for at holde styr på token-antallet, når du interagerer med OpenAI API, som opkræves baseret på antallet af tokens, du bruger.
  • FAISS: Du vil bruge det til at oprette og administrere et vektorlager, hvilket tillader hurtig hentning af lignende vektorer baseret på deres indlejringer.
  • PyPDF: Dette bibliotek udtrækker tekst fra PDF-filer. Det hjælper med at indlæse PDF-filer og udtrække deres tekst til yderligere behandling.

Når alle bibliotekerne er installeret, er dit miljø nu klar.

Få en OpenAI API-nøgle

Når du foretager anmodninger til OpenAI API, skal du inkludere en API-nøgle som en del af anmodningen. Denne nøgle giver API-udbyderen mulighed for at bekræfte, at anmodningerne kommer fra en legitim kilde, og at du har de nødvendige tilladelser til at få adgang til dens funktioner.

For at få en OpenAI API-nøgle skal du fortsætte tilOpenAI platform.

Klik derefter på under din kontos profil øverst til højreSe API-nøgler. DeAPI nøglersiden vises.

Klik på deOpret ny hemmelighed nøgleknap. Navngiv din nøgle og klik påOpret ny hemmelig nøgle. OpenAI vil generere din API-nøgle, som du skal kopiere og opbevare et sikkert sted. Af sikkerhedsmæssige årsager vil du ikke kunne se den igen via din OpenAI-konto. Hvis du mister denne hemmelige nøgle, skal du generere en ny.

Den fulde kildekode er tilgængelig i enGitHub-depot.

Import af de nødvendige biblioteker

For at kunne bruge de biblioteker, der er installeret i dit virtuelle miljø, skal du importere dem.

 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

Bemærk, at du importerer afhængighedsbibliotekerne fra LangChain. Dette giver dig mulighed for at bruge specifikke funktioner i LangChain rammeværket.

Indlæser dokumentet til analyse

Start med at oprette en variabel, der indeholder din API-nøgle. Du vil bruge denne variabel senere i koden til godkendelse.

 # Hardcoded API key
openai_api_key = "Your API key"

Det anbefales ikke at hårdkode din API-nøgle, hvis du planlægger at dele din kode med tredjeparter. For produktionskode, som du ønsker at distribuere, skal du bruge en miljøvariabel i stedet for.

Opret derefter en funktion, der indlæser et dokument. Funktionen skal indlæse en PDF eller en tekstfil. Hvis dokumentet ikke er nogen af ​​dem, skal funktionen hæve aValueError.

 def load_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")

Efter indlæsning af dokumenterne skal du oprette enCharacterTextSplitter. Denne splitter opdeler de indlæste dokumenter i mindre bidder baseret på tegn.

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

   return text_splitter.split_documents(documents=documents)

Opdeling af dokumentet sikrer, at bidderne har en håndterbar størrelse og stadig er forbundet med en eller anden overlappende kontekst. Dette er nyttigt til opgaver som tekstanalyse og informationssøgning.

Forespørgsel i dokumentet

Du har brug for en måde at forespørge på det uploadede dokument for at få indsigt fra det. For at gøre det skal du oprette en funktion, der tager enforespørgselsnor og enretrieversom input. Det skaber så enHentning QAeksempel ved hjælp afretrieverog en forekomst af OpenAI-sprogmodellen.

 def query_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)

Denne funktion bruger den oprettede QA-instans til at køre forespørgslen og udskrive resultatet.

Oprettelse af hovedfunktionen

Hovedfunktionen vil styre det overordnede programflow. Det kræver brugerinput for et dokumentfilnavn og indlæser det dokument. Opret derefter enOpenAIE-indlejringereksempel for indlejringer og konstruktion envektor butikbaseret på de indlæste dokumenter ogindlejringer. Gem dette vektorlager til en lokal fil.

Indlæs derefter det vedvarende vektorlager fra den lokale fil. Indtast derefter en løkke, hvor brugeren kan indtaste forespørgsler. Devigtigstefunktion sender disse forespørgsler tilforespørgsel_pdffunktion sammen med den persisterede vektorbutiks retriever. Sløjfen fortsætter, indtil brugeren går ind i "exit".

 def main():
   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")

Indlejringer fanger semantiske relationer mellem ord. Vektorer er en form, hvor du kan repræsentere stykker tekst.

Denne kode konverterer tekstdataene i dokumentet til vektorer ved hjælp af indlejringerne genereret afOpenAIE-indlejringer. Det indekserer derefter disse vektorer vhaFAISS, til effektiv genfinding og sammenligning af lignende vektorer. Det er det, der giver mulighed for analyse af det uploadede dokument.

Til sidst skal du bruge __name__ == "__main__" konstruktionen til at kalde hovedfunktionen, hvis en bruger kører programmet selvstændigt:

 if __name__ == "__main__":
   main()

Denne app er en kommandolinjeapplikation. Som en udvidelse kan du bruge Streamlit til at tilføje en webgrænseflade til appen.

Udførelse af dokumentanalyse

For at udføre dokumentanalyse skal du gemme det dokument, du vil analysere, i samme mappe som dit projekt, og derefter køre programmet. Det vil bede om navnet på det dokument, du vil analysere. Indtast dets fulde navn, og indtast derefter forespørgsler, som programmet skal analysere.

Skærmbilledet nedenfor viser resultaterne af at analysere en PDF.

Følgende output viser resultaterne af at analysere en tekstfil, der indeholder kildekode.

Sørg for, at de filer, du vil analysere, er i enten PDF- eller tekstformat. Hvis dine dokumenter er i andre formater, kan du konvertere dem til PDF-format ved hjælp af onlineværktøjer.

Forstå teknologien bag store sprogmodeller

LangChain forenkler oprettelsen af ​​applikationer ved hjælp af store sprogmodeller. Det betyder også, at den abstraherer, hvad der foregår bag kulisserne. For at forstå præcis, hvordan den applikation, du laver, fungerer, bør du sætte dig ind i teknologien bag store sprogmodeller.

Related Posts