Spaces:
Sleeping
Sleeping
File size: 2,850 Bytes
fbe3ac4 c106446 692eafb fbe3ac4 b2bbc8f 6378bf1 b2bbc8f 6378bf1 b2bbc8f bd2041d b2bbc8f fbe3ac4 b2bbc8f fbe3ac4 b2bbc8f fbe3ac4 b2bbc8f fbe3ac4 6378bf1 b2bbc8f bd2041d b2bbc8f 692eafb b2bbc8f c106446 b2bbc8f 24d5864 b62f55c b2bbc8f ee9ba92 24d5864 692eafb ee9ba92 692eafb ee9ba92 b2bbc8f fbe3ac4 ee9ba92 b2bbc8f fbe3ac4 ee9ba92 fbe3ac4 692eafb |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
import gradio as gr
import os
from langchain.vectorstores import Chroma
from langchain_community.document_loaders import PyPDFLoader
from langchain_community.embeddings import HuggingFaceEmbeddings
from langchain.chains import RetrievalQA
from langchain.prompts import PromptTemplate
import fitz # PyMuPDF für das Extrahieren von Text aus PDFs
# Funktion zum Extrahieren von Text aus einer PDF
def extract_text_from_pdf(pdf_path):
doc = fitz.open(pdf_path) # Öffnen der PDF-Datei
text_pages = []
# Durch alle Seiten der PDF iterieren und Text extrahieren
for page_num in range(doc.page_count):
page = doc.load_page(page_num)
text = page.get_text("text") # Extrahiert den Text als "plain text"
text_pages.append(text)
return text_pages
# Frage-Antwort-Funktion mit Langchain und Chroma
def process_pdf_and_query(pdf_path, question):
# Extrahiere Text aus der PDF
extracted_text = extract_text_from_pdf(pdf_path)
# Dokumente für Langchain laden
documents = [{"text": page_text} for page_text in extracted_text]
# Embedding und Vektorstore vorbereiten
embeddings = HuggingFaceEmbeddings(model_name="sentence-transformers/all-MiniLM-L6-v2")
vectordb = Chroma.from_documents(documents, embeddings)
retriever = vectordb.as_retriever()
prompt_template = "Beantworte die folgende Frage basierend auf dem Dokument: {context}\nFrage: {question}\nAntwort:"
prompt = PromptTemplate(input_variables=["context", "question"], template=prompt_template)
# Erstellung der RetrievalQA-Kette
qa_chain = RetrievalQA.from_chain_type(llm=None, retriever=retriever, chain_type_kwargs={"prompt": prompt})
response = qa_chain.run(input_documents=documents, question=question)
return response
# Gradio Antwortfunktion
def chatbot_response(pdf, question):
# Speichern der hochgeladenen PDF-Datei
pdf_path = "/tmp/uploaded_pdf.pdf"
pdf_content = pdf.read() # Hole den Inhalt der PDF als Byte-Stream
# Speichern des Byte-Streams in einer Datei
with open(pdf_path, "wb") as f:
f.write(pdf_content)
# Frage beantworten basierend auf der extrahierten PDF und der Frage
answer = process_pdf_and_query(pdf_path, question)
# Temporäre Datei löschen
os.remove(pdf_path)
return answer
# Gradio Interface erstellen
pdf_input = gr.File(label="PDF-Datei hochladen")
question_input = gr.Textbox(label="Frage eingeben")
response_output = gr.Textbox(label="Antwort")
# Gradio Interface starten
interface = gr.Interface(
fn=chatbot_response,
inputs=[pdf_input, question_input],
outputs=response_output,
title="RAG Chatbot mit PDF-Unterstützung",
description="Lade eine PDF-Datei hoch und stelle Fragen zu ihrem Inhalt."
)
if __name__ == "__main__":
interface.launch()
|