Med en lille mængde kode og nogle nyttige biblioteker kan du bygge dette kraftfulde dokumentanalyseværktøj.

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.
    instagram viewer
  • 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 til OpenAI platform.

Klik derefter på under din kontos profil øverst til højre Se API-nøgler. Det API nøgler siden vises.

Klik på Opret ny hemmelighednøgle knap. 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 være i stand til at 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 en GitHub-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, brug i stedet en miljøvariabel.

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 a ValueError.

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

Efter indlæsning af dokumenterne skal du oprette en CharacterTextSplitter. 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 en forespørgsel snor og en retriever som input. Det skaber så en Hentning QA eksempel ved hjælp af retriever og en forekomst af OpenAI-sprogmodellen.

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)

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 en OpenAIE-indlejringer eksempel for indlejringer og konstruktion en vektor butik baseret på de indlæste dokumenter og indlejringer. 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. Det vigtigste funktion sender disse forespørgsler til forespørgsel_pdf funktion sammen med den persisterede vektorbutiks retriever. Sløjfen vil fortsætte, indtil brugeren går ind i "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")

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 af OpenAIE-indlejringer. Det indekserer derefter disse vektorer vha FAISS, til effektiv genfinding og sammenligning af lignende vektorer. Det er det, der giver mulighed for analyse af det uploadede dokument.

Brug endelig __name__ == "__main__" konstruktionen 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 brug 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 konverter 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.