Turėdami nedidelį kodo kiekį ir keletą naudingų bibliotekų, galite sukurti šį galingą dokumentų analizės įrankį.

Įžvalgos iš dokumentų ir duomenų yra labai svarbios priimant pagrįstus sprendimus. Tačiau susirūpinimas dėl privatumo kyla dirbant su neskelbtina informacija. „LangChain“ kartu su „OpenAI“ API leidžia analizuoti vietinius dokumentus, nereikia jų įkelti internetu.

Jie tai pasiekia laikydami jūsų duomenis vietoje, naudodami įterpimus ir vektorizavimą analizei ir vykdydami procesus jūsų aplinkoje. OpenAI nenaudoja klientų per savo API pateiktų duomenų, kad mokytų savo modelius ar pagerintų paslaugas.

Aplinkos nustatymas

Sukurkite naują Python virtualią aplinką. Tai užtikrins, kad nėra bibliotekos versijų konfliktų. Tada paleiskite šią terminalo komandą, kad įdiegtumėte reikiamas bibliotekas.

pip install langchain openai tiktoken faiss-cpu pypdf

Štai kaip naudosite kiekvieną biblioteką:

  • LangChain: jį naudosite kurdami ir tvarkydami teksto apdorojimo ir analizės kalbines grandines. Jame bus moduliai, skirti dokumentų įkėlimui, teksto skaidymui, įterpimui ir vektoriniam saugojimui.
  • instagram viewer
  • OpenAI: naudosite jį užklausoms vykdyti ir rezultatams iš kalbos modelio gauti.
  • tiktoken: naudosite jį norėdami suskaičiuoti žetonų (teksto vienetų) skaičių pateiktame tekste. Tai skirta sekti žetonų skaičių sąveikaujant su OpenAI API, kuri apmokestinama pagal naudojamų žetonų skaičių.
  • FAISS: jį naudosite kurdami ir tvarkydami vektorių saugyklą, leidžiančią greitai gauti panašius vektorius pagal jų įterpimus.
  • PyPDF: ši biblioteka ištraukia tekstą iš PDF. Tai padeda įkelti PDF failus ir ištraukia jų tekstą tolesniam apdorojimui.

Įdiegę visas bibliotekas, jūsų aplinka yra paruošta.

Kaip gauti OpenAI API raktą

Kai teikiate užklausas OpenAI API, kaip užklausos dalį turite įtraukti API raktą. Šis raktas leidžia API teikėjui patikrinti, ar užklausos gaunamos iš teisėto šaltinio ir ar turite reikiamus leidimus pasiekti jo funkcijas.

Norėdami gauti OpenAI API raktą, pereikite prie OpenAI platforma.

Tada viršutiniame dešiniajame kampe po paskyros profiliu spustelėkite Peržiūrėkite API raktus. The API raktai atsiras puslapis.

Spustelėkite ant Sukurkite naują paslaptįRaktas mygtuką. Pavadinkite savo raktą ir spustelėkite Sukurkite naują slaptą raktą. OpenAI sugeneruos jūsų API raktą, kurį turėtumėte nukopijuoti ir laikyti saugioje vietoje. Saugumo sumetimais nebegalėsite jo peržiūrėti naudodami savo OpenAI paskyrą. Jei prarasite šį slaptą raktą, turėsite sugeneruoti naują.

Visą šaltinio kodą rasite a GitHub saugykla.

Reikalingų bibliotekų importavimas

Kad galėtumėte naudoti virtualioje aplinkoje įdiegtas bibliotekas, turite jas importuoti.

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

Atkreipkite dėmesį, kad importuojate priklausomybės bibliotekas iš „LangChain“. Tai leidžia naudoti specifines „LangChain“ sistemos funkcijas.

Įkeliamas dokumentas analizei

Pradėkite kurdami kintamąjį, kuriame yra jūsų API raktas. Šį kintamąjį vėliau naudosite autentifikavimo kode.

# Hardcoded API key
openai_api_key = "Your API key"

Nerekomenduojama koduoti savo API rakto, jei planuojate bendrinti savo kodą su trečiosiomis šalimis. Jei norite platinti gamybos kodą, vietoj to naudokite aplinkos kintamąjį.

