PDF फ़ाइल के साथ चैट करना

इस कोडलैब में, Genkit का इस्तेमाल करके ऐसा ऐप्लिकेशन बनाने का तरीका बताया गया है जिसकी मदद से PDF फ़ाइल के साथ चैट की जा सकती है.

ज़रूरी शर्तें

इस कोडलैब में यह माना गया है कि आपको Node.js की मदद से ऐप्लिकेशन बनाने के बारे में पता है. इस कोडलैब को पूरा करने के लिए, पक्का करें कि आपका डेवलपमेंट एनवायरमेंट इन ज़रूरी शर्तों को पूरा करता हो:

  • Node.js v20+
  • npm

नया प्रोजेक्ट बनाएं

  1. एक नया खाली फ़ोल्डर बनाएं.

    mkdir chat-with-a-pdf
    cd chat-with-a-pdf
    
  2. नया TypeScript प्रोजेक्ट शुरू करें.

    npm init -y
    

Genkit इंस्टॉल करना

अपने प्रोजेक्ट में Genkit का इस्तेमाल करने के लिए, Genkit की ये डिपेंडेंसी इंस्टॉल करें:

  • genkit, Genkit की मुख्य सुविधाएं उपलब्ध कराता है.
  • @genkit-ai/googleai, Google के एआई Gemini मॉडल का ऐक्सेस देता है.
npm install genkit @genkit-ai/googleai

अपने मॉडल की एपीआई पासकोड कॉन्फ़िगर करना

इस गाइड में, हम आपको Gemini API का इस्तेमाल करने का तरीका बताएंगे. यह एपीआई, बिना किसी शुल्क के इस्तेमाल किया जा सकता है. साथ ही, इसका इस्तेमाल शुरू करने के लिए क्रेडिट कार्ड की ज़रूरत नहीं होती. Gemini API का इस्तेमाल करने के लिए, आपके पास एपीआई पासकोड होना चाहिए. अगर आपके पास पहले से कोई पासकोड नहीं है, तो Google AI Studio में जाकर पासकोड बनाएं.

Google AI Studio से एपीआई पासकोड पाना

एपीआई कुंजी बनाने के बाद, नीचे दिए गए निर्देश का इस्तेमाल करके, अपनी कुंजी में GOOGLE_GENAI_API_KEY एनवायरमेंट वैरिएबल सेट करें:

export GOOGLE_GENAI_API_KEY=<your API key>

ध्यान दें: इस ट्यूटोरियल में, AI Studio के Gemini API का इस्तेमाल किया गया है. हालांकि, Genkit कई तरह के मॉडल उपलब्ध कराता है. इनमें ये शामिल हैं: * Vertex AI का Gemini * Vertex AI Model Garden की मदद से, Anthropic के Claude 3 मॉडल और Llama 3.1 * Ollama की मदद से ओपन सोर्स मॉडल * OpenAI और Cohere जैसे कम्यूनिटी के साथ काम करने वाले प्रोवाइडर.

Genkit को इंपोर्ट और शुरू करना

  1. नया फ़ोल्डर src बनाएं और उसमें एक नई फ़ाइल index.ts बनाएं. Genkit और Google के एआई प्लग इन को इंपोर्ट करने के लिए, ये लाइनें जोड़ें.

    import {gemini15Flash, googleAI} from '@genkit-ai/googleai';
    import {genkit} from 'genkit';
    
  2. Genkit को कॉन्फ़िगर करने और Gemini 1.5 Flash को डिफ़ॉल्ट मॉडल के तौर पर सेट करने के लिए, ये लाइनें जोड़ें.

    const ai = genkit({
      plugins: [googleAI()],
      model: gemini15Flash,
    });
    
  3. अपने ऐप्लिकेशन का मुख्य हिस्सा जोड़ें.

    (async () => {
      try {
        // 1: get command line arguments
        // 2: load PDF file
        // 3: construct prompt
        // 4: start chat
        // 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!
    

PDF फ़ाइल को लोड और पार्स करना

इस चरण में, आपको पीडीएफ़ फ़ाइल को लोड और पार्स करने के लिए कोड लिखना होगा.

  1. pdf-parse इंस्टॉल करें.

    npm i pdf-parse
    
  2. PDF लाइब्रेरी को अपने ऐप्लिकेशन में इंपोर्ट करें.

    import pdf from 'pdf-parse';
    import fs from 'fs';
    
  3. कमांड लाइन से पास की गई PDF फ़ाइल का नाम पढ़ें.

      // 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);
      }
    
  4. PDF फ़ाइल का कॉन्टेंट लोड करें.

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

प्रॉम्प्ट सेट अप करना

प्रॉम्प्ट सेट अप करने के लिए, यह तरीका अपनाएं.

  1. उपयोगकर्ता को कमांड लाइन की मदद से, पसंद के मुताबिक प्रॉम्प्ट देने की अनुमति दें. अगर वे कोई प्रॉम्प्ट नहीं देते, तो डिफ़ॉल्ट प्रॉम्प्ट का इस्तेमाल करें.

    const prefix = process.argv[3] || "Answer the user's questions about the contents of this PDF file.";
    
  2. मॉडल के लिए प्रॉम्प्ट में, प्रॉम्प्ट प्रीफ़िक्स और PDF फ़ाइल का पूरा टेक्स्ट डालें.

        const prompt = `
          ${prefix}
          Context:
          ${data.text}
        `
    

चैट लूप लागू करना

  1. chat तरीके को कॉल करके, प्रॉम्प्ट (जिसमें PDF फ़ाइल का पूरा टेक्स्ट शामिल होता है) पास करके, मॉडल के साथ चैट शुरू करें.

    const chat = ai.chat({ system: prompt })
    
  2. createInterface इंपोर्ट करें; इससे आपको टेक्स्ट-आधारित यूज़र इंटरफ़ेस (यूआई) बनाने में मदद मिलेगी.

    import {createInterface} from "node:readline/promises";
    
  3. टेक्स्ट इनपुट को इंस्टैंशिएट करें. इसके बाद, उपयोगकर्ता को एक मैसेज दिखाएं.

        const readline = createInterface(process.stdin, process.stdout);
        console.log("You're chatting with Gemini. Ctrl-C to quit.\n");
    
  4. उपयोगकर्ता का इनपुट पढ़ें. इसके बाद, chat.send का इस्तेमाल करके उसे मॉडल को भेजें. ऐप्लिकेशन का यह हिस्सा तब तक लूप में चलता रहेगा, जब तक उपयोगकर्ता CTRL + C नहीं दबा देता.

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

ऐप्लिकेशन चलाना

अब अपने टर्मिनल से ऐप्लिकेशन चलाया जा सकता है. अपने प्रोजेक्ट के रूट फ़ोल्डर में टर्मिनल खोलें. इसके बाद, यह निर्देश चलाएं:

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

इसके बाद, PDF फ़ाइल के साथ चैट की जा सकती है.