Met een kleine hoeveelheid code en enkele handige bibliotheken kunt u deze krachtige tool voor documentanalyse bouwen.

Het extraheren van inzichten uit documenten en gegevens is cruciaal bij het nemen van weloverwogen beslissingen. Er ontstaan ​​echter privacyproblemen bij de omgang met gevoelige informatie. Met LangChain, in combinatie met de OpenAI API, kunt u uw lokale documenten analyseren zonder dat u ze online hoeft te uploaden.

Ze bereiken dit door uw gegevens lokaal te houden, gebruik te maken van inbedding en vectorisatie voor analyse, en door processen binnen uw omgeving uit te voeren. OpenAI gebruikt geen gegevens die klanten via hun API indienen om hun modellen te trainen of hun diensten te verbeteren.

Uw omgeving instellen

Maak een nieuwe virtuele Python-omgeving. Dit zorgt ervoor dat er geen conflicten met de bibliotheekversie optreden. Voer vervolgens de volgende terminalopdracht uit om de vereiste bibliotheken te installeren.

pip install langchain openai tiktoken faiss-cpu pypdf
instagram viewer

Hier volgt een overzicht van hoe u elke bibliotheek gaat gebruiken:

  • LangChain: Je gebruikt het voor het creëren en beheren van taalketens voor tekstverwerking en -analyse. Het biedt modules voor het laden van documenten, het splitsen van tekst, insluitingen en vectoropslag.
  • Open AI: u gebruikt het voor het uitvoeren van query's en het verkrijgen van resultaten uit een taalmodel.
  • tiktoken: Je gebruikt het om het aantal tokens (teksteenheden) in een bepaalde tekst te tellen. Dit is om het aantal tokens bij te houden tijdens de interactie met de OpenAI API, die kosten in rekening brengt op basis van het aantal tokens dat u gebruikt.
  • FAISS: U zult het gebruiken om een ​​vectorarchief te creëren en te beheren, waardoor u snel vergelijkbare vectoren kunt ophalen op basis van hun inbedding.
  • PyPDF: deze bibliotheek haalt tekst uit pdf's. Het helpt bij het laden van PDF-bestanden en extraheert de tekst voor verdere verwerking.

Nadat alle bibliotheken zijn geïnstalleerd, is uw omgeving nu gereed.

Een OpenAI API-sleutel verkrijgen

Wanneer u verzoeken indient bij de OpenAI API, moet u een API-sleutel opnemen als onderdeel van het verzoek. Met deze sleutel kan de API-provider verifiëren dat de verzoeken afkomstig zijn van een legitieme bron en dat u over de benodigde machtigingen beschikt om toegang te krijgen tot de functies ervan.

Om een ​​OpenAI API-sleutel te verkrijgen, gaat u naar de OpenAI-platform.

Klik vervolgens rechtsboven onder het profiel van uw account op Bekijk API-sleutels. De API-sleutels pagina zal verschijnen.

Klik op de Creëer een nieuw geheimsleutel knop. Geef uw sleutel een naam en klik op Maak een nieuwe geheime sleutel. OpenAI genereert uw API-sleutel die u moet kopiëren en op een veilige plaats moet bewaren. Om veiligheidsredenen kunt u deze niet opnieuw bekijken via uw OpenAI-account. Als u deze geheime sleutel kwijtraakt, moet u een nieuwe genereren.

De volledige broncode is beschikbaar in een GitHub-opslagplaats.

De vereiste bibliotheken importeren

Om de bibliotheken die in uw virtuele omgeving zijn geïnstalleerd te kunnen gebruiken, moet u deze importeren.

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

Merk op dat u de afhankelijkheidsbibliotheken uit LangChain importeert. Hierdoor kunt u specifieke functies van het LangChain-framework gebruiken.

Het document laden voor analyse

Begin met het maken van een variabele die uw API-sleutel bevat. U gebruikt deze variabele later in de code voor authenticatie.

# Hardcoded API key
openai_api_key = "Your API key"

