این نرم افزار نشان می دهد که چگونه یک برنامه مکالمه بسازید که به کاربران اجازه می دهد با استفاده از زبان طبیعی اطلاعات را از اسناد PDF استخراج کنند.
- پروژه خود را تنظیم کنید
- وابستگی های مورد نیاز را وارد کنید
- Genkit و مدل پیش فرض را پیکربندی کنید
- فایل PDF را بارگیری و تجزیه کنید
- دستور را تنظیم کنید
- UI را پیاده سازی کنید
- حلقه چت را پیاده سازی کنید
- برنامه را اجرا کنید
پیش نیازها
قبل از شروع کار، باید این پیش نیازها را تنظیم کنید:
مراحل پیاده سازی
پس از تنظیم وابستگی های خود، می توانید پروژه را بسازید.
1. پروژه خود را تنظیم کنید
یک ساختار دایرکتوری و یک فایل برای نگهداری کد منبع خود ایجاد کنید.
$ mkdir -p chat-with-a-pdf/src && \ cd chat-with-a-pdf && \ touch src/index.ts
یک پروژه TypeScript جدید را راه اندازی کنید.
$ npm init -y
ماژول pdf-parse را نصب کنید.
$ npm i pdf-parse && npm i -D @types/pdf-parse
برای استفاده از Genkit در پروژه خود، وابستگی های Genkit زیر را نصب کنید:
$ npm i genkit @genkit-ai/googleai
-
genkit
قابلیت های اصلی Genkit را فراهم می کند. -
@genkit-ai/googleai
دسترسی به مدلهای Google AI Gemini را فراهم میکند.
-
کلید 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 را بارگیری و تجزیه کنید
برای خواندن نام فایل 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); }
برای بارگیری محتوای فایل 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 شروع کنید.