Kis mennyiségű kóddal és néhány hasznos könyvtárral elkészítheti ezt a hatékony dokumentumelemző eszközt.

A dokumentumokból és adatokból való betekintés döntő fontosságú a megalapozott döntések meghozatalában. Az érzékeny információk kezelésekor azonban felmerülnek az adatvédelmi aggályok. A LangChain az OpenAI API-val kombinálva lehetővé teszi a helyi dokumentumok elemzését anélkül, hogy azokat online kellene feltöltenie.

Ezt úgy érik el, hogy az adatokat helyben tartják, beágyazásokat és vektorizálást használnak az elemzéshez, és folyamatokat hajtanak végre a környezetben. Az OpenAI nem használja fel az ügyfelek által az API-jukon keresztül benyújtott adatokat modelljeik betanítására vagy szolgáltatásaik fejlesztésére.

Környezetének beállítása

Hozzon létre egy új Python virtuális környezetet. Ez biztosítja, hogy ne legyenek könyvtárverziós ütközések. Ezután futtassa a következő terminálparancsot a szükséges könyvtárak telepítéséhez.

pip install langchain openai tiktoken faiss-cpu pypdf

Íme egy részlet az egyes könyvtárak használatáról:

instagram viewer
  • LangChain: Szövegfeldolgozáshoz és -elemzéshez szükséges nyelvi láncok létrehozására és kezelésére fogja használni. Modulokat fog biztosítani a dokumentumok betöltéséhez, szövegfelosztáshoz, beágyazáshoz és vektortároláshoz.
  • OpenAI: Lekérdezések futtatására és nyelvi modellből származó eredmények lekérésére fogja használni.
  • tiktoken: Az adott szövegben lévő tokenek (szövegegységek) számának megszámlálására fogja használni. Ez a tokenek számának nyomon követésére szolgál az OpenAI API-val való interakció során, amely a használt tokenek száma alapján számít fel.
  • FAISS: Vektortár létrehozására és kezelésére fogja használni, amely lehetővé teszi a hasonló vektorok gyors visszakeresését a beágyazásuk alapján.
  • PyPDF: Ez a könyvtár szöveget von ki PDF-ekből. Segít betölteni a PDF-fájlokat, és kivonja a szövegüket további feldolgozás céljából.

Az összes könyvtár telepítése után a környezet készen áll.

OpenAI API-kulcs beszerzése

Amikor kérelmeket küld az OpenAI API-hoz, egy API-kulcsot kell tartalmaznia a kérelem részeként. Ez a kulcs lehetővé teszi az API-szolgáltató számára annak ellenőrzését, hogy a kérések legitim forrásból származnak-e, és hogy Ön rendelkezik-e a funkcióihoz való hozzáféréshez szükséges engedélyekkel.

OpenAI API-kulcs beszerzéséhez folytassa a következővel: OpenAI platform.

Ezután a fiók profilja alatt a jobb felső sarokban kattintson a gombra API-kulcsok megtekintése. A API kulcsok oldal fog megjelenni.

Kattintson a Hozzon létre új titkotkulcs gomb. Nevezze el a kulcsot, és kattintson rá Hozzon létre új titkos kulcsot. Az OpenAI előállítja az API-kulcsot, amelyet másoljon és tartson biztonságos helyen. Biztonsági okokból nem tekintheti meg újra OpenAI-fiókján keresztül. Ha elveszíti ezt a titkos kulcsot, újat kell létrehoznia.

A teljes forráskód elérhető a GitHub adattár.

A szükséges könyvtárak importálása

A virtuális környezetben telepített könyvtárak használatához importálnia kell azokat.

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

Figyelje meg, hogy a függőségi könyvtárakat a LangChainből importálja. Ez lehetővé teszi a LangChain keretrendszer speciális funkcióinak használatát.

A dokumentum betöltése elemzés céljából

Kezdje egy olyan változó létrehozásával, amely tartalmazza az API-kulcsot. Ezt a változót később a kódban fogja használni a hitelesítéshez.

# Hardcoded API key
openai_api_key = "Your API key"

Ha azt tervezi, hogy megosztja a kódot harmadik felekkel, nem javasolt az API-kulcs kemény kódolása. A terjeszteni kívánt gyártási kódhoz használjon helyette környezeti változót.