Het wordt niet aanbevolen om uw API-sleutel hard te coderen als u van plan bent uw code met derden te delen. Voor productiecode die u wilt distribueren: gebruik in plaats daarvan een omgevingsvariabele.

Maak vervolgens een functie die een document laadt. De functie moet een PDF of een tekstbestand laden. Als het document geen van beide is, moet de functie a verhogen Waardefout.

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

Nadat u de documenten hebt geladen, maakt u een CharacterTextSplitter. Deze splitter splitst de geladen documenten in kleinere stukken op basis van tekens.

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

return text_splitter.split_documents(documents=documents)

Het splitsen van het document zorgt ervoor dat de delen een beheersbare omvang hebben en nog steeds verbonden zijn met een overlappende context. Dit is handig voor taken zoals tekstanalyse en het ophalen van informatie.

Het document opvragen

U hebt een manier nodig om het geüploade document te doorzoeken om er inzichten uit te halen. Om dit te doen, maakt u een functie waaraan a moet doorgegeven worden vraag koord en een terugvinder als invoer. Er wordt dan een OphalenQA bijvoorbeeld met behulp van de terugvinder en een exemplaar van het OpenAI-taalmodel.

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)

Deze functie gebruikt het gemaakte QA-exemplaar om de query uit te voeren en het resultaat af te drukken.

Het creëren van de hoofdfunctie

De hoofdfunctie regelt de algehele programmastroom. Er is gebruikersinvoer nodig voor de bestandsnaam van een document en het laden van dat document. Maak dan een OpenAIE-inbedding voorbeeld voor inbedding en constructie a vector winkel op basis van de geladen documenten en inbedding. Sla dit vectorarchief op in een lokaal bestand.

Laad vervolgens het persistente vectorarchief vanuit het lokale bestand. Voer vervolgens een lus in waar de gebruiker vragen kan invoeren. De voornaamst functie geeft deze query's door aan de vraag_pdf functioneren samen met de retriever van de persistente vectoropslag. De lus gaat door totdat de gebruiker "exit" invoert.

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

Inbedding legt semantische relaties tussen woorden vast. Vectoren zijn een vorm waarin je stukjes tekst kunt weergeven.

Deze code converteert de tekstgegevens in het document naar vectoren met behulp van de inbedding die is gegenereerd door OpenAIE-inbedding. Vervolgens indexeert het deze vectoren met behulp van FAISS, voor het efficiënt ophalen en vergelijken van vergelijkbare vectoren. Dit maakt de analyse van het geüploade document mogelijk.

Gebruik ten slotte de __name__ == "__main__" constructie om de hoofdfunctie aan te roepen als een gebruiker het programma standalone uitvoert:

if __name__ == "__main__":
main()

Deze app is een opdrachtregeltoepassing. Als verlengstuk kan dat gebruik Streamlit om een ​​webinterface aan de app toe te voegen.

Documentanalyse uitvoeren

Om documentanalyse uit te voeren, slaat u het document dat u wilt analyseren op in dezelfde map als uw project en voert u vervolgens het programma uit. Er wordt gevraagd naar de naam van het document dat u wilt analyseren. Voer de volledige naam in en voer vervolgens zoekopdrachten in die het programma moet analyseren.

De onderstaande schermafbeelding toont de resultaten van het analyseren van een PDF.

De volgende uitvoer toont de resultaten van het analyseren van een tekstbestand met broncode.

Zorg ervoor dat de bestanden die u wilt analyseren de PDF- of tekstindeling hebben. Als uw documenten een ander formaat hebben, kunt u dat doen converteer ze naar PDF-formaat met behulp van online tools.

Inzicht in de technologie achter grote taalmodellen

LangChain vereenvoudigt het maken van applicaties met behulp van grote taalmodellen. Dit betekent ook dat het abstraheert wat er achter de schermen gebeurt. Om precies te begrijpen hoe de applicatie die u maakt, werkt, moet u vertrouwd raken met de technologie achter grote taalmodellen.