Вызов функций упрощает получение структурированных выходных данных из генеративных моделей. Затем вы можете использовать эти выходные данные для вызова других API и возврата соответствующих данных ответа в модель. Другими словами, вызов функций помогает подключить генеративные модели к внешним системам, чтобы сгенерированный контент содержал самую актуальную и точную информацию.
Если вы еще этого не сделали, ознакомьтесь с разделом «Введение в вызов функций», чтобы узнать больше.
В этом руководстве показано, как настроить вызов функции для API Gemini, чтобы интерпретировать запросы пользователей на освещение и сопоставлять их с настройками API для управления значениями яркости и цветовой температуры источника света.
Определить функцию API
Создайте функцию, которая выполняет запрос API. Эта функция должна быть определена в коде вашего приложения, но может вызывать службы или API за пределами вашего приложения. API Gemini не вызывает эту функцию напрямую, поэтому вы можете контролировать, как и когда эта функция выполняется, через код вашего приложения. В демонстрационных целях в этом руководстве определяется фиктивная функция API, которая просто возвращает запрошенные значения освещения:
async function setLightValues(brightness, colorTemp) {
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"],
},
};
// Put functions in a "map" keyed by the function name so it is easier to call
const functions = {
controlLight: ({ brightness, colorTemperature }) => {
return setLightValues( brightness, colorTemperature)
}
};
Объявляйте функции во время инициализации модели
Если вы хотите использовать вызов функций с моделью, вы должны предоставить объявления функций при инициализации объекта модели. Вы объявляете функции, устанавливая параметр tools
модели:
const { GoogleGenerativeAI } = require("@google/generative-ai");
const genAI = new GoogleGenerativeAI(process.env.GEMINI_API_KEY);
const generativeModel = genAI.getGenerativeModel({
model: "gemini-2.0-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.";
const result = await chat.sendMessage(prompt);
const call = result.response.functionCalls()[0];
if (call) {
// Call the executable function
const apiResponse = await functions[call.name](call.args);
// Send the API response back to the model
const result2 = await chat.sendMessage([{functionResponse: {
name: 'controlLight',
response: apiResponse
}}]);
// Log the text response.
console.log(result2.response.text());
}
Режим вызова функций
Вы можете использовать параметр mode
вызова функции, чтобы изменить поведение выполнения функции. Доступны три режима:
-
AUTO
: поведение модели по умолчанию. Модель решает предсказать либо вызов функции, либо ответ на естественном языке. -
ANY
: модель ограничена тем, что всегда прогнозирует вызов функции. Еслиallowed_function_names
не указаны, модель выбирает из всех доступных объявлений функций. Если указаноallowed_function_names
, модель выбирает из набора разрешенных функций. -
NONE
: модель не будет прогнозировать вызов функции. В этом случае поведение модели такое же, как если бы вы не передавали никаких объявлений функций.
Вы также можете передать набор allowed_function_names
, которые, если они предоставлены, ограничивают функции, которые будет вызывать модель. Вы должны включать allowed_function_names
только в том случае, если выбран режим ANY
. Имена функций должны соответствовать именам объявлений функций. Если для режима установлено значение ANY
и заданы allowed_function_names
, модель будет прогнозировать вызов функции на основе предоставленного набора имен функций.
Вы можете указать режим вызова функции, задав toolConfig
при инициализации генеративной модели.
const generativeModel2 = genAI.getGenerativeModel({
// Setting a function calling mode is only available in Gemini 1.5 Pro.
model: "gemini-1.5-pro-latest",
tools: {
functionDeclarations: [getExchangeRateFunctionDeclaration],
},
toolConfig: {
functionCallingConfig: {
// Possible values are: Mode.AUTO, Mode.ANY, Mode.NONE
mode: FunctionCallingMode.ANY
}
}
});