יצירת טקסט באמצעות Gemini API

Gemini API יכול ליצור פלט טקסט כשמזינים טקסט, תמונות, סרטונים ואודיו בתור קלט.

במדריך הזה מוסבר איך ליצור טקסט באמצעות השיטות generateContent ו-streamGenerateContent. למידע נוסף על העבודה עם יכולות הראייה והאודיו של Gemini, תוכלו לעיין במדריכים בנושא ראייה ואודיו.

לפני שמתחילים: מגדירים את הפרויקט ואת מפתח ה-API

לפני שמפעילים את Gemini API, צריך להגדיר את הפרויקט ולהגדיר את מפתח ה-API.

יצירת טקסט מקלט טקסט בלבד

הדרך הפשוטה ביותר ליצור טקסט באמצעות Gemini API היא לספק למודל קלט טקסט בלבד, כמו בדוגמה הבאה:

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });

const prompt = "Write a story about a magic backpack.";

const result = await model.generateContent(prompt);
console.log(result.response.text());

במקרה כזה, ההנחיה ('כתיבת סיפור על תיק גב קסום') לא כוללת דוגמאות לפלט, הוראות מערכת או פרטי פורמט. זוהי גישה של הנחיה ישירה (zero-shot). בתרחישי שימוש מסוימים, הנחיה חד-פעמית או לכמה משפטים עשויה להניב פלט שמתאים יותר לציפיות של המשתמשים. במקרים מסוימים, כדאי גם לספק הוראות מערכת כדי לעזור למודל להבין את המשימה או לפעול לפי הנחיות ספציפיות.

יצירת טקסט ממידע שמוזן כטקסט ותמונה

ה-API של Gemini תומך בקלט רב-מודלי שמשלב טקסט עם קובצי מדיה. הדוגמה הבאה מראה איך ליצור טקסט ממידע קלט של טקסט ותמונה:

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });

function fileToGenerativePart(path, mimeType) {
  return {
    inlineData: {
      data: Buffer.from(fs.readFileSync(path)).toString("base64"),
      mimeType,
    },
  };
}

const prompt = "Describe how this product might be manufactured.";
// Note: The only accepted mime types are some image types, image/*.
const imagePart = fileToGenerativePart(
  `${mediaPath}/jetpack.jpg`,
  "image/jpeg",
);

const result = await model.generateContent([prompt, imagePart]);
console.log(result.response.text());

בדומה להנחיות בטקסט בלבד, פרומפטים בכמה שיטות יכולים לכלול גישות ושיפורים שונים. בהתאם לפלט מהדוגמה הזו, יכול להיות שתרצו להוסיף שלבים להנחיה או להפוך את ההוראות לספציפיות יותר. למידע נוסף, ראו שיטות להצגת בקשה להעלאת קובץ.

איך ליצור זרם טקסט

כברירת מחדל, המודל מחזיר תשובה אחרי השלמת כל תהליך יצירת הטקסט. כדי לקבל אינטראקציות מהירות יותר, אפשר לא להמתין לתוצאה המלאה, אלא להשתמש בסטרימינג כדי לטפל בתוצאות חלקיות.

בדוגמה הבאה מוסבר איך מטמיעים סטרימינג באמצעות השיטה streamGenerateContent כדי ליצור טקסט מבקשת קלט של טקסט בלבד.

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });

const prompt = "Write a story about a magic backpack.";

const result = await model.generateContentStream(prompt);

// Print text as it comes in.
for await (const chunk of result.stream) {
  const chunkText = chunk.text();
  process.stdout.write(chunkText);
}

יצירת צ'אט אינטראקטיבי

אתם יכולים להשתמש ב-Gemini API כדי ליצור חוויות צ'אט אינטראקטיביות למשתמשים שלכם. תכונת הצ'אט של ה-API מאפשרת לאסוף כמה סבבים של שאלות ותשובות, וכך לאפשר למשתמשים להתקדם בהדרגה לתשובות או לקבל עזרה בבעיות מרובות חלקים. התכונה הזו אידיאלית לאפליקציות שדורשות תקשורת שוטפת, כמו צ'אט בוטים, מורים פרטיים אינטראקטיביים או עוזרים לתמיכת לקוחות.

