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

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

  1. अपना प्रोजेक्ट सेट अप करना
  2. ज़रूरी डिपेंडेंसी इंपोर्ट करना
  3. Genkit और डिफ़ॉल्ट मॉडल कॉन्फ़िगर करना
  4. PDF फ़ाइल को लोड और पार्स करना
  5. प्रॉम्प्ट सेट अप करना
  6. यूज़र इंटरफ़ेस (यूआई) लागू करना
  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. pdf-parse मॉड्यूल इंस्टॉल करें.

    $ 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 के एआई Gemini मॉडल का ऐक्सेस देता है.
  5. अपने मॉडल की एपीआई पासकोड पाना और उसे कॉन्फ़िगर करना

    इस कोडलैब में Gemini API का इस्तेमाल किया गया है. इसका इस्तेमाल करने के लिए, आपको पहले एपीआई पासकोड कॉन्फ़िगर करना होगा. अगर आपके पास पहले से कोई पासकोड नहीं है, तो Google AI Studio में पासकोड बनाएं.

    Gemini 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 के Gemini मॉडल ऐक्सेस किए जा सकते हैं.
  • अगली दो लाइन, PDF फ़ाइलों को पार्स करने के लिए pdf-parse लाइब्रेरी और फ़ाइल सिस्टम के ऑपरेशन के लिए fs मॉड्यूल इंपोर्ट करती हैं.
  • आखिरी लाइन, node:readline/promises मॉड्यूल से createInterface फ़ंक्शन इंपोर्ट करती है. इसका इस्तेमाल, उपयोगकर्ता इंटरैक्शन के लिए कमांड-लाइन इंटरफ़ेस बनाने के लिए किया जाता है.

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

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

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

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

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

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

पांचवें चरण में, उपयोगकर्ता का इनपुट पाने के लिए कोड जोड़ें और 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 फ़ाइल के साथ चैट की जा सकती है.