একটি পিডিএফ ফাইলের সাথে চ্যাট করুন

এই কোডল্যাব দেখায় কিভাবে একটি কথোপকথনমূলক অ্যাপ্লিকেশন তৈরি করা যায় যা ব্যবহারকারীদের প্রাকৃতিক ভাষা ব্যবহার করে PDF নথি থেকে তথ্য বের করতে দেয়।

  1. আপনার প্রকল্প সেট আপ করুন
  2. প্রয়োজনীয় নির্ভরতা আমদানি করুন
  3. Genkit এবং ডিফল্ট মডেল কনফিগার করুন
  4. পিডিএফ ফাইলটি লোড এবং পার্স করুন
  5. প্রম্পট সেট আপ করুন
  6. UI প্রয়োগ করুন
  7. চ্যাট লুপ প্রয়োগ করুন
  8. অ্যাপটি চালান

পূর্বশর্ত

কাজ শুরু করার আগে, আপনার এই পূর্বশর্তগুলি সেট আপ করা উচিত:

বাস্তবায়ন পদক্ষেপ

আপনার নির্ভরতা সেট আপ করার পরে, আপনি প্রকল্পটি তৈরি করতে পারেন।

1. আপনার প্রকল্প সেট আপ করুন

  1. আপনার সোর্স কোড ধরে রাখতে একটি ডিরেক্টরি কাঠামো এবং একটি ফাইল তৈরি করুন।

    $ mkdir -p chat-with-a-pdf/src && \
    cd chat-with-a-pdf && \
    touch src/index.ts
    
  2. একটি নতুন TypeScript প্রকল্প শুরু করুন।

    $ npm init -y
    
  3. পিডিএফ-পার্স মডিউল ইনস্টল করুন।

    $ npm i pdf-parse && npm i -D @types/pdf-parse
    
  4. আপনার প্রকল্পে Genkit ব্যবহার করতে নিম্নলিখিত Genkit নির্ভরতাগুলি ইনস্টল করুন:

    $ npm i genkit @genkit-ai/googleai
    
    • genkit Genkit মূল ক্ষমতা প্রদান করে।
    • @genkit-ai/googleai Google AI জেমিনি মডেলগুলিতে অ্যাক্সেস প্রদান করে৷
  5. আপনার মডেল API কী পান এবং কনফিগার করুন

    Gemini API ব্যবহার করতে, যা এই কোডল্যাব ব্যবহার করে, আপনাকে প্রথমে একটি API কী কনফিগার করতে হবে। আপনার যদি ইতিমধ্যে একটি না থাকে তবে Google AI স্টুডিওতে একটি কী তৈরি করুন

    Gemini API একটি উদার বিনামূল্যের স্তর প্রদান করে এবং শুরু করার জন্য ক্রেডিট কার্ডের প্রয়োজন হয় না।

    আপনার API কী তৈরি করার পর, নিম্নলিখিত কমান্ডের সাহায্যে আপনার কী-তে GOOGLE_GENAI_API_KEY এনভায়রনমেন্ট ভেরিয়েবল সেট করুন:

    $ export GOOGLE_GENAI_API_KEY=<your API key>
    

2. প্রয়োজনীয় নির্ভরতা আমদানি করুন

আপনার তৈরি করা index.ts ফাইলটিতে, এই প্রকল্পের জন্য প্রয়োজনীয় নির্ভরতা আমদানি করতে নিম্নলিখিত লাইনগুলি যোগ করুন:

import { gemini20Flash, googleAI } from '@genkit-ai/googleai';
import { genkit } from 'genkit/beta'; // chat is a beta feature
import pdf from 'pdf-parse';
import fs from 'fs';
import { createInterface } from "node:readline/promises";
  • প্রথম লাইনটি @genkit-ai/googleai প্যাকেজ থেকে gemini20Flash মডেল এবং googleAI প্লাগইন আমদানি করে, যা Google-এর জেমিনি মডেলগুলিতে অ্যাক্সেস সক্ষম করে।
  • পরবর্তী দুটি লাইন পিডিএফ ফাইল পার্স করার জন্য pdf-parse লাইব্রেরি এবং ফাইল সিস্টেম অপারেশনের জন্য fs মডিউল আমদানি করে।
  • চূড়ান্ত লাইনটি node:readline/promises মডিউল থেকে createInterface ফাংশন আমদানি করে, যা ব্যবহারকারীর ইন্টারঅ্যাকশনের জন্য একটি কমান্ড-লাইন ইন্টারফেস তৈরি করতে ব্যবহৃত হয়।

