RAG_test_1 / app.py
la04's picture
Update app.py
56daa17 verified
raw
history blame
1.97 kB
import os
import PyPDF2
from langchain.embeddings import HuggingFaceEmbeddings
from langchain.vectorstores import FAISS
from langchain.chains import RetrievalQA
from langchain.document_loaders import TextLoader
from langchain.prompts import PromptTemplate
from langchain.llms import OpenAI
from langchain.text_splitter import RecursiveCharacterTextSplitter
# Funktion zum Extrahieren von Text aus PDF
def extract_text_from_pdf(pdf_path):
with open(pdf_path, 'rb') as file:
reader = PyPDF2.PdfReader(file)
text = ""
for page in reader.pages:
text += page.extract_text()
return text
# Funktion zum Erstellen von Embeddings und Indexierung
def create_embeddings_and_index(text):
# Text in kleinere Teile aufteilen
text_splitter = RecursiveCharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
texts = text_splitter.split_text(text)
# Embeddings erzeugen
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
# Indexierung mit FAISS
db = FAISS.from_texts(texts, embeddings)
return db
# Funktion für die Frage-Antwort-Pipeline
def answer_question(db, question):
qa_chain = RetrievalQA.from_chain_type(llm=OpenAI(), retriever=db.as_retriever())
response = qa_chain.run(question)
return response
# Beispiel für die Nutzung
def main():
# Dokument-Pfad
pdf_path = 'path_to_your_pdf_document.pdf'
# PDF extrahieren
text = extract_text_from_pdf(pdf_path)
print(f"Text aus dem Dokument extrahiert: {text[:500]}...") # Nur ersten 500 Zeichen anzeigen
# Embeddings erstellen und Index erstellen
db = create_embeddings_and_index(text)
print("Embeddings und Index erfolgreich erstellt.")
# Frage stellen
question = "Was ist das Ziel dieses Dokuments?"
answer = answer_question(db, question)
print(f"Antwort auf die Frage '{question}': {answer}")
if __name__ == "__main__":
main()