يسهّل استدعاء الدوال الحصول على مخرجات البيانات المنظَّمة من النماذج التوليدية يمكنك بعد ذلك استخدام هذه المخرجات لطلب واجهات برمجة تطبيقات أخرى وعرض بيانات الاستجابة ذات الصلة بالنموذج. بعبارة أخرى، يساعد استدعاء الدوال تربط النماذج التوليدية بالأنظمة الخارجية، بحيث يتم يتضمن أحدث المعلومات وأكثرها دقة.
يمكنك تقديم أوصاف للوظائف لنماذج Gemini. وهي الدوال التي تكتبها بلغة تطبيقك (أي أنها ليست Google Cloud Functions). قد يطلب منك النموذج استدعاء دالة ثم إرجاعها النتيجة لمساعدة النموذج في التعامل مع استعلامك.
إذا لم يسبق لك ذلك، فاطلع على مقدّمة عن استدعاء الدوال للتعرُّف على المزيد.
مثال على واجهة برمجة تطبيقات للتحكّم في الإضاءة
تخيّل أنّ لديك نظامًا أساسيًا للتحكّم في الإضاءة يتضمّن برمجة تطبيق (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, colorTemperature }) => {
return setLightValues( brightness, colorTemperature)
}
};
تعريف الدوال أثناء إعداد النموذج
عندما تريد استخدام استدعاء الدالة مع نموذج، يجب عليك تقديم
عند تهيئة كائن النموذج. أنت تعلن عن الدوال
من خلال ضبط معلَمة 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());
}