S malým množstvím kódu a několika užitečnými knihovnami můžete vytvořit tento výkonný nástroj pro analýzu dokumentů.

Získávání poznatků z dokumentů a dat je zásadní pro přijímání informovaných rozhodnutí. Při práci s citlivými informacemi však vznikají obavy o soukromí. LangChain v kombinaci s OpenAI API vám umožňuje analyzovat vaše místní dokumenty, aniž byste je museli nahrávat online.

Dosahují toho udržováním vašich dat lokálně, pomocí vkládání a vektorizace pro analýzu a prováděním procesů ve vašem prostředí. OpenAI nepoužívá data odeslaná zákazníky prostřednictvím jejich API k trénování jejich modelů nebo zlepšování jejich služeb.

Nastavení vašeho prostředí

Vytvořte nové virtuální prostředí Pythonu. Tím zajistíte, že nedojde ke konfliktům verzí knihovny. Poté spusťte následující příkaz terminálu a nainstalujte požadované knihovny.

pip install langchain openai tiktoken faiss-cpu pypdf

Zde je rozpis toho, jak budete jednotlivé knihovny používat:

  • LangChain: Budete jej používat pro vytváření a správu lingvistických řetězců pro zpracování a analýzu textu. Poskytne moduly pro načítání dokumentů, dělení textu, vkládání a ukládání vektorů.
    instagram viewer
  • OpenAI: Budete jej používat pro spouštění dotazů a získávání výsledků z jazykového modelu.
  • tiktoken: Budete jej používat k počítání počtu tokenů (jednotek textu) v daném textu. Toto slouží ke sledování počtu tokenů při interakci s OpenAI API, které se účtuje na základě počtu tokenů, které používáte.
  • FAISS: Budete jej používat k vytváření a správě úložiště vektorů, což umožňuje rychlé vyhledávání podobných vektorů na základě jejich vložení.
  • PyPDF: Tato knihovna extrahuje text z PDF. Pomáhá načítat soubory PDF a extrahuje jejich text pro další zpracování.

Po instalaci všech knihoven je nyní vaše prostředí připraveno.

Získání klíče OpenAI API

Když odesíláte požadavky na OpenAI API, musíte jako součást požadavku zahrnout klíč API. Tento klíč umožňuje poskytovateli API ověřit, že požadavky pocházejí z legitimního zdroje a že máte potřebná oprávnění pro přístup k jeho funkcím.

Chcete-li získat klíč API OpenAI, přejděte na stránku Platforma OpenAI.

Poté pod profilem vašeho účtu vpravo nahoře klikněte na Zobrazit klíče API. The API klíče zobrazí se stránka.

Klikněte na Vytvořte nové tajemstvíklíč knoflík. Pojmenujte svůj klíč a klikněte na něj Vytvořte nový tajný klíč. OpenAI vygeneruje váš klíč API, který byste měli zkopírovat a uložit někde v bezpečí. Z bezpečnostních důvodů jej nebudete moci znovu zobrazit prostřednictvím účtu OpenAI. Pokud tento tajný klíč ztratíte, budete si muset vygenerovat nový.

Úplný zdrojový kód je k dispozici v a úložiště GitHub.

Import požadovaných knihoven

Abyste mohli používat knihovny nainstalované ve vašem virtuálním prostředí, musíte je importovat.

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šimněte si, že importujete knihovny závislostí z LangChain. To vám umožňuje používat specifické funkce rámce LangChain.

Načítání dokumentu pro analýzu

Začněte vytvořením proměnné, která obsahuje váš klíč API. Tuto proměnnou použijete později v kódu pro autentizaci.

# Hardcoded API key
openai_api_key = "Your API key"

Pokud plánujete sdílet svůj kód s třetími stranami, nedoporučuje se napevno kódovat váš klíč API. Pro produkční kód, který chcete distribuovat, místo toho použijte proměnnou prostředí.

Dále vytvořte funkci, která načte dokument. Funkce by měla načíst soubor PDF nebo textový soubor. Pokud dokument není ani jeden, funkce by měla vyvolat 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čtení dokumentů vytvořte a CharacterTextSplitter. Tento rozdělovač rozdělí načtené dokumenty na menší části podle znaků.

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

return text_splitter.split_documents(documents=documents)

Rozdělení dokumentu zajistí, že části budou mít spravovatelnou velikost a budou stále spojeny s určitým překrývajícím se kontextem. To je užitečné pro úkoly, jako je analýza textu a vyhledávání informací.

Dotaz na dokument

Potřebujete způsob, jak se dotazovat na nahraný dokument, abyste z něj získali statistiky. Chcete-li tak učinit, vytvořte funkci, která přebírá a dotaz řetězec a retriever jako vstup. Poté vytvoří a RetrievalQA instance pomocí retriever a instance 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)

Tato funkce používá vytvořenou instanci QA ke spuštění dotazu a vytištění výsledku.

Vytvoření hlavní funkce

Hlavní funkce bude řídit celkový tok programu. Bude vyžadovat zadání uživatele pro název souboru dokumentu a načte tento dokument. Poté vytvořte OpenAIEmbeddings například pro vložení a konstrukci a vektorový obchod na základě načtených dokumentů a vložení. Uložte toto úložiště vektorů do místního souboru.

Dále načtěte trvalé úložiště vektorů z místního souboru. Poté zadejte smyčku, do které může uživatel zadávat dotazy. The hlavní funkce předává tyto dotazy do dotaz_pdf fungovat spolu s retrieverem trvalého vektorového úložiště. Smyčka bude pokračovat, dokud uživatel 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žení zachycuje sémantické vztahy mezi slovy. Vektory jsou formou, ve které můžete reprezentovat části textu.

Tento kód převádí textová data v dokumentu na vektory pomocí vložení generovaných pomocí OpenAIEmbeddings. Tyto vektory pak indexuje pomocí FAISSpro efektivní vyhledávání a porovnání podobných vektorů. To umožňuje analýzu nahraného dokumentu.

Nakonec použijte konstrukt __name__ == "__main__". pro volání hlavní funkce, pokud uživatel spustí program samostatně:

if __name__ == "__main__":
main()

Tato aplikace je aplikace příkazového řádku. Jako rozšíření můžete použijte Streamlit k přidání webového rozhraní do aplikace.

Provádění analýzy dokumentů

Chcete-li provést analýzu dokumentu, uložte dokument, který chcete analyzovat, do stejné složky jako váš projekt, a poté spusťte program. Zobrazí se dotaz na název dokumentu, který chcete analyzovat. Zadejte jeho celý název a poté zadejte dotazy, které má program analyzovat.

Níže uvedený snímek obrazovky ukazuje výsledky analýzy PDF.

Následující výstup ukazuje výsledky analýzy textového souboru obsahujícího zdrojový kód.

Ujistěte se, že soubory, které chcete analyzovat, jsou buď ve formátu PDF, nebo v textovém formátu. Pokud jsou vaše dokumenty v jiných formátech, můžete převést je do formátu PDF pomocí online nástrojů.

Pochopení technologie velkých jazykových modelů

LangChain zjednodušuje tvorbu aplikací pomocí velkých jazykových modelů. To také znamená, že abstrahuje to, co se děje v zákulisí. Abyste přesně pochopili, jak aplikace, kterou vytváříte, funguje, měli byste se seznámit s technologií velkých jazykových modelů.