בדוגמת הקוד הבאה מוצגת הטמעה בסיסית של צ'אט:

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const chat = model.startChat({
  history: [
    {
      role: "user",
      parts: [{ text: "Hello" }],
    },
    {
      role: "model",
      parts: [{ text: "Great to meet you. What would you like to know?" }],
    },
  ],
});
let result = await chat.sendMessage("I have 2 dogs in my house.");
console.log(result.response.text());
result = await chat.sendMessage("How many paws are in my house?");
console.log(result.response.text());

הפעלת סטרימינג של צ'אט

אפשר גם להשתמש בשידור חי עם צ'אט, כמו בדוגמה הבאה:

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({ model: "gemini-1.5-flash" });
const chat = model.startChat({
  history: [
    {
      role: "user",
      parts: [{ text: "Hello" }],
    },
    {
      role: "model",
      parts: [{ text: "Great to meet you. What would you like to know?" }],
    },
  ],
});
let result = await chat.sendMessageStream("I have 2 dogs in my house.");
for await (const chunk of result.stream) {
  const chunkText = chunk.text();
  process.stdout.write(chunkText);
}
result = await chat.sendMessageStream("How many paws are in my house?");
for await (const chunk of result.stream) {
  const chunkText = chunk.text();
  process.stdout.write(chunkText);
}

הגדרת יצירת טקסט

כל הנחיה ששולחים למודל כוללת פרמטרים ששולטים באופן שבו המודל יוצר תשובות. אפשר להשתמש ב-GenerationConfig כדי להגדיר את הפרמטרים האלה. אם לא מגדירים את הפרמטרים, המודל משתמש באפשרויות ברירת המחדל, שיכולות להשתנות בהתאם למודל.

בדוגמה הבאה אפשר לראות איך להגדיר כמה מהאפשרויות הזמינות.

// Make sure to include these imports:
// import { GoogleGenerativeAI } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);
const model = genAI.getGenerativeModel({
  model: "gemini-1.5-flash",
  generationConfig: {
    candidateCount: 1,
    stopSequences: ["x"],
    maxOutputTokens: 20,
    temperature: 1.0,
  },
});

const result = await model.generateContent(
  "Tell me a story about a magic backpack.",
);
console.log(result.response.text());

candidateCount מציין את מספר התשובות שייווצרו ויוחזרו. בשלב זה, אפשר להגדיר את הערך הזה רק ל-1. אם לא תגדירו את הערך, הערך שמוגדר כברירת מחדל הוא 1.

stopSequences מציין את הקבוצה של רצפי תווים (עד 5) שיפסיקו ליצור את הפלט. אם יצוין, ה-API יפסיק בהופעה הראשונה של stop_sequence. רצף העצירות לא ייכלל בתגובה.

maxOutputTokens מגדיר את המספר המקסימלי של אסימונים שאפשר לכלול במועמד.

temperature קובע את מידת הרנדומיזציה של הפלט. כדאי להשתמש בערכים גבוהים יותר לתגובות יצירתיות יותר, ובערכים נמוכים יותר לתגובות דטרמיניסטיות יותר. הערכים יכולים לנוע בטווח [0.0, 2.0].

אפשר גם להגדיר שיחות ספציפיות ל-generateContent:

const result = await model.generateContent({
  contents: [
    {
      role: 'user',
      parts: [
        {
          text: prompt,
        }
      ],
    }
  ],
  generationConfig: {
    maxOutputTokens: 1000,
    temperature: 0.1,
  },
});
console.log(result.response.text());

ערכים שהוגדרו בקריאה הספציפית מבטלים את הערכים ב-constructor של המודל.

המאמרים הבאים

עכשיו, אחרי שסיימתם לקרוא את ההסבר הבסיסי על Gemini API, כדאי לנסות:

  • הבנת חזון: איך משתמשים בהבנת החזון המקורי של Gemini כדי לעבד תמונות וסרטונים.
  • הוראות מערכת: הוראות המערכת מאפשרות לשלוט בהתנהגות המודל על סמך הצרכים ותרחישי השימוש הספציפיים שלכם.
  • הבנת אודיו: איך משתמשים בהבנת האודיו המקורית של Gemini כדי לעבד קובצי אודיו.