Mit einer kleinen Menge Code und einigen nützlichen Bibliotheken können Sie dieses leistungsstarke Dokumentanalysetool erstellen.
Das Extrahieren von Erkenntnissen aus Dokumenten und Daten ist für fundierte Entscheidungen von entscheidender Bedeutung. Allerdings bestehen beim Umgang mit sensiblen Informationen Datenschutzbedenken. LangChain ermöglicht Ihnen in Kombination mit der OpenAI-API die Analyse Ihrer lokalen Dokumente, ohne sie online hochladen zu müssen.
Dies erreichen sie, indem sie Ihre Daten lokal speichern, Einbettungen und Vektorisierung zur Analyse verwenden und Prozesse in Ihrer Umgebung ausführen. OpenAI verwendet keine von Kunden über ihre API übermittelten Daten, um ihre Modelle zu trainieren oder ihre Dienste zu verbessern.
Einrichten Ihrer Umgebung
Erstellen Sie eine neue virtuelle Python-Umgebung. Dadurch wird sichergestellt, dass es keine Bibliotheksversionskonflikte gibt. Führen Sie dann den folgenden Terminalbefehl aus, um die erforderlichen Bibliotheken zu installieren.
pip install langchain openai tiktoken faiss-cpu pypdf
Hier ist eine Aufschlüsselung, wie Sie die einzelnen Bibliotheken nutzen werden:
- LangChain: Sie verwenden es zum Erstellen und Verwalten von Sprachketten für die Textverarbeitung und -analyse. Es stellt Module zum Laden von Dokumenten, zum Aufteilen von Text, zum Einbetten und zur Vektorspeicherung bereit.
- OpenAI: Sie werden es zum Ausführen von Abfragen und zum Erhalten von Ergebnissen aus einem Sprachmodell verwenden.
- Tiktoken: Sie verwenden es, um die Anzahl der Token (Texteinheiten) in einem bestimmten Text zu zählen. Dies dient dazu, die Token-Anzahl bei der Interaktion mit der OpenAI-API zu verfolgen, deren Gebühren auf der Grundlage der Anzahl der von Ihnen verwendeten Token basieren.
- FAISS: Sie werden damit einen Vektorspeicher erstellen und verwalten, der das schnelle Abrufen ähnlicher Vektoren basierend auf ihren Einbettungen ermöglicht.
- PyPDF: Diese Bibliothek extrahiert Text aus PDFs. Es hilft beim Laden von PDF-Dateien und extrahiert deren Text zur weiteren Verarbeitung.
Nachdem alle Bibliotheken installiert sind, ist Ihre Umgebung nun bereit.
Erhalten eines OpenAI-API-Schlüssels
Wenn Sie Anfragen an die OpenAI-API stellen, müssen Sie einen API-Schlüssel als Teil der Anfrage angeben. Mit diesem Schlüssel kann der API-Anbieter überprüfen, ob die Anfragen von einer legitimen Quelle stammen und ob Sie über die erforderlichen Berechtigungen für den Zugriff auf seine Funktionen verfügen.
Um einen OpenAI-API-Schlüssel zu erhalten, fahren Sie mit fort OpenAI-Plattform.
Klicken Sie dann oben rechts unter dem Profil Ihres Kontos auf API-Schlüssel anzeigen. Der API-Schlüssel Seite erscheint.
Klick auf das Neues Geheimnis erstellenSchlüssel Taste. Benennen Sie Ihren Schlüssel und klicken Sie auf Erstellen Sie einen neuen geheimen Schlüssel. OpenAI generiert Ihren API-Schlüssel, den Sie kopieren und an einem sicheren Ort aufbewahren sollten. Aus Sicherheitsgründen können Sie es nicht mehr über Ihr OpenAI-Konto anzeigen. Wenn Sie diesen geheimen Schlüssel verlieren, müssen Sie einen neuen generieren.
Der vollständige Quellcode ist in a verfügbar GitHub-Repository.
Importieren der erforderlichen Bibliotheken
Um die in Ihrer virtuellen Umgebung installierten Bibliotheken nutzen zu können, müssen Sie diese importieren.
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
Beachten Sie, dass Sie die Abhängigkeitsbibliotheken aus LangChain importieren. Dadurch können Sie bestimmte Funktionen des LangChain-Frameworks nutzen.
Laden des Dokuments zur Analyse
Erstellen Sie zunächst eine Variable, die Ihren API-Schlüssel enthält. Sie werden diese Variable später im Code zur Authentifizierung verwenden.
# Hardcoded API key
openai_api_key = "Your API key"
Es wird nicht empfohlen, Ihren API-Schlüssel hart zu codieren, wenn Sie planen, Ihren Code an Dritte weiterzugeben. Für Produktionscode, den Sie verteilen möchten, Verwenden Sie stattdessen eine Umgebungsvariable.
Erstellen Sie als Nächstes eine Funktion, die ein Dokument lädt. Die Funktion sollte eine PDF- oder eine Textdatei laden. Wenn das Dokument keines von beiden ist, sollte die Funktion a auslösen Wertfehler.
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")
Erstellen Sie nach dem Laden der Dokumente eine CharacterTextSplitter. Dieser Splitter teilt die geladenen Dokumente basierend auf den Zeichen in kleinere Teile auf.
text_splitter = CharacterTextSplitter(chunk_size=1000,
chunk_overlap=30, separator="\n")return text_splitter.split_documents(documents=documents)
Durch die Aufteilung des Dokuments wird sichergestellt, dass die Blöcke eine überschaubare Größe haben und dennoch mit einem überlappenden Kontext verbunden sind. Dies ist nützlich für Aufgaben wie Textanalyse und Informationsabruf.
Abfrage des Dokuments
Sie benötigen eine Möglichkeit, das hochgeladene Dokument abzufragen, um daraus Erkenntnisse abzuleiten. Erstellen Sie dazu eine Funktion, die a benötigt Abfrage Saite und a Retriever als Eingabe. Es entsteht dann ein RetrievalQA Instanz mit der Retriever und eine Instanz des OpenAI-Sprachmodells.
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)
Diese Funktion verwendet die erstellte QA-Instanz, um die Abfrage auszuführen und das Ergebnis zu drucken.
Erstellen der Hauptfunktion
Die Hauptfunktion steuert den gesamten Programmablauf. Es wird eine Benutzereingabe für den Dateinamen eines Dokuments entgegennehmen und das Dokument laden. Dann erstellen Sie eine OpenAIEmbeddings Instanz für Einbettungen und konstruiere a Vektorspeicher basierend auf den geladenen Dokumenten und Einbettungen. Speichern Sie diesen Vektorspeicher in einer lokalen Datei.
Laden Sie als Nächstes den persistenten Vektorspeicher aus der lokalen Datei. Geben Sie dann eine Schleife ein, in der der Benutzer Abfragen eingeben kann. Der hauptsächlich Die Funktion übergibt diese Abfragen an die query_pdf Funktion zusammen mit dem Retriever des persistenten Vektorspeichers. Die Schleife wird fortgesetzt, bis der Benutzer „exit“ eingibt.
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")
Einbettungen erfassen semantische Beziehungen zwischen Wörtern. Vektoren sind eine Form, in der Sie Textteile darstellen können.
Dieser Code wandelt die Textdaten im Dokument mithilfe der von generierten Einbettungen in Vektoren um OpenAIEmbeddings. Anschließend werden diese Vektoren mithilfe von indiziert FAISS, zum effizienten Abrufen und Vergleichen ähnlicher Vektoren. Dies ermöglicht die Analyse des hochgeladenen Dokuments.
Endlich verwenden das __name__ == "__main__"-Konstrukt So rufen Sie die Hauptfunktion auf, wenn ein Benutzer das Programm eigenständig ausführt:
if __name__ == "__main__":
main()
Diese App ist eine Befehlszeilenanwendung. Als Erweiterung können Sie Verwenden Sie Streamlit, um der App eine Weboberfläche hinzuzufügen.
Durchführen einer Dokumentenanalyse
Um eine Dokumentanalyse durchzuführen, speichern Sie das Dokument, das Sie analysieren möchten, im selben Ordner wie Ihr Projekt und führen Sie dann das Programm aus. Sie werden nach dem Namen des Dokuments gefragt, das Sie analysieren möchten. Geben Sie den vollständigen Namen ein und geben Sie dann Abfragen ein, die das Programm analysieren soll.
Der Screenshot unten zeigt die Ergebnisse der Analyse eines PDF.
Die folgende Ausgabe zeigt die Ergebnisse der Analyse einer Textdatei, die Quellcode enthält.
Stellen Sie sicher, dass die Dateien, die Sie analysieren möchten, entweder im PDF- oder Textformat vorliegen. Wenn Ihre Dokumente in anderen Formaten vorliegen, ist dies möglich Konvertieren Sie sie mithilfe von Online-Tools in das PDF-Format.
Die Technologie hinter großen Sprachmodellen verstehen
LangChain vereinfacht die Erstellung von Anwendungen mithilfe großer Sprachmodelle. Das bedeutet auch, dass abstrahiert wird, was sich hinter den Kulissen abspielt. Um genau zu verstehen, wie die von Ihnen erstellte Anwendung funktioniert, sollten Sie sich mit der Technologie hinter großen Sprachmodellen vertraut machen.