دليل توجيهي لمنصّات حزمة تطوير البرامج (SDK) لاستدعاء الدوال

يسهّل عليك استدعاء الدوال الحصول على مخرجات البيانات المنظَّمة من النماذج التوليدية. يمكنك بعد ذلك استخدام هذه المخرجات لاستدعاء واجهات برمجة تطبيقات أخرى وعرض بيانات الاستجابة ذات الصلة إلى النموذج. بعبارة أخرى، يساعدك استدعاء الدوال في ربط النماذج التوليدية بالأنظمة الخارجية بحيث يشتمل المحتوى الذي يتم إنشاؤه على أحدث المعلومات وأكثرها دقة.

يمكنك تقديم أوصاف للوظائف لنماذج Gemini. هذه هي الدوال التي تكتبها بلغة تطبيقك (أي أنها ليست وظائف Google Cloud). قد يطلب منك النموذج استدعاء دالة وإرسال النتيجة لمساعدة النموذج في التعامل مع استعلامك.

لمزيد من المعلومات، اطّلِع على مقدّمة حول استدعاء الدوال لمزيد من المعلومات.

مثال على واجهة برمجة تطبيقات للتحكّم في الإضاءة

لنفترض أنّ لديك نظامًا أساسيًا للتحكّم في الإضاءة مع واجهة لبرمجة التطبيقات (API) وتريد السماح للمستخدمين بالتحكّم بالإضاءة من خلال طلبات نصية بسيطة. يمكنك استخدام ميزة "استدعاء الدوال" لشرح طلبات تغيير الإضاءة التي يرسلها المستخدمون وترجمتها إلى طلبات بيانات من واجهة برمجة التطبيقات لضبط قيم الإضاءة. يتيح لك نظام التحكم الافتراضي في الإضاءة هذا التحكم في سطوع الضوء ودرجة حرارة ألوانه، ويتم تعريفهما على معلمتين منفصلتين:

المَعلمة النوع مطلوبة الوصف
brightness الرقم نعم مستوى الإضاءة من 0 إلى 100 القيمة "صفر" غير مفعّلة والقيمة 100 "سطوع كامل".
colorTemperature سلسلة نعم درجة حرارة ألوان تجهيز الإضاءة يمكن أن تكون daylight أو cool أو warm.

ولتبسيط الأمر، يحتوي نظام الإضاءة الوهمي هذا على ضوء واحد فقط، لذلك لا يضطر المستخدم إلى تحديد غرفة أو موقع جغرافي. في ما يلي مثال على طلب JSON يمكنك إرساله إلى واجهة برمجة التطبيقات للتحكّم في الإضاءة لتغيير مستوى الإضاءة إلى %50 باستخدام درجة حرارة ألوان ضوء النهار:

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

يشرح لك هذا الدليل التوجيهي كيفية إعداد استدعاء الدوال في Gemini API لتفسير طلبات الإضاءة للمستخدمين وربطها بإعدادات واجهة برمجة التطبيقات للتحكّم في مستوى سطوع الضوء وقيم درجة حرارة الألوان.

قبل البدء: عليك إعداد مشروعك ومفتاح واجهة برمجة التطبيقات.

قبل طلب Gemini API، عليك إعداد مشروعك وضبط مفتاح واجهة برمجة التطبيقات.

تعريف دالة واجهة برمجة التطبيقات

إنشاء دالة تؤدي إلى طلب واجهة برمجة التطبيقات. يجب تحديد هذه الوظيفة داخل رمز التطبيق، ولكن قد تطلب خدمات أو واجهات برمجة تطبيقات من خارج التطبيق. لا تستدعي Gemini 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());
}