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

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

  1. अपना प्रोजेक्ट सेट अप करना
  2. ज़रूरी डिपेंडेंसी इंपोर्ट करना
  3. Genkit और डिफ़ॉल्ट मॉडल को कॉन्फ़िगर करना
  4. PDF फ़ाइल को लोड और पार्स करना
  5. प्रॉम्प्ट सेट अप करना
  6. यूज़र इंटरफ़ेस (यूआई) लागू करना
  7. चैट लूप लागू करना
  8. ऐप्लिकेशन चलाना

इस गाइड में, इन सभी टास्क को पूरा करने का तरीका बताया गया है.

डिपेंडेंसी

काम शुरू करने से पहले, आपके पास ये डिपेंडेंसी सेट अप होनी चाहिए:

Tasks

डिपेंडेंसी सेट अप करने के बाद, प्रोजेक्ट को खुद बनाया जा सकता है.

1. अपना प्रोजेक्ट सेट अप करना

  1. अपना सोर्स कोड रखने के लिए, डायरेक्ट्री स्ट्रक्चर और फ़ाइल बनाएं.

    $ mkdir -p chat-with-a-pdf/src && \
    cd chat-with-a-pdf/src && \
    touch index.ts
    
  2. नया TypeScript प्रोजेक्ट शुरू करें.

    $ npm init -y
    
  3. pdf-parse मॉड्यूल इंस्टॉल करें:

    $ npm i pdf-parse
    
  4. अपने प्रोजेक्ट में Genkit का इस्तेमाल करने के लिए, Genkit की ये डिपेंडेंसी इंस्टॉल करें:

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

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

    Gemini API का इस्तेमाल करने के लिए, आपको पहले एपीआई पासकोड कॉन्फ़िगर करना होगा. इस कोडलैब में Gemini API का इस्तेमाल किया गया है. अगर आपके पास पहले से कोई पासकोड नहीं है, तो Google AI Studio में पासकोड बनाएं. Gemini API, बिना किसी शुल्क के इस्तेमाल किया जा सकता है. इसके लिए, क्रेडिट कार्ड की ज़रूरत नहीं होती. एपीआई कुंजी बनाने के बाद, GOOGLE_GENAI_API_KEY` एनवायरमेंट वैरिएबल को अपनी कुंजी में सेट करें. इसके लिए, यह कमांड इस्तेमाल करें:
    $ export GOOGLE_GENAI_API_KEY=<your API key>


ध्यान दें: इस ट्यूटोरियल में, AI Studio के Gemini API का इस्तेमाल किया गया है. हालांकि, Genkit कई तरह के मॉडल उपलब्ध कराता है. इनमें ये शामिल हैं:

2. ज़रूरी डिपेंडेंसी इंपोर्ट करना

आपने जो index.ts फ़ाइल बनाई है उसमें, इस प्रोजेक्ट के लिए ज़रूरी डिपेंडेंसी इंपोर्ट करने के लिए ये लाइनें जोड़ें:

   import { gemini15Flash, googleAI } from '@genkit-ai/googleai';
   import { genkit } from 'genkit';
   import pdf from 'pdf-parse';
   import fs from 'fs';
   import { createInterface } from "node:readline/promises";
  • पहली दो लाइनें, Genkit और Google के एआई प्लग इन को इंपोर्ट करती हैं.
  • दूसरी दो लाइनें, PDF पार्स करने वाले टूल के लिए हैं.
  • पांचवीं लाइन, आपके यूज़र इंटरफ़ेस (यूआई) को लागू करने के लिए है.

3. Genkit और डिफ़ॉल्ट मॉडल को कॉन्फ़िगर करना

Genkit को कॉन्फ़िगर करने और Gemini 1.5 Flash को डिफ़ॉल्ट मॉडल के तौर पर सेट करने के लिए, ये लाइनें जोड़ें.

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

इसके बाद, कोड और गड़बड़ी को मैनेज करने के लिए स्केलेटन जोड़ा जा सकता है.

   (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. PDF फ़ाइल को लोड और पार्स करना

  1. पहले चरण में, कमांड लाइन से पास की गई PDF फ़ाइल का नाम पढ़ने के लिए कोड जोड़ें.

      const filename = process.argv[2];
      if (!filename) {
        console.error("Please provide a filename as a command line argument.");
        process.exit(1);
      }
    
  2. दूसरे चरण में, PDF फ़ाइल का कॉन्टेंट लोड करने के लिए कोड जोड़ें.

      let dataBuffer = fs.readFileSync(filename);
      const { text } = await pdf(dataBuffer);
    

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

तीसरे चरण में, प्रॉम्प्ट सेट अप करने के लिए कोड जोड़ें:

   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. यूज़र इंटरफ़ेस (यूआई) लागू करना

चैट शुरू करने और यूज़र इंटरफ़ेस (यूआई) लागू करने के लिए, चौथे चरण में यह कोड जोड़ें:

   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 तरीके को कॉल करके मॉडल के साथ चैट शुरू करता है. इसमें प्रॉम्प्ट (जिसमें पीडीएफ़ फ़ाइल का पूरा टेक्स्ट शामिल होता है) पास किया जाता है. बाकी कोड, टेक्स्ट इनपुट को इंस्टैंशिएट करता है. इसके बाद, उपयोगकर्ता को एक मैसेज दिखाता है.

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

पांचवें चरण में, उपयोगकर्ता का इनपुट पाने के लिए कोड जोड़ें और chat.send का इस्तेमाल करके, उस इनपुट को मॉडल पर भेजें. ऐप्लिकेशन का यह हिस्सा तब तक लूप में चलता रहता है, जब तक उपयोगकर्ता CTRL + C नहीं दबा देता.

       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 फ़ाइल के साथ चैट की जा सकती है.