Z majhno količino kode in nekaj uporabnimi knjižnicami lahko sestavite to zmogljivo orodje za analizo dokumentov.

Pridobivanje vpogledov iz dokumentov in podatkov je ključnega pomena pri sprejemanju premišljenih odločitev. Vendar pa se pri obravnavi občutljivih informacij pojavijo pomisleki glede zasebnosti. LangChain vam v kombinaciji z API-jem OpenAI omogoča analizo vaših lokalnih dokumentov, ne da bi jih bilo treba naložiti v splet.

To dosežejo tako, da vaše podatke hranijo lokalno, uporabljajo vdelave in vektorizacijo za analizo ter izvajajo procese v vašem okolju. OpenAI ne uporablja podatkov, ki jih pošljejo stranke prek svojega API-ja, za usposabljanje svojih modelov ali izboljšanje svojih storitev.

Nastavitev vašega okolja

Ustvarite novo virtualno okolje Python. To bo zagotovilo, da ni konfliktov različic knjižnice. Nato zaženite naslednji terminalski ukaz, da namestite zahtevane knjižnice.

pip install langchain openai tiktoken faiss-cpu pypdf

Tukaj je razčlenitev, kako boste uporabljali posamezne knjižnice:

instagram viewer
  • LangChain: Uporabljali ga boste za ustvarjanje in upravljanje jezikovnih verig za obdelavo in analizo besedil. Zagotavljal bo module za nalaganje dokumentov, razdelitev besedila, vdelave in vektorsko shranjevanje.
  • OpenAI: Uporabljali ga boste za izvajanje poizvedb in pridobivanje rezultatov iz jezikovnega modela.
  • tiktoken: Uporabili ga boste za štetje števila žetonov (enot besedila) v danem besedilu. To je namenjeno sledenju številu žetonov pri interakciji z API-jem OpenAI, ki zaračunava glede na število žetonov, ki jih uporabljate.
  • FAISS: Uporabili ga boste za ustvarjanje in upravljanje vektorske shrambe, ki omogoča hitro iskanje podobnih vektorjev na podlagi njihovih vdelav.
  • PyPDF: Ta knjižnica izvleče besedilo iz datotek PDF. Pomaga pri nalaganju datotek PDF in ekstrahira njihovo besedilo za nadaljnjo obdelavo.

Ko so vse knjižnice nameščene, je vaše okolje pripravljeno.

Pridobivanje ključa OpenAI API

Ko podajate zahteve API-ju OpenAI, morate kot del zahteve vključiti ključ API-ja. Ta ključ omogoča ponudniku API-ja, da preveri, ali zahteve prihajajo iz zakonitega vira in ali imate potrebna dovoljenja za dostop do njegovih funkcij.

Če želite pridobiti ključ OpenAI API, pojdite na OpenAI platforma.

Nato pod profilom računa v zgornjem desnem kotu kliknite na Oglejte si ključe API. The API ključi stran se bo pojavila.

Kliknite na Ustvari novo skrivnostključ gumb. Poimenujte svoj ključ in kliknite Ustvari nov skrivni ključ. OpenAI bo ustvaril vaš ključ API, ki ga kopirajte in hranite nekje na varnem. Iz varnostnih razlogov si ga ne boste mogli znova ogledati prek svojega računa OpenAI. Če izgubite ta skrivni ključ, boste morali ustvariti novega.

Celotna izvorna koda je na voljo v a Repozitorij GitHub.

Uvažanje zahtevanih knjižnic

Če želite uporabljati knjižnice, nameščene v vašem virtualnem okolju, jih morate uvoziti.

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

Upoštevajte, da uvozite knjižnice odvisnosti iz LangChaina. To vam omogoča uporabo posebnih funkcij ogrodja LangChain.

Nalaganje dokumenta za analizo

Začnite z ustvarjanjem spremenljivke, ki vsebuje vaš ključ API. To spremenljivko boste kasneje uporabili v kodi za preverjanje pristnosti.

# Hardcoded API key
openai_api_key = "Your API key"

