בקודלאב הזה תלמדו איך ליצור אפליקציית שיחה שמאפשרת למשתמשים לחלץ מידע ממסמכי PDF באמצעות שפה טבעית.
- הגדרת הפרויקט
- ייבוא יחסי התלות הנדרשים
- הגדרת Genkit והמודל שמוגדר כברירת מחדל
- טעינה וניתוח של קובץ ה-PDF
- הגדרת ההנחיה
- הטמעת ממשק המשתמש
- הטמעת לולאת הצ'אט
- הפעלת האפליקציה
דרישות מוקדמות
לפני שמתחילים, צריך להגדיר את התנאים המוקדמים הבאים:
שלבי ההטמעה
אחרי שמגדירים את יחסי התלות, אפשר לבנות את הפרויקט.
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
מבצעת אינטרפולציה של הקידומת של ההנחיה והטקסט המלא של קובץ ה-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
מתחילה את הצ'אט עם המודל באמצעות קריאה ל-method 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.