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

می‌توانید از Genkit برای ساخت برنامه‌ای استفاده کنید که به کاربر اجازه می‌دهد با یک فایل 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/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 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>


توجه: اگرچه این آموزش از Gemini API از AI Studio استفاده می کند، 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 AI را وارد می کنند.
  • دو خط دوم برای تجزیه کننده pdf است.
  • خط پنجم برای پیاده سازی UI شما است.

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. در مرحله 1، کدی را برای خواندن نام فایل PDF که از خط فرمان ارسال شده است، اضافه کنید.

      const filename = process.argv[2];
      if (!filename) {
        console.error("Please provide a filename as a command line argument.");
        process.exit(1);
      }
    
  2. در مرحله 2، کدی را برای بارگیری محتوای فایل PDF اضافه کنید.

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

5. دستور را تنظیم کنید

در مرحله 3، کدی را برای تنظیم درخواست اضافه کنید:

   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 را پیاده سازی کنید

در مرحله 4، کد زیر را برای شروع چت و پیاده سازی UI اضافه کنید:

   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 را فشار دهد حلقه می شود.

       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 شروع کنید.