Ezután hozzon létre egy függvényt, amely betölt egy dokumentumot. A függvénynek PDF vagy szöveges fájlt kell betöltenie. Ha a dokumentum egyik sem, a függvénynek emelnie kell 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")

A dokumentumok betöltése után hozzon létre a CharacterTextSplitter. Ez az elosztó a betöltött dokumentumokat karakterek alapján kisebb darabokra osztja.

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

return text_splitter.split_documents(documents=documents)

A dokumentum felosztása biztosítja, hogy a darabok kezelhető méretűek legyenek, és továbbra is kapcsolódjanak bizonyos átfedő kontextushoz. Ez olyan feladatoknál hasznos, mint a szövegelemzés és az információkeresés.

A dokumentum lekérdezése

Szüksége van egy módra a feltöltött dokumentum lekérdezésére, hogy betekintést nyerjen belőle. Ehhez hozzon létre egy függvényt, amely a lekérdezés húr és a vizsla bemenetként. Ezután létrehozza a RetrievalQA például a vizsla és az OpenAI nyelvi modell egy példánya.

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)

Ez a függvény a létrehozott minőségbiztosítási példányt használja a lekérdezés futtatására és az eredmény kinyomtatására.

A fő funkció létrehozása

A fő funkció szabályozza a teljes programfolyamatot. A felhasználó beírja a dokumentum fájlnevét, és betölti a dokumentumot. Ezután hozzon létre egy OpenAIEembeddings példa a beágyazásokhoz és a konstrukcióhoz a vektor bolt a betöltött dokumentumok alapján és beágyazások. Mentse ezt a vektortárat egy helyi fájlba.

Ezután töltse be a megmaradt vektortárolót a helyi fájlból. Ezután írjon be egy ciklust, ahol a felhasználó lekérdezéseket írhat be. A fő- függvény továbbítja ezeket a lekérdezéseket a query_pdf függvényt a megmaradt vektortároló retrieverével együtt. A ciklus addig folytatódik, amíg a felhasználó be nem írja az "exit" parancsot.

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

A beágyazások a szavak közötti szemantikai kapcsolatokat rögzítik. A vektorok olyan formák, amelyekben szövegrészeket ábrázolhat.

Ez a kód a dokumentumban lévő szöveges adatokat vektorokká alakítja át a által generált beágyazások segítségével OpenAIEembeddings. Ezután indexeli ezeket a vektorokat a segítségével FAISS, hasonló vektorok hatékony visszakereséséhez és összehasonlításához. Ez teszi lehetővé a feltöltött dokumentum elemzését.

Végül használd a __name__ == "__main__" konstrukció a fő függvény meghívásához, ha a felhasználó önállóan futtatja a programot:

if __name__ == "__main__":
main()

Ez az alkalmazás egy parancssori alkalmazás. Kiterjesztésként megteheti használja a Streamlitet webes felület hozzáadásához az alkalmazáshoz.

Dokumentumelemzés végrehajtása

A dokumentumelemzés végrehajtásához tárolja az elemezni kívánt dokumentumot a projekttel azonos mappában, majd futtassa a programot. Kérni fogja az elemezni kívánt dokumentum nevét. Írja be a teljes nevét, majd írja be a lekérdezéseket a program elemzéséhez.

Az alábbi képernyőkép a PDF elemzésének eredményeit mutatja.

A következő kimenet egy forráskódot tartalmazó szövegfájl elemzésének eredményeit mutatja be.

Győződjön meg arról, hogy az elemezni kívánt fájlok PDF vagy szöveges formátumban vannak. Ha dokumentumai más formátumúak, megteheti konvertálja azokat PDF formátumba online eszközök segítségével.

A nagy nyelvi modellek mögött rejlő technológia megértése

A LangChain leegyszerűsíti a nagy nyelvi modelleket használó alkalmazások létrehozását. Ez azt is jelenti, hogy elvonatkoztatja a színfalak mögött zajló eseményeket. A létrehozott alkalmazás működésének pontos megértéséhez meg kell ismerkednie a nagy nyelvi modellek mögött rejlő technológiával.