בשיעור הזה תלמדו איך להשתמש ב-Genkit כדי להטמיע אפליקציה שמאפשרת לשוחח בצ'אט עם קובץ PDF.
דרישות מוקדמות
בשיעור הזה אנחנו מניחים שאתם מכירים את תהליך פיתוח האפליקציות באמצעות Node.js. כדי להשלים את הקודלאב הזה, צריך לוודא שסביבת הפיתוח עומדת בדרישות הבאות:
- Node.js v20 ואילך
- npm
יצירת פרויקט חדש
יוצרים תיקייה חדשה ריקה.
mkdir chat-with-a-pdf cd chat-with-a-pdf
מפעילים את הפרויקט החדש ב-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 Studio, אבל Genkit תומך במגוון רחב של ספקי מודלים, כולל: * Gemini מ-Vertex AI * המודלים Claude 3 ו-Llama 3.1 של Anthropic דרך Vertex AI Model Garden * מודלים בקוד פתוח דרך Ollama * ספקים שנתמכים על ידי הקהילה כמו OpenAI ו-Cohere.
ייבוא והפעלה של Genkit
יוצרים תיקייה חדשה
src
ובתוכה קובץ חדשindex.ts
. מוסיפים את השורות הבאות כדי לייבא את Genkit ואת הפלאגין של Google AI.import {gemini15Flash, googleAI} from '@genkit-ai/googleai'; import {genkit} from 'genkit';
מוסיפים את השורות הבאות כדי להגדיר את Genkit ולהגדיר את Gemini 1.5 Flash בתור מודל ברירת המחדל.
const ai = genkit({ plugins: [googleAI()], model: gemini15Flash, });
מוסיפים את הגוף הראשי של האפליקציה.
(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.
מתקינים את
pdf-parse
.npm i pdf-parse
מייבאים את ספריית ה-PDF לאפליקציה.
import pdf from 'pdf-parse'; import fs from 'fs';
קריאת שם הקובץ של קובץ ה-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); }
טוענים את התוכן של קובץ ה-PDF.
// 2: load PDF file let dataBuffer = fs.readFileSync(filename); const { text } = await pdf(dataBuffer);
הגדרת ההנחיה
כדי להגדיר את ההנחיה, פועלים לפי השלבים הבאים:
לאפשר למשתמש לספק הנחיה מותאמת אישית דרך שורת הפקודה. אם הם לא מספקים הנחיה, משתמשים בברירת מחדל.
const prefix = process.argv[3] || "Answer the user's questions about the contents of this PDF file.";
מזינים את הקידומת של ההנחיה ואת הטקסט המלא של קובץ ה-PDF בהנחיה של המודל.
const prompt = ` ${prefix} Context: ${data.text} `
הטמעת לולאת הצ'אט
כדי להתחיל את הצ'אט עם המודל, קוראים לשיטה
chat
ומעבירים את ההנחיה (שכוללת את הטקסט המלא של קובץ ה-PDF).const chat = ai.chat({ system: prompt })
מייבאים את
createInterface
. כך תוכלו ליצור ממשק משתמש מבוסס-טקסט.import {createInterface} from "node:readline/promises";
יוצרים מכונה של קלט טקסט ומציגים הודעה למשתמש.
const readline = createInterface(process.stdin, process.stdout); console.log("You're chatting with Gemini. Ctrl-C to quit.\n");
קוראים את הקלט של המשתמש ושולחים אותו למודל באמצעות
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.