S malom količinom koda i nekim korisnim bibliotekama, možete izgraditi ovaj moćan alat za analizu dokumenata.
Izvlačenje uvida iz dokumenata i podataka ključno je za donošenje informiranih odluka. Međutim, problemi vezani uz privatnost javljaju se kada se radi o osjetljivim informacijama. LangChain, u kombinaciji s OpenAI API-jem, omogućuje vam analizu vaših lokalnih dokumenata bez potrebe da ih postavljate na internet.
To postižu čuvanjem vaših podataka lokalno, korištenjem ugrađivanja i vektorizacije za analizu i izvršavanjem procesa unutar vašeg okruženja. OpenAI ne koristi podatke koje klijenti dostave putem svog API-ja za obuku svojih modela ili poboljšanje svojih usluga.
Postavljanje vašeg okruženja
Stvorite novo Python virtualno okruženje. Ovo će osigurati da nema sukoba verzija knjižnice. Zatim pokrenite sljedeću naredbu terminala da instalirate potrebne biblioteke.
pip install langchain openai tiktoken faiss-cpu pypdf
Ovdje je pregled načina na koji ćete koristiti svaku biblioteku:
- LangChain: Koristit ćete ga za stvaranje i upravljanje jezičnim lancima za obradu i analizu teksta. Pružat će module za učitavanje dokumenata, dijeljenje teksta, umetanje i pohranu vektora.
- OpenAI: Koristit ćete ga za pokretanje upita i dobivanje rezultata iz jezičnog modela.
- tiktoken: Koristit ćete ga za brojanje tokena (jedinica teksta) u datom tekstu. Ovo služi za praćenje broja tokena prilikom interakcije s OpenAI API-jem koji se naplaćuje na temelju broja tokena koje koristite.
- FAISS: Koristit ćete ga za stvaranje i upravljanje pohranom vektora, omogućujući brzo pronalaženje sličnih vektora na temelju njihovih umetanja.
- PyPDF: Ova biblioteka izdvaja tekst iz PDF-ova. Pomaže pri učitavanju PDF datoteka i izdvaja njihov tekst za daljnju obradu.
Nakon što su sve biblioteke instalirane, vaše okruženje je sada spremno.
Dobivanje OpenAI API ključa
Kada postavljate zahtjeve OpenAI API-ju, trebate uključiti API ključ kao dio zahtjeva. Ovaj ključ omogućuje pružatelju API-ja da provjeri da zahtjevi dolaze iz legitimnog izvora i da imate potrebna dopuštenja za pristup njegovim značajkama.
Da biste dobili OpenAI API ključ, prijeđite na OpenAI platforma.
Zatim ispod profila vašeg računa u gornjem desnom kutu kliknite na Pregledajte API ključeve. The API ključevi pojavit će se stranica.
Klikni na Stvorite novu tajnuključ dugme. Imenujte svoj ključ i kliknite Stvorite novi tajni ključ. OpenAI će generirati vaš API ključ koji trebate kopirati i čuvati negdje na sigurnom. Iz sigurnosnih razloga, nećete ga moći ponovo vidjeti putem svog OpenAI računa. Ako izgubite ovaj tajni ključ, morat ćete generirati novi.
Puni izvorni kod dostupan je u a GitHub spremište.
Uvoz potrebnih biblioteka
Da biste mogli koristiti biblioteke instalirane u vašem virtualnom okruženju, morate ih uvesti.
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
Primijetite da uvozite biblioteke ovisnosti iz LangChaina. To vam omogućuje korištenje specifičnih značajki okvira LangChain.
Učitavanje dokumenta za analizu
Započnite stvaranjem varijable koja sadrži vaš API ključ. Ovu varijablu kasnije ćete koristiti u kodu za provjeru autentičnosti.
# Hardcoded API key
openai_api_key = "Your API key"
Ne preporučuje se tvrdo kodiranje vašeg API ključa ako planirate dijeliti svoj kod s trećim stranama. Za proizvodni kod koji namjeravate distribuirati, umjesto toga koristite varijablu okruženja.
Zatim stvorite funkciju koja učitava dokument. Funkcija bi trebala učitati PDF ili tekstualnu datoteku. Ako dokument nije ni jedno ni drugo, funkcija bi trebala podići 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")
Nakon učitavanja dokumenata, kreirajte a CharacterTextSplitter. Ovaj razdjelnik će podijeliti učitane dokumente u manje dijelove na temelju znakova.
text_splitter = CharacterTextSplitter(chunk_size=1000,
chunk_overlap=30, separator="\n")return text_splitter.split_documents(documents=documents)
Razdvajanje dokumenta osigurava da su dijelovi podesne veličine i da su još uvijek povezani s nekim kontekstom koji se preklapa. Ovo je korisno za zadatke poput analize teksta i pronalaženja informacija.
Upit za dokument
Potreban vam je način postavljanja upita za učitani dokument kako biste iz njega izvukli uvide. Da biste to učinili, stvorite funkciju koja uzima a upit niz i a retriver kao ulaz. Zatim stvara a RetrievalQA primjer pomoću retriver i instancu jezičnog 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)
Ova funkcija koristi stvorenu QA instancu za pokretanje upita i ispis rezultata.
Stvaranje glavne funkcije
Glavna funkcija će kontrolirati cjelokupni tijek programa. Uzet će korisnički unos za naziv datoteke dokumenta i učitati taj dokument. Zatim izradite OpenAIEembeddings instanca za ugradnje i konstrukciju a vektorska trgovina na temelju učitanih dokumenata i ugradnje. Spremite ovu vektorsku pohranu u lokalnu datoteku.
Zatim učitajte trajnu vektorsku pohranu iz lokalne datoteke. Zatim unesite petlju u koju korisnik može unositi upite. The glavni prosljeđuje ove upite u upit_pdf funkcioniraju zajedno s dohvatom postojane vektorske pohrane. Petlja će se nastaviti sve dok korisnik ne unese "izlaz".
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")
Ugradnje hvataju semantičke odnose između riječi. Vektori su oblik u kojem možete predstavljati dijelove teksta.
Ovaj kod pretvara tekstualne podatke u dokumentu u vektore pomoću umetanja koje generira OpenAIEembeddings. Zatim indeksira te vektore pomoću FAISS, za učinkovito pronalaženje i usporedbu sličnih vektora. To je ono što omogućuje analizu učitanog dokumenta.
Na kraju, koristite konstrukcija __name__ == "__main__". za pozivanje glavne funkcije ako korisnik samostalno pokreće program:
if __name__ == "__main__":
main()
Ova aplikacija je aplikacija naredbenog retka. Kao dodatak, možete koristite Streamlit za dodavanje web sučelja aplikaciji.
Izvođenje analize dokumenata
Da biste izvršili analizu dokumenta, pohranite dokument koji želite analizirati u istu mapu kao i vaš projekt, a zatim pokrenite program. Tražit će naziv dokumenta koji želite analizirati. Unesite njegov puni naziv, zatim unesite upite za program koji treba analizirati.
Snimka zaslona u nastavku prikazuje rezultate analize PDF-a.
Sljedeći izlaz prikazuje rezultate analize tekstualne datoteke koja sadrži izvorni kod.
Provjerite jesu li datoteke koje želite analizirati u PDF ili tekstualnom formatu. Ako su vaši dokumenti u drugim formatima, možete pretvorite ih u PDF format pomoću mrežnih alata.
Razumijevanje tehnologije koja stoji iza velikih jezičnih modela
LangChain pojednostavljuje izradu aplikacija pomoću velikih jezičnih modela. To također znači da apstrahira ono što se događa iza kulisa. Da biste točno razumjeli kako funkcionira aplikacija koju stvarate, trebali biste se upoznati s tehnologijom koja stoji iza velikih jezičnih modela.