Izmantojot nelielu koda daudzumu un dažas noderīgas bibliotēkas, varat izveidot šo jaudīgo dokumentu analīzes rīku.
Ieskatu iegūšana no dokumentiem un datiem ir ļoti svarīga, lai pieņemtu apzinātus lēmumus. Tomēr, strādājot ar sensitīvu informāciju, rodas bažas par privātumu. LangChain kopā ar OpenAI API ļauj analizēt vietējos dokumentus bez nepieciešamības tos augšupielādēt tiešsaistē.
Viņi to panāk, saglabājot jūsu datus lokāli, izmantojot iegulšanu un vektorizāciju analīzei un izpildot procesus jūsu vidē. OpenAI neizmanto datus, ko klienti ir iesnieguši, izmantojot savu API, lai apmācītu savus modeļus vai uzlabotu pakalpojumus.
Jūsu vides iestatīšana
Izveidojiet jaunu Python virtuālo vidi. Tas nodrošinās, ka nav bibliotēkas versiju konfliktu. Pēc tam palaidiet šādu termināļa komandu, lai instalētu vajadzīgās bibliotēkas.
pip install langchain openai tiktoken faiss-cpu pypdf
Tālāk ir sniegts katras bibliotēkas izmantošanas sadalījums.
- LangChain: Jūs to izmantosit, lai izveidotu un pārvaldītu lingvistiskās ķēdes teksta apstrādei un analīzei. Tas nodrošinās moduļus dokumentu ielādei, teksta sadalīšanai, iegulšanai un vektoru glabāšanai.
- OpenAI: jūs to izmantosit, lai izpildītu vaicājumus un iegūtu rezultātus no valodas modeļa.
- tiktoken: jūs to izmantosit, lai saskaitītu marķieru (teksta vienību) skaitu dotajā tekstā. Tas ir paredzēts, lai sekotu līdzi marķieru skaitam, mijiedarbojoties ar OpenAI API, kas iekasē maksu, pamatojoties uz izmantoto marķieru skaitu.
- FAISS: jūs to izmantosit, lai izveidotu un pārvaldītu vektoru krātuvi, ļaujot ātri izgūt līdzīgus vektorus, pamatojoties uz to iegulšanu.
- PyPDF: šī bibliotēka izvelk tekstu no PDF failiem. Tas palīdz ielādēt PDF failus un izvilkt to tekstu turpmākai apstrādei.
Kad visas bibliotēkas ir instalētas, jūsu vide tagad ir gatava.
OpenAI API atslēgas iegūšana
Kad veicat pieprasījumus OpenAI API, pieprasījumā ir jāiekļauj API atslēga. Šī atslēga ļauj API nodrošinātājam pārbaudīt, vai pieprasījumi nāk no likumīga avota un vai jums ir nepieciešamās atļaujas, lai piekļūtu tā funkcijām.
Lai iegūtu OpenAI API atslēgu, pārejiet uz OpenAI platforma.
Pēc tam zem sava konta profila augšējā labajā stūrī noklikšķiniet uz Skatīt API atslēgas. The API atslēgas parādīsies lapa.
Noklikšķiniet uz Izveidojiet jaunu noslēpumutaustiņu pogu. Nosauciet savu atslēgu un noklikšķiniet uz Izveidojiet jaunu slepeno atslēgu. OpenAI ģenerēs jūsu API atslēgu, kas jums vajadzētu nokopēt un uzglabāt drošā vietā. Drošības apsvērumu dēļ jūs vairs nevarēsiet to skatīt, izmantojot savu OpenAI kontu. Ja pazaudējat šo slepeno atslēgu, jums būs jāģenerē jauna.
Pilns pirmkods ir pieejams a GitHub repozitorijs.
Nepieciešamo bibliotēku importēšana
Lai varētu izmantot savā virtuālajā vidē instalētās bibliotēkas, tās ir jāimportē.
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
Ņemiet vērā, ka importējat atkarības bibliotēkas no LangChain. Tas ļauj izmantot īpašas LangChain ietvara funkcijas.
Notiek dokumenta ielāde analīzei
Sāciet, izveidojot mainīgo, kurā ir jūsu API atslēga. Šo mainīgo vēlāk izmantosit kodā autentifikācijai.
# Hardcoded API key
openai_api_key = "Your API key"
Nav ieteicams stingri kodēt API atslēgu, ja plānojat koplietot savu kodu ar trešajām pusēm. Ražošanas kodam, kuru vēlaties izplatīt, tā vietā izmantojiet vides mainīgo.
Pēc tam izveidojiet funkciju, kas ielādē dokumentu. Funkcijai jāielādē PDF vai teksta fails. Ja dokuments nav ne viens, ne otrs, funkcijai jāpaaugstina 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ēc dokumentu ielādes izveidojiet a Rakstzīmju teksta sadalītājs. Šis sadalītājs sadalīs ielādētos dokumentus mazākos gabalos, pamatojoties uz rakstzīmēm.
text_splitter = CharacterTextSplitter(chunk_size=1000,
chunk_overlap=30, separator="\n")return text_splitter.split_documents(documents=documents)
Dokumenta sadalīšana nodrošina, ka gabaliem ir pārvaldāms izmērs un tie joprojām ir saistīti ar kādu kontekstu, kas pārklājas. Tas ir noderīgi tādiem uzdevumiem kā teksta analīze un informācijas izguve.
Dokumenta vaicājums
Jums ir nepieciešams veids, kā vaicāt augšupielādētajam dokumentam, lai no tā gūtu ieskatu. Lai to izdarītu, izveidojiet funkciju, kas aizņem a vaicājums virkne un a retrīvers kā ievadi. Pēc tam tas rada a RetrievalQA piemēram, izmantojot retrīvers un OpenAI valodas modeļa gadījums.
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)
Šī funkcija izmanto izveidoto kvalitātes nodrošināšanas gadījumu, lai palaistu vaicājumu un izdrukātu rezultātu.
Galvenās funkcijas izveide
Galvenā funkcija kontrolēs kopējo programmas plūsmu. Tas prasīs lietotāja ievadi dokumenta faila nosaukumam un ielādēs šo dokumentu. Pēc tam izveidojiet an OpenAIEmbeddings piemērs iegulšanai un konstrukcijai a vektoru veikals pamatojoties uz ielādētajiem dokumentiem un iegulšanas. Saglabājiet šo vektoru krātuvi vietējā failā.
Pēc tam ielādējiet saglabāto vektoru krātuvi no vietējā faila. Pēc tam ievadiet cilpu, kurā lietotājs var ievadīt vaicājumus. The galvenais funkcija nodod šos vaicājumus uz vaicājums_pdf funkciju kopā ar pastāvīgo vektoru krātuves retrīveri. Cilpa turpināsies, līdz lietotājs ievadīs "izeju".
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")
Iegulšana tver semantiskās attiecības starp vārdiem. Vektori ir forma, kurā varat attēlot teksta gabalus.
Šis kods pārvērš dokumenta teksta datus vektoros, izmantojot iegulšanu, ko ģenerē OpenAIEmbeddings. Pēc tam tas indeksē šos vektorus, izmantojot FAISS, efektīvai līdzīgu vektoru izguvei un salīdzināšanai. Tas ļauj analizēt augšupielādēto dokumentu.
Visbeidzot, izmantojiet __name__ == "__main__" konstrukcija lai izsauktu galveno funkciju, ja lietotājs programmu palaiž atsevišķi:
if __name__ == "__main__":
main()
Šī lietotne ir komandrindas lietojumprogramma. Kā paplašinājumu jūs varat izmantojiet Streamlit, lai lietotnei pievienotu tīmekļa saskarni.
Dokumentu analīzes veikšana
Lai veiktu dokumentu analīzi, glabājiet analizējamo dokumentu tajā pašā mapē, kurā ir jūsu projekts, un pēc tam palaidiet programmu. Tas prasīs tā dokumenta nosaukumu, kuru vēlaties analizēt. Ievadiet tās pilnu nosaukumu un pēc tam ievadiet vaicājumus, lai programma analizētu.
Tālāk esošajā ekrānuzņēmumā ir parādīti PDF faila analīzes rezultāti.
Sekojošā izvade parāda teksta faila, kas satur avota kodu, analīzes rezultātus.
Pārliecinieties, vai faili, ko vēlaties analizēt, ir PDF vai teksta formātā. Ja jūsu dokumenti ir citos formātos, varat pārvērst tos PDF formātā, izmantojot tiešsaistes rīkus.
Izpratne par tehnoloģiju aiz lieliem valodu modeļiem
LangChain vienkāršo lietojumprogrammu izveidi, izmantojot lielus valodu modeļus. Tas arī nozīmē, ka tas abstrahē aizkulisēs notiekošo. Lai precīzi saprastu, kā darbojas jūsu izveidotā lietojumprogramma, jums vajadzētu iepazīties ar tehnoloģiju, kas ir pamatā lieliem valodu modeļiem.