יצירת פלט מובנה בעזרת Gemini API


Gemini יוצר טקסט לא מובנה כברירת מחדל, אבל באפליקציות מסוימות נדרש טקסט מובנה. בתרחישי השימוש האלה, אפשר להגביל את Gemini כך שתגיב ב-JSON, פורמט של נתונים מובְנים שמתאים לעיבוד אוטומטי. אפשר גם להגביל את המודל כך שיגיב באחת מהאפשרויות שצוינו ב-enum.

הנה כמה תרחישים לדוגמה שבהם יכול להיות שתצטרכו פלט מובנה מהמודל:

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

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

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

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

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

צצור JSON

כשהמודל מוגדר להפיק פלט בפורמט JSON, הוא מגיב לכל הנחיה בפלט בפורמט JSON.

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

  • כטקסט בהנחיה
  • כסכימה מובנית שסופקה דרך הגדרת המודל

שני הגישות פועלות גם ב-Gemini 1.5 Flash וגם ב-Gemini 1.5 Pro.

מציינים את הסכימה כטקסט בהנחיה

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

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

// 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 = `List a few popular cookie recipes using this JSON schema:

Recipe = {'recipeName': string}
Return: Array<Recipe>`;

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

הפלט עשוי להיראות כך:

[{"recipeName": "Chocolate Chip Cookies"}, {"recipeName": "Oatmeal Raisin Cookies"}, {"recipeName": "Snickerdoodles"}, {"recipeName": "Sugar Cookies"}, {"recipeName": "Peanut Butter Cookies"}]

העברת סכימה דרך הגדרת המודל

הדוגמה הבאה מבצעת את הפעולות הבאות:

  1. יצירת מופע של מודל שמוגדר באמצעות סכימה כדי להגיב ב-JSON.
  2. המערכת מבקשת מהמודל להחזיר מתכונים של עוגיות.
// Make sure to include these imports:
// import { GoogleGenerativeAI, SchemaType } from "@google/generative-ai";
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

const schema = {
  description: "List of recipes",
  type: SchemaType.ARRAY,
  items: {
    type: SchemaType.OBJECT,
    properties: {
      recipeName: {
        type: SchemaType.STRING,
        description: "Name of the recipe",
        nullable: false,
      },
    },
    required: ["recipeName"],
  },
};

const model = genAI.getGenerativeModel({
  model: "gemini-1.5-pro",
  generationConfig: {
    responseMimeType: "application/json",
    responseSchema: schema,
  },
});

const result = await model.generateContent(
  "List a few popular cookie recipes.",
);
console.log(result.response.text());

הפלט עשוי להיראות כך:

[{"recipeName": "Chocolate Chip Cookies"}, {"recipeName": "Oatmeal Raisin Cookies"}, {"recipeName": "Snickerdoodles"}, {"recipeName": "Sugar Cookies"}, {"recipeName": "Peanut Butter Cookies"}]