با یک فایل PDF چت کنید

این نرم افزار نشان می دهد که چگونه یک برنامه مکالمه بسازید که به کاربران اجازه می دهد با استفاده از زبان طبیعی اطلاعات را از اسناد PDF استخراج کنند.

  1. پروژه خود را تنظیم کنید
  2. وابستگی های مورد نیاز را وارد کنید
  3. Genkit و مدل پیش فرض را پیکربندی کنید
  4. فایل PDF را بارگیری و تجزیه کنید
  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. ماژول 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 AI Gemini را فراهم می‌کند.
  5. کلید API مدل خود را دریافت و پیکربندی کنید

    برای استفاده از Gemini API که این کد لبه از آن استفاده می کند، ابتدا باید یک کلید API را پیکربندی کنید. اگر قبلاً یکی ندارید، یک کلید در Google AI Studio ایجاد کنید .

    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";
  • خط اول مدل gemini20Flash و افزونه googleAI را از بسته @genkit-ai/googleai وارد می‌کند و امکان دسترسی به مدل‌های Gemini Google را فراهم می‌کند.
  • دو خط بعدی کتابخانه pdf-parse را برای تجزیه فایل‌های PDF و ماژول fs را برای عملیات سیستم فایل وارد می‌کنند.
  • خط آخر تابع createInterface را از ماژول node:readline/promises وارد می کند، که برای ایجاد یک رابط خط فرمان برای تعامل کاربر استفاده می شود.

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 پیشوند prompt و متن کامل فایل 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 شروع کنید.