3. জেনকিট এবং ডিফল্ট মডেল কনফিগার করুন

Genkit কনফিগার করতে নিম্নলিখিত লাইন যোগ করুন এবং ডিফল্ট মডেল হিসাবে Gemini 2.0 Flash সেট করুন।

const ai = genkit({
  plugins: [googleAI()],
  model: gemini20Flash,
});

তারপরে আপনি কোড এবং ত্রুটি-হ্যান্ডলিং এর জন্য একটি কঙ্কাল যোগ করতে পারেন।

(async () => {
  try {
    // Step 1: get command line arguments

    // Step 2: load PDF file

    // Step 3: construct prompt

    // Step 4: start chat

    // Step 5: chat loop

  } catch (error) {
    console.error("Error parsing PDF or interacting with Genkit:", error);
  }
})(); // <-- don't forget the trailing parentheses to call the function!

4. পিডিএফ লোড এবং পার্স করুন

  1. কমান্ড লাইন থেকে পাস করা PDF ফাইলের নাম পড়তে কোড যোগ করুন।

        // Step 1: get command line arguments
        const filename = process.argv[2];
        if (!filename) {
          console.error("Please provide a filename as a command line argument.");
          process.exit(1);
        }
    
  2. PDF ফাইলের বিষয়বস্তু লোড করতে কোড যোগ করুন।

        // Step 2: load PDF file
        let dataBuffer = fs.readFileSync(filename);
        const { text } = await pdf(dataBuffer);
    

5. প্রম্পট সেট আপ করুন

প্রম্পট সেট আপ করতে কোড যোগ করুন:

    // Step 3: construct prompt
    const prefix = process.argv[3] || "Sample prompt: Answer the user's questions about the contents of this PDF file.";
    const prompt = `
      ${prefix}
      Context:
      ${text}
    `;
  • প্রথম const ঘোষণা একটি ডিফল্ট প্রম্পট সংজ্ঞায়িত করে যদি ব্যবহারকারী কমান্ড লাইন থেকে তাদের নিজস্ব একটিতে পাস না করে।
  • দ্বিতীয় const ঘোষণা মডেলের প্রম্পটে প্রম্পট উপসর্গ এবং PDF ফাইলের সম্পূর্ণ পাঠ্যকে ইন্টারপোলেট করে।

6. UI প্রয়োগ করুন

চ্যাট শুরু করতে এবং UI বাস্তবায়ন করতে নিম্নলিখিত কোড যোগ করুন:

    // Step 4: start chat
    const chat = ai.chat({ system: prompt });
    const readline = createInterface(process.stdin, process.stdout);
    console.log("You're chatting with Gemini. Ctrl-C to quit.\n");

প্রথম const ঘোষণাটি chat পদ্ধতিতে কল করার মাধ্যমে মডেলের সাথে চ্যাট শুরু করে, প্রম্পটটি পাস করে (যাতে PDF ফাইলের সম্পূর্ণ পাঠ্য রয়েছে)। বাকি কোডটি একটি পাঠ্য ইনপুটকে তাৎক্ষণিক করে, তারপর ব্যবহারকারীকে একটি বার্তা প্রদর্শন করে।

7. চ্যাট লুপ বাস্তবায়ন করুন

ধাপ 5 এর অধীনে, ব্যবহারকারীর ইনপুট পেতে কোড যোগ করুন এবং chat.send ব্যবহার করে মডেলটিতে সেই ইনপুটটি পাঠান। ব্যবহারকারী CTRL + C প্রেস না করা পর্যন্ত অ্যাপের এই অংশটি লুপ হয়।

    // Step 5: chat loop
    while (true) {
      const userInput = await readline.question("> ");
      const { text } = await chat.send(userInput);
      console.log(text);
    }

8. অ্যাপটি চালান

অ্যাপটি চালানোর জন্য, আপনার প্রকল্পের রুট ফোল্ডারে টার্মিনাল খুলুন, তারপর নিম্নলিখিত কমান্ডটি চালান:

npx tsx src/index.ts path/to/some.pdf

তারপর আপনি PDF ফাইলের সাথে চ্যাটিং শুরু করতে পারেন।