File size: 1,472 Bytes
a03b876
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import gradio as gr
import fitz  # PyMuPDF
from langchain.llms import Ollama
from langchain.chains.question_answering import load_qa_chain
from langchain.prompts import PromptTemplate
from langchain.docstore.document import Document

def extract_text_from_pdf(file):
    doc = fitz.open(stream=file.read(), filetype="pdf")
    text = ""
    for page in doc:
        text += page.get_text()
    return text

def answer_question(pdf_file, question):
    if not pdf_file or not question:
        return "Vui lòng tải file PDF và nhập câu hỏi."

    content = extract_text_from_pdf(pdf_file)

    # Khởi tạo model Ollama
    llm = Ollama(model="llama3")  # Bạn có thể dùng 'mistral', 'phi', v.v.

    # Prompt đơn giản
    prompt_template = PromptTemplate.from_template(
        "Trả lời câu hỏi sau dựa trên tài liệu:\n\n{context}\n\nCâu hỏi: {question}"
    )

    chain = load_qa_chain(llm, chain_type="stuff", prompt=prompt_template)

    # LangChain yêu cầu list Document
    docs = [Document(page_content=content)]

    result = chain.run(input_documents=docs, question=question)
    return result

gr.Interface(
    fn=answer_question,
    inputs=[
        gr.File(label="Tải lên PDF"),
        gr.Textbox(label="Câu hỏi về nội dung PDF")
    ],
    outputs="text",
    title="PDF Q&A với Ollama",
    description="Sử dụng mô hình Ollama (như llama3) để trả lời câu hỏi từ file PDF.",
).launch()