Väikese koguse koodi ja mõne kasuliku teegi abil saate luua selle võimsa dokumendianalüüsi tööriista.

Dokumentidest ja andmetest arusaamade väljavõtmine on teadlike otsuste tegemisel ülioluline. Tundliku teabe käsitlemisel tekivad aga privaatsusprobleemid. LangChain koos OpenAI API-ga võimaldab teil analüüsida oma kohalikke dokumente, ilma et peaksite neid võrku üles laadima.

Nad saavutavad selle, hoides teie andmeid kohapeal, kasutades analüüsiks manuseid ja vektoriseerimist ning käivitades protsesse teie keskkonnas. OpenAI ei kasuta klientide poolt nende API kaudu esitatud andmeid mudelite koolitamiseks või teenuste täiustamiseks.

Oma keskkonna seadistamine

Looge uus Pythoni virtuaalne keskkond. See tagab teegi versioonide konfliktide puudumise. Seejärel käivitage vajalike teekide installimiseks järgmine terminalikäsk.

pip install langchain openai tiktoken faiss-cpu pypdf

Siin on jaotus selle kohta, kuidas te iga teeki kasutate.

  • LangChain: kasutate seda tekstitöötluse ja -analüüsi keeleahelate loomiseks ja haldamiseks. See pakub mooduleid dokumentide laadimiseks, teksti poolitamiseks, manustamiseks ja vektorsalvestuseks.
  • OpenAI: kasutate seda päringute käitamiseks ja keelemudelist tulemuste saamiseks.
  • tiktoken: kasutate seda antud tekstis olevate märkide (tekstiühikute) arvu loendamiseks. Selle eesmärk on jälgida žetoonide arvu, kui suhtlete OpenAI API-ga, mis võtab tasu vastavalt teie kasutatavate žetoonide arvule.
  • FAISS: kasutate seda vektormälu loomiseks ja haldamiseks, võimaldades sarnaste vektorite kiiret hankimist nende manustuste põhjal.
  • PyPDF: see teek eraldab PDF-failidest teksti. See aitab laadida PDF-faile ja ekstraheerib nende teksti edasiseks töötlemiseks.

Kui kõik teegid on installitud, on teie keskkond nüüd valmis.

OpenAI API võtme hankimine

Kui esitate taotlusi OpenAI API-le, peate taotluse osana lisama API võtme. See võti võimaldab API pakkujal kontrollida, kas päringud pärinevad seaduslikust allikast ja kas teil on selle funktsioonidele juurdepääsuks vajalikud õigused.

OpenAI API võtme hankimiseks jätkake jaotisega OpenAI platvorm.

Seejärel klõpsake oma konto profiili all paremas ülanurgas nuppu Vaadake API võtmeid. The API võtmed leht ilmub.

Klõpsake nuppu Loo uus saladusvõti nuppu. Nimetage oma võti ja klõpsake nuppu Looge uus salajane võti. OpenAI genereerib teie API-võtme, mille peaksite kopeerima ja hoidma kuskil turvalises kohas. Turvakaalutlustel ei saa te seda oma OpenAI konto kaudu uuesti vaadata. Kui kaotate selle salajase võtme, peate looma uue.

Täielik lähtekood on saadaval a GitHubi hoidla.

Nõutavate teekide importimine

Virtuaalsesse keskkonda installitud teekide kasutamiseks peate need importima.

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

Pange tähele, et impordite sõltuvusteegid LangChainist. See võimaldab kasutada LangChaini raamistiku spetsiifilisi funktsioone.

Dokumendi laadimine analüüsiks

Alustage muutuja loomisega, mis sisaldab teie API-võtit. Kasutate seda muutujat hiljem koodis autentimiseks.

# Hardcoded API key
openai_api_key = "Your API key"

Kui kavatsete oma koodi kolmandate osapooltega jagada, ei ole soovitatav oma API-võtit kõvasti kodeerida. Tootmiskoodi puhul, mida kavatsete levitada, kasutage selle asemel keskkonnamuutujat.

Järgmisena looge funktsioon, mis laadib dokumendi. Funktsioon peaks laadima PDF- või tekstifaili. Kui dokument ei ole kumbki, peaks funktsioon tõstma 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")

Pärast dokumentide laadimist looge a CharacterTextSplitter. See jaotur jagab laaditud dokumendid tähemärkide alusel väiksemateks tükkideks.

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

return text_splitter.split_documents(documents=documents)

Dokumendi poolitamine tagab, et tükid on hallatava suurusega ja on endiselt seotud mõne kattuva kontekstiga. See on kasulik selliste ülesannete puhul nagu tekstianalüüs ja teabeotsing.

Dokumendi päringu esitamine

Üleslaaditud dokumendist ülevaate saamiseks vajate viisi. Selleks looge funktsioon, mis võtab a päring string ja a retriiver sisendiks. Seejärel loob see a RetrievalQA näiteks kasutades retriiver ja OpenAI keelemudeli eksemplar.

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)

See funktsioon kasutab loodud kvaliteedikontrolli eksemplari päringu käivitamiseks ja tulemuse printimiseks.

Põhifunktsiooni loomine

Põhifunktsioon juhib programmi üldist voogu. See võtab kasutaja sisestatud dokumendi failinime ja laadib selle dokumendi. Seejärel looge an OpenAIEembeddings näiteks manustamiseks ja konstrueerimiseks a vektorpood laetud dokumentide ja manused. Salvestage see vektorihoidla kohalikku faili.

Järgmisena laadige kohalikust failist püsiv vektorsalvestus. Seejärel sisestage tsükkel, kuhu kasutaja saab päringuid sisestada. The peamine funktsioon edastab need päringud päring_pdf funktsioon koos püsiva vektorpoe retriiveriga. Silmus jätkub, kuni kasutaja sisestab "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")

Manustused püüavad sõnade vahelisi semantilisi seoseid. Vektorid on vorm, milles saate tekstiosi esitada.

See kood teisendab dokumendis olevad tekstiandmed vektoriteks, kasutades poolt loodud manuseid OpenAIEembeddings. Seejärel indekseerib see need vektorid kasutades FAISS, sarnaste vektorite tõhusaks otsimiseks ja võrdlemiseks. See võimaldab üleslaaditud dokumenti analüüsida.

Lõpuks kasutage __nimi__ == "__main__" konstruktsioon põhifunktsiooni kutsumiseks, kui kasutaja käivitab programmi iseseisvalt:

if __name__ == "__main__":
main()

See rakendus on käsurearakendus. Laiendusena saate kasutage rakendusele veebiliidese lisamiseks Streamlit.

Dokumendianalüüsi tegemine

Dokumendianalüüsi tegemiseks salvestage dokument, mida soovite analüüsida, projektiga samasse kausta ja seejärel käivitage programm. See küsib analüüsitava dokumendi nime. Sisestage selle täisnimi ja seejärel sisestage analüüsitava programmi päringud.

Allolev ekraanipilt näitab PDF-i analüüsimise tulemusi.

Järgmine väljund näitab lähtekoodi sisaldava tekstifaili analüüsimise tulemusi.

Veenduge, et analüüsitavad failid oleksid kas PDF- või tekstivormingus. Kui teie dokumendid on muus vormingus, saate seda teha teisendada need veebitööriistade abil PDF-vormingusse.

Suurte keelemudelite taga oleva tehnoloogia mõistmine

LangChain lihtsustab suurte keelemudelite abil rakenduste loomist. See tähendab ka, et see võtab kokku kulisside taga toimuva. Et mõista täpselt, kuidas loodava rakendus töötab, peaksite tutvuma suurte keelemudelite taga oleva tehnoloogiaga.