S malým množstvom kódu a niekoľkými užitočnými knižnicami môžete vytvoriť tento výkonný nástroj na analýzu dokumentov.
Získavanie prehľadov z dokumentov a údajov je rozhodujúce pri prijímaní informovaných rozhodnutí. Pri zaobchádzaní s citlivými informáciami však vznikajú obavy o súkromie. LangChain v kombinácii s OpenAI API vám umožňuje analyzovať vaše lokálne dokumenty bez toho, aby ste ich museli nahrávať online.
Dosahujú to tak, že vaše údaje uchovávajú lokálne, využívajú vkladanie a vektorizáciu na analýzu a vykonávajú procesy vo vašom prostredí. OpenAI nepoužíva údaje odoslané zákazníkmi prostredníctvom ich API na trénovanie ich modelov alebo zlepšovanie ich služieb.
Nastavenie vášho prostredia
Vytvorte nové virtuálne prostredie Pythonu. Tým sa zabezpečí, že nedochádza ku konfliktom verzií knižnice. Potom spustite nasledujúci príkaz terminálu a nainštalujte požadované knižnice.
pip install langchain openai tiktoken faiss-cpu pypdf
Tu je rozpis toho, ako budete používať jednotlivé knižnice:
- LangChain: Budete ho používať na vytváranie a správu lingvistických reťazcov na spracovanie a analýzu textu. Poskytne moduly na načítanie dokumentov, delenie textu, vkladanie a ukladanie vektorov.
- OpenAI: Budete ho používať na spúšťanie dopytov a získavanie výsledkov z jazykového modelu.
- tiktoken: Použijete ho na spočítanie počtu tokenov (jednotiek textu) v danom texte. Toto slúži na sledovanie počtu tokenov pri interakcii s OpenAI API, ktoré sa účtuje na základe počtu tokenov, ktoré používate.
- FAISS: Budete ho používať na vytváranie a správu vektorového úložiska, čo umožňuje rýchle vyhľadávanie podobných vektorov na základe ich vloženia.
- PyPDF: Táto knižnica extrahuje text z PDF. Pomáha načítať súbory PDF a extrahuje ich text na ďalšie spracovanie.
Po nainštalovaní všetkých knižníc je vaše prostredie pripravené.
Získanie kľúča API OpenAI
Keď zadávate požiadavky na OpenAI API, musíte do požiadavky zahrnúť kľúč API. Tento kľúč umožňuje poskytovateľovi API overiť, že požiadavky pochádzajú z legitímneho zdroja a že máte potrebné povolenia na prístup k jeho funkciám.
Ak chcete získať kľúč OpenAI API, prejdite na stránku Platforma OpenAI.
Potom pod profilom svojho účtu v pravom hornom rohu kliknite na Zobraziť kľúče API. The API kľúče zobrazí sa stránka.
Klikni na Vytvorte nové tajomstvokľúč tlačidlo. Pomenujte svoj kľúč a kliknite naň Vytvorte nový tajný kľúč. OpenAI vygeneruje váš kľúč API, ktorý by ste mali skopírovať a uložiť na bezpečné miesto. Z bezpečnostných dôvodov ho nebudete môcť znova zobraziť prostredníctvom svojho účtu OpenAI. Ak tento tajný kľúč stratíte, budete si musieť vygenerovať nový.
Úplný zdrojový kód je dostupný v a úložisko GitHub.
Import požadovaných knižníc
Aby ste mohli používať knižnice nainštalované vo vašom virtuálnom prostredí, musíte ich importovať.
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
Všimnite si, že importujete knižnice závislostí z LangChain. To vám umožňuje využívať špecifické funkcie rámca LangChain.
Načítavanie dokumentu na analýzu
Začnite vytvorením premennej, ktorá obsahuje váš kľúč API. Túto premennú použijete neskôr v kóde na autentifikáciu.
# Hardcoded API key
openai_api_key = "Your API key"
Neodporúča sa napevno kódovať váš kľúč API, ak plánujete zdieľať svoj kód s tretími stranami. Pre produkčný kód, ktorý chcete distribuovať, namiesto toho použite premennú prostredia.
Ďalej vytvorte funkciu, ktorá načíta dokument. Funkcia by mala načítať PDF alebo textový súbor. Ak dokument nie je ani jeden, funkcia by mala vyvolať 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")
Po načítaní dokumentov vytvorte a CharacterTextSplitter. Tento rozdeľovač rozdelí načítané dokumenty na menšie časti na základe znakov.
text_splitter = CharacterTextSplitter(chunk_size=1000,
chunk_overlap=30, separator="\n")return text_splitter.split_documents(documents=documents)
Rozdelenie dokumentu zaisťuje, že časti majú spravovateľnú veľkosť a sú stále spojené s určitým prekrývajúcim sa kontextom. Je to užitočné pri úlohách, ako je analýza textu a vyhľadávanie informácií.
Dopyt na dokument
Potrebujete spôsob dotazovania nahraného dokumentu, aby ste z neho získali prehľad. Ak to chcete urobiť, vytvorte funkciu, ktorá preberá a dopyt reťazec a a retriever ako vstup. Potom vytvorí a RetrievalQA napríklad pomocou retriever a inštancia jazykového modelu 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)
Táto funkcia používa vytvorenú inštanciu QA na spustenie dotazu a vytlačenie výsledku.
Vytvorenie hlavnej funkcie
Hlavná funkcia bude riadiť celkový tok programu. Pre názov súboru dokumentu bude potrebný vstup používateľa a načíta tento dokument. Potom vytvorte OpenAIEmbeddings napríklad pre zabudovanie a konštrukciu a vektorový obchod na základe načítaných dokumentov a vsadenia. Uložte tento vektorový obchod do lokálneho súboru.
Ďalej načítajte trvalý vektorový sklad z lokálneho súboru. Potom zadajte slučku, do ktorej môže používateľ zadávať dotazy. The Hlavná funkcia odovzdá tieto dotazy do dotaz_pdf fungovať spolu s retrieverom trvalého vektorového úložiska. Cyklus bude pokračovať, kým používateľ nezadá "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")
Vloženie zachytáva sémantické vzťahy medzi slovami. Vektory sú formou, v ktorej môžete reprezentovať časti textu.
Tento kód konvertuje textové údaje v dokumente na vektory pomocou vložených prvkov vygenerovaných pomocou OpenAIEmbeddings. Tieto vektory potom indexuje pomocou FAISSpre efektívne vyhľadávanie a porovnanie podobných vektorov. To umožňuje analýzu nahraného dokumentu.
Nakoniec použite konštrukt __name__ == "__main__". na zavolanie hlavnej funkcie, ak používateľ spustí program samostatne:
if __name__ == "__main__":
main()
Táto aplikácia je aplikácia príkazového riadku. Ako rozšírenie môžete použite Streamlit na pridanie webového rozhrania do aplikácie.
Vykonávanie analýzy dokumentov
Ak chcete vykonať analýzu dokumentu, uložte dokument, ktorý chcete analyzovať, do rovnakého priečinka ako váš projekt, a potom spustite program. Požiada o názov dokumentu, ktorý chcete analyzovať. Zadajte jeho celý názov a potom zadajte dopyty, ktoré má program analyzovať.
Snímka obrazovky nižšie zobrazuje výsledky analýzy súboru PDF.
Nasledujúci výstup zobrazuje výsledky analýzy textového súboru obsahujúceho zdrojový kód.
Uistite sa, že súbory, ktoré chcete analyzovať, sú vo formáte PDF alebo textovom formáte. Ak sú vaše dokumenty v iných formátoch, môžete previesť ich do formátu PDF pomocou online nástrojov.
Pochopenie technológie v pozadí veľkých jazykových modelov
LangChain zjednodušuje tvorbu aplikácií pomocou veľkých jazykových modelov. To tiež znamená, že abstrahuje to, čo sa deje v zákulisí. Aby ste presne pochopili, ako aplikácia, ktorú vytvárate, funguje, mali by ste sa oboznámiť s technológiou veľkých jazykových modelov.