Tada sukurkite funkciją, kuri įkelia dokumentą. Funkcija turėtų įkelti PDF arba tekstinį failą. Jei dokumentas nėra nė vienas, funkcija turėtų pakelti 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")

Įkėlę dokumentus sukurkite a CharacterTextSplitter. Šis skirstytuvas suskaidys įkeltus dokumentus į mažesnius gabalus pagal simbolius.

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

return text_splitter.split_documents(documents=documents)

Padalijus dokumentą užtikrinama, kad gabalai būtų valdomo dydžio ir vis dar susieti su tam tikru persidengiančiu kontekstu. Tai naudinga atliekant tokias užduotis kaip teksto analizė ir informacijos paieška.

Užklausa dėl dokumento

Jums reikia būdo, kaip pateikti užklausą dėl įkelto dokumento, kad iš jo gautumėte įžvalgų. Norėdami tai padaryti, sukurkite funkciją, kuriai reikia a užklausą styga ir a retriveris kaip įvestis. Tada jis sukuria a RetrievalQA pavyzdys naudojant retriveris ir OpenAI kalbos modelio pavyzdys.

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)

Ši funkcija naudoja sukurtą QA egzempliorių užklausai vykdyti ir rezultatui spausdinti.

Pagrindinės funkcijos kūrimas

Pagrindinė funkcija valdys bendrą programos eigą. Vartotojas turės įvesti dokumento failo pavadinimą ir įkelti tą dokumentą. Tada sukurkite an OpenAIEmbeddings įterpimo ir konstrukcijos pavyzdys vektorių parduotuvė remiantis įkeltais dokumentais ir įterpimai. Išsaugokite šią vektorių saugyklą vietiniame faile.

Tada įkelkite išsaugotą vektorių saugyklą iš vietinio failo. Tada įveskite kilpą, kurioje vartotojas gali įvesti užklausas. The pagrindinis funkcija perduoda šias užklausas užklausa_pdf funkcija kartu su išsaugoto vektorių saugyklos retriveriu. Ciklas tęsis tol, kol vartotojas įves „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")

Įterpimai fiksuoja semantinius ryšius tarp žodžių. Vektoriai yra forma, kuria galite pavaizduoti teksto dalis.

Šis kodas konvertuoja dokumento tekstinius duomenis į vektorius, naudodamas sugeneruotus įterpimus OpenAIEmbeddings. Tada jis indeksuoja šiuos vektorius naudodamas FAISS, efektyviam panašių vektorių paieškai ir palyginimui. Tai leidžia analizuoti įkeltą dokumentą.

Galiausiai naudokite __name__ == "__main__" konstrukcija Norėdami iškviesti pagrindinę funkciją, jei vartotojas vykdo programą atskirai:

if __name__ == "__main__":
main()

Ši programa yra komandinės eilutės programa. Kaip pratęsimą galite naudokite „Streamlit“, kad pridėtumėte žiniatinklio sąsają prie programos.

Dokumentų analizės atlikimas

Norėdami atlikti dokumentų analizę, išsaugokite dokumentą, kurį norite analizuoti, tame pačiame aplanke kaip ir jūsų projektas, tada paleiskite programą. Jis paprašys dokumento, kurį norite analizuoti, pavadinimo. Įveskite visą jos pavadinimą, tada įveskite užklausas, skirtas programai analizuoti.

Toliau pateiktoje ekrano kopijoje rodomi PDF analizės rezultatai.

Šiame išvestyje rodomi tekstinio failo, kuriame yra šaltinio kodas, analizės rezultatai.

Įsitikinkite, kad failai, kuriuos norite analizuoti, yra PDF arba teksto formatu. Jei jūsų dokumentai yra kitokio formato, galite konvertuoti juos į PDF formatą naudodami internetinius įrankius.

Didelių kalbų modelių technologijos supratimas

„LangChain“ supaprastina programų kūrimą naudojant didelius kalbų modelius. Tai taip pat reiškia, kad ji abstrahuoja tai, kas vyksta užkulisiuose. Norėdami tiksliai suprasti, kaip veikia jūsų kuriama programa, turėtumėte susipažinti su didelių kalbų modelių technologija.