পাইথন প্রজেক্টস ও লাইব্রেরি

Agent 13: PDF Research Agent

১. এই এজেন্ট কী কাজ করবে?

আপনার কাছে যদি ১০০ পেজের একটি বই বা রিসার্চ পেপার (PDF) থাকে, তবে পুরোটা পড়া অনেক কষ্টের। এই এজেন্ট আপনার দেওয়া PDF ফাইলটি পড়বে। এরপর আপনি চ্যাটিংয়ের মতো করে এজেন্টকে প্রশ্ন করতে পারবেন (যেমন: "এই বইয়ে গ্লোবাল ওয়ার্মিং নিয়ে কী বলা হয়েছে?")। এজেন্ট পুরো বই ঘেঁটে শুধু আপনার কাঙ্ক্ষিত উত্তরটি বের করে দেবে। একে RAG (Retrieval-Augmented Generation) বলা হয়।

২. কী কী টুলস এবং লাইব্রেরি লাগবে?

  • PyPDF2: PDF থেকে টেক্সট পড়ার জন্য।
  • google-generativeai: টেক্সট বুঝে উত্তর দেওয়ার জন্য।

৩. এ টু জেড কোড (A to Z Code)

টার্মিনালে pip install PyPDF2 রান করে নিন। এরপর কোডটি agent_pdf_researcher.py নামে সেভ করুন।

import PyPDF2
import google.generativeai as genai

class PDFResearchAgent:
    def __init__(self, api_key):
        genai.configure(api_key=api_key)
        self.model = genai.GenerativeModel('gemini-1.5-flash')
        self.pdf_content = ""

    def read_pdf(self, file_path):
        print(f"[Agent] '{file_path}' পড়া হচ্ছে...")
        try:
            with open(file_path, 'rb') as file:
                reader = PyPDF2.PdfReader(file)
                text = ""
                # সবগুলো পেজ থেকে টেক্সট বের করা
                for page in reader.pages:
                    text += page.extract_text() + "\n"
                
                self.pdf_content = text
                print(f"[Agent] PDF সফলভাবে লোড হয়েছে! (মোট অক্ষর: {len(text)})")
        except Exception as e:
            print(f"[Agent] PDF পড়তে সমস্যা হয়েছে: {e}")

    def ask_question(self, question):
        if not self.pdf_content:
            print("[Agent] আগে একটি PDF ফাইল লোড করুন।")
            return

        print("[Agent] বই ঘেঁটে উত্তর বের করা হচ্ছে...")
        
        # মেমোরি বাঁচানোর জন্য আমরা পুরো টেক্সট পাঠাচ্ছি (বড় বই হলে Chunking করতে হয়)
        prompt = f"""
        Here is the content of a document:
        ---
        {self.pdf_content[:20000]} # ডেমোর জন্য প্রথম 20000 ক্যারেক্টার
        ---
        Based on the document above, answer the following question clearly:
        Question: {question}
        """

        response = self.model.generate_content(prompt)
        print("\n💡 উত্তর:")
        print(response.text)
        print("-" * 50)

if __name__ == "__main__":
    API_KEY = "YOUR_GEMINI_API_KEY_HERE"
    agent = PDFResearchAgent(API_KEY)
    
    # আপনার পিসিতে থাকা একটি PDF ফাইলের নাম দিন
    pdf_file = "sample.pdf" 
    agent.read_pdf(pdf_file)
    
    # ইনফিনিট লুপে প্রশ্ন করার সুযোগ
    while True:
        user_q = input("\nPDF নিয়ে আপনার প্রশ্ন করুন (অথবা 'exit' লিখুন): ")
        if user_q.lower() == 'exit':
            break
        agent.ask_question(user_q)

৪. কীভাবে এটি আরও অ্যাডভান্সড করবেন?

  • যদি PDF টি অনেক বড় (যেমন: ৫০০ পেজ) হয়, তবে পুরো টেক্সট একসাথে API তে পাঠানো যায় না। তখন LangChain এবং Vector Database (ChromaDB/FAISS) ব্যবহার করে টেক্সটগুলোকে ছোট ছোট টুকরো (Chunks) করে সেভ করতে হয়। রিয়েল লাইফ প্রজেক্টে এভাবেই কাজ করা হয়।