מדריך להפעלת פונקציות

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

אתם יכולים להוסיף למודלים של Gemini תיאורים של פונקציות. פונקציות שכותבים בשפה של האפליקציה (כלומר, הן לא פונקציות של Google Cloud Functions). המודל עשוי לבקש מכם לקרוא לפונקציה ולשלוח חזרה את התוצאה כדי לעזור למודל לטפל בשאילתה.

אם עדיין לא עשית זאת, כדאי לעיין במאמר מבוא לקריאות פונקציות כדי לקבל מידע נוסף.

דוגמה לממשק API לבקרת תאורה

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

פרמטר סוג נדרש תיאור
brightness number כן רמת האור מ-0 עד 100. אפס כבוי ו-100 מציג בהירות מלאה.
colorTemperature string כן טמפרטורת הצבע של גוף התאורה יכולה להיות daylight, cool או warm.

כדי לשמור על פשטות, למערכת התאורה הדמיונית הזו יש רק תאורה אחת, כך שהמשתמש לא צריך לציין חדר או מיקום. לפניכם דוגמה לבקשת JSON שאפשר לשלוח ל-API של בקרת התאורה כדי לשנות את רמת האור ל-50% באמצעות טמפרטורת הצבע של אור יום:

{
  "brightness": "50",
  "colorTemperature": "daylight"
}

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

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

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

הגדרה של פונקציית API

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

async function setLightValues(brightness, colorTemp) {
  // This mock API returns the requested lighting values
  return {
    brightness: brightness,
    colorTemperature: colorTemp
  };
}

יצירת הצהרות לגבי פונקציות

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

const controlLightFunctionDeclaration = {
  name: "controlLight",
  parameters: {
    type: "OBJECT",
    description: "Set the brightness and color temperature of a room light.",
    properties: {
      brightness: {
        type: "NUMBER",
        description: "Light level from 0 to 100. Zero is off and 100 is full brightness.",
      },
      colorTemperature: {
        type: "STRING",
        description: "Color temperature of the light fixture which can be `daylight`, `cool` or `warm`.",
      },
    },
    required: ["brightness", "colorTemperature"],
  },
};

// Executable function code. Put it in a map keyed by the function name
// so that you can call it once you get the name string from the model.
const functions = {
  controlLight: ({ brightness, colorTemp }) => {
    return setLightValues( brightness, colorTemp)
  }
};

הצהרה על פונקציות במהלך אתחול המודל

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

const { GoogleGenerativeAI } = require("@google/generative-ai");

// Access your API key as an environment variable (see "Set up your API key" above)
const genAI = new GoogleGenerativeAI(process.env.API_KEY);

// ...

const generativeModel = genAI.getGenerativeModel({
  // Use a model that supports function calling, like a Gemini 1.5 model
  model: "gemini-1.5-flash",

  // Specify the function declaration.
  tools: {
    functionDeclarations: [controlLightFunctionDeclaration],
  },
});

יצירת בקשה להפעלת פונקציה

אחרי שמאתחלים את המודל באמצעות הצהרות הפונקציה, אפשר לשלוח בקשה למודל עם הפונקציה המוגדרת. כדאי להשתמש בפונקציות של קריאה באמצעות הנחיות בצ'אט (sendMessage()), כי לרוב, קריאות לפונקציות מפיקות תועלת מההקשר של ההנחיות והתשובות הקודמות.

const chat = generativeModel.startChat();
const prompt = "Dim the lights so the room feels cozy and warm.";

// Send the message to the model.
const result = await chat.sendMessage(prompt);

// For simplicity, this uses the first function call found.
const call = result.response.functionCalls()[0];

if (call) {
  // Call the executable function named in the function call
  // with the arguments specified in the function call and
  // let it call the hypothetical API.
  const apiResponse = await functions[call.name](call.args);

  // Send the API response back to the model so it can generate
  // a text response that can be displayed to the user.
  const result2 = await chat.sendMessage([{functionResponse: {
    name: 'controlLight',
    response: apiResponse
  }}]);

  // Log the text response.
  console.log(result2.response.text());
}