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

این کد لبه به شما نشان می دهد که چگونه از Genkit برای پیاده سازی برنامه ای استفاده کنید که به شما امکان می دهد با یک فایل PDF چت کنید.

پیش نیازها

این کد لبه فرض می کند که شما با ساختن برنامه های کاربردی با Node.js آشنا هستید. برای تکمیل این کد لبه، مطمئن شوید که محیط توسعه شما شرایط زیر را برآورده می کند:

  • Node.js نسخه 20+
  • 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 AI Gemini را فراهم می‌کند.
npm install genkit @genkit-ai/googleai

کلید API مدل خود را پیکربندی کنید

برای این راهنما، نحوه استفاده از Gemini API را به شما نشان می‌دهیم که یک ردیف رایگان سخاوتمندانه ارائه می‌کند و برای شروع به کارت اعتباری نیاز ندارد. برای استفاده از Gemini API، به یک کلید API نیاز دارید. اگر قبلاً یکی ندارید، یک کلید در Google AI Studio ایجاد کنید.

یک کلید API از Google AI Studio دریافت کنید

پس از ایجاد یک کلید API، متغیر محیطی GOOGLE_GENAI_API_KEY را با دستور زیر روی کلید خود تنظیم کنید:

export GOOGLE_GENAI_API_KEY=<your API key>

توجه: در حالی که این آموزش از Gemini API از استودیو AI استفاده می کند، Genkit از ارائه دهندگان مدل های متنوعی پشتیبانی می کند، از جمله: * Gemini از Vertex AI * مدل های Anthropic's Claude 3 و Llama 3.1 از طریق Vertex AI Model Garden * مدل های منبع باز از طریق Ollama * ارائه دهندگان مورد حمایت جامعه مانند OpenAI و Cohere.

Genkit را وارد و مقداردهی اولیه کنید

  1. یک پوشه جدید src ایجاد کنید و در داخل آن یک فایل جدید index.ts ایجاد کنید. خطوط زیر را برای وارد کردن Genkit و افزونه Google AI اضافه کنید.

    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 را بارگیری و تجزیه کنید

در این مرحله کدی را برای بارگذاری و تجزیه یک فایل 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. پیشوند prompt و متن کامل فایل PDF را به درخواست مدل تزریق کنید.

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

حلقه چت را پیاده سازی کنید

  1. چت را با مدل با فراخوانی روش chat ، عبور دادن فرمان (که شامل متن کامل فایل PDF است) شروع کنید.

    const chat = ai.chat({ system: prompt })
    
  2. وارد کردن createInterface این به شما این امکان را می دهد که یک UI مبتنی بر متن بسازید.

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