Ni priporočljivo, da svoj ključ API trdo kodirate, če nameravate kodo deliti s tretjimi osebami. Za produkcijsko kodo, ki jo nameravate distribuirati, namesto tega uporabite spremenljivko okolja.

Nato ustvarite funkcijo, ki naloži dokument. Funkcija mora naložiti PDF ali besedilno datoteko. Če dokument ni ne eno ne drugo, mora funkcija dvigniti 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")

Po nalaganju dokumentov ustvarite a CharacterTextSplitter. Ta razdelilnik bo naložene dokumente razdelil na manjše kose glede na znake.

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

return text_splitter.split_documents(documents=documents)

Razdelitev dokumenta zagotavlja, da so kosi obvladljive velikosti in so še vedno povezani s prekrivajočim se kontekstom. To je uporabno za naloge, kot sta analiza besedila in iskanje informacij.

Poizvedovanje po dokumentu

Potrebujete način za poizvedovanje po naloženem dokumentu, da iz njega pridobite vpoglede. Če želite to narediti, ustvarite funkcijo, ki sprejme a poizvedbo niz in a prinašalec kot vnos. Nato ustvari a RetrievalQA na primer z uporabo prinašalec in primerek jezikovnega modela 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)

Ta funkcija uporablja ustvarjeni primerek QA za izvajanje poizvedbe in tiskanje rezultata.

Ustvarjanje glavne funkcije

Glavna funkcija bo nadzirala celoten potek programa. Uporabnik bo vnesel ime datoteke dokumenta in ta dokument naložil. Nato ustvarite OpenAIEmbeddings primerek za vdelave in konstrukt a vektorska trgovina podlagi naloženih dokumentov in vdelave. Shranite to vektorsko shrambo v lokalno datoteko.

Nato naložite trajno vektorsko shrambo iz lokalne datoteke. Nato vnesite zanko, kjer lahko uporabnik vnaša poizvedbe. The glavni funkcija posreduje te poizvedbe v poizvedba_pdf deluje skupaj z vztrajnim prenašalcem vektorske shrambe. Zanka se bo nadaljevala, dokler uporabnik ne vnese "izhod".

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

Vdelave zajamejo pomenska razmerja med besedami. Vektorji so oblika, v kateri lahko predstavljate dele besedila.

Ta koda pretvori besedilne podatke v dokumentu v vektorje z uporabo vdelav, ki jih ustvari OpenAIEmbeddings. Te vektorje nato indeksira z uporabo FAISS, za učinkovito iskanje in primerjavo podobnih vektorjev. To je tisto, kar omogoča analizo naloženega dokumenta.

Končno uporabite konstrukt __name__ == "__main__". za klic glavne funkcije, če uporabnik zažene program samostojno:

if __name__ == "__main__":
main()

Ta aplikacija je aplikacija ukazne vrstice. Kot razširitev lahko uporabite Streamlit, da aplikaciji dodate spletni vmesnik.

Izvajanje analize dokumentov

Če želite izvesti analizo dokumenta, shranite dokument, ki ga želite analizirati, v isto mapo kot vaš projekt, nato pa zaženite program. Zahteval bo ime dokumenta, ki ga želite analizirati. Vnesite njegovo polno ime in nato vnesite poizvedbe za program, ki ga želite analizirati.

Spodnji posnetek zaslona prikazuje rezultate analize PDF-ja.

Naslednji izhod prikazuje rezultate analize besedilne datoteke, ki vsebuje izvorno kodo.

Prepričajte se, da so datoteke, ki jih želite analizirati, v formatu PDF ali besedilu. Če so vaši dokumenti v drugih formatih, lahko pretvorite jih v format PDF s spletnimi orodji.

Razumevanje tehnologije, ki stoji za velikimi jezikovnimi modeli

LangChain poenostavlja ustvarjanje aplikacij z uporabo velikih jezikovnih modelov. To tudi pomeni, da abstrahira dogajanje v zakulisju. Če želite natančno razumeti, kako deluje aplikacija, ki jo ustvarjate, se morate seznaniti s tehnologijo, ki stoji za velikimi jezikovnimi modeli.