Panggilan fungsi mempermudah Anda mendapatkan output data terstruktur dari model generatif. Kemudian, Anda dapat menggunakan output ini untuk memanggil API lain dan menampilkan data respons yang relevan ke model. Dengan kata lain, panggilan fungsi membantu Anda menghubungkan model generatif ke sistem eksternal sehingga konten yang dihasilkan berisi informasi yang terbaru dan akurat.
Anda dapat memberikan deskripsi fungsi ke model Gemini. Berikut adalah fungsi yang Anda tulis dalam bahasa aplikasi (artinya, fungsi itu tidak Google Cloud Functions). Model mungkin meminta Anda untuk memanggil fungsi dan mengirim kembali hasilnya untuk membantu model menangani kueri Anda.
Jika belum melakukannya, lihat Pengantar panggilan fungsi untuk mempelajari lebih lanjut.
Contoh API untuk kontrol pencahayaan
Bayangkan Anda memiliki sistem kontrol pencahayaan dasar dengan antarmuka pemrograman aplikasi (API) dan ingin mengizinkan pengguna mengontrol lampu melalui permintaan teks sederhana. Anda dapat menggunakan fitur Panggilan Fungsi untuk menafsirkan pencahayaan mengubah permintaan dari pengguna dan menerjemahkannya menjadi panggilan API untuk menyetel pencahayaan masing-masing. Sistem kontrol pencahayaan hipotetis ini memungkinkan Anda mengontrol kecerahan cahaya dan suhu warnanya, yang didefinisikan sebagai dua parameter:
Parameter | Jenis | Wajib diisi | Deskripsi |
---|---|---|---|
brightness |
angka | ya | Tingkat cahaya dari 0 hingga 100. Nol tidak aktif dan 100 adalah kecerahan penuh. |
colorTemperature |
string | ya | Suhu warna lampu yang bisa daylight , cool , atau warm . |
Untuk kesederhanaan, sistem pencahayaan imajiner ini hanya memiliki satu cahaya, sehingga pengguna tidak harus menentukan ruangan atau lokasi. Berikut adalah contoh permintaan JSON Anda bisa mengirim ke Light Control API untuk mengubah level cahaya menjadi 50% menggunakan suhu warna siang hari:
{
"brightness": "50",
"colorTemperature": "daylight"
}
Tutorial ini menunjukkan cara menyiapkan Panggilan Fungsi untuk Gemini API guna menafsirkan permintaan pencahayaan pengguna dan memetakannya ke setelan API untuk mengontrol kecerahan dan suhu warna lampu.
Sebelum memulai: Siapkan project dan kunci API Anda
Sebelum memanggil Gemini API, Anda perlu menyiapkan project dan mengonfigurasi kunci API Anda.
Menentukan fungsi API
Buat fungsi yang membuat permintaan API. Fungsi ini harus ditentukan dalam kode aplikasi Anda, tetapi dapat memanggil layanan atau API di luar aplikasi Anda. Gemini API tidak memanggil fungsi ini secara langsung, sehingga Anda dapat mengontrol cara dan waktu fungsi ini dijalankan melalui kode aplikasi. Untuk tujuan demonstrasi, tutorial ini mendefinisikan fungsi API tiruan yang hanya mengembalikan nilai pencahayaan yang diminta:
Future<Map<String, Object?>> setLightValues(
Map<String, Object?> arguments,
) async =>
// This mock API returns the requested lighting values
{
'brightness': arguments['brightness'],
'colorTemperature': arguments['colorTemp'],
};
Membuat deklarasi fungsi
Buat deklarasi fungsi yang akan Anda teruskan ke model generatif. Kapan Anda mendeklarasikan fungsi untuk digunakan oleh model, Anda harus menyertakan detail mungkin dalam deskripsi fungsi dan parameter. Model generatif menggunakan informasi ini untuk menentukan fungsi mana yang harus dipilih dan bagaimana menyediakan untuk parameter dalam panggilan fungsi. Kode berikut menunjukkan cara mendeklarasikan fungsi kontrol pencahayaan:
final lightControlTool = FunctionDeclaration(
'setLightValues',
'Set the brightness and color temperature of a room light.',
Schema(SchemaType.object, properties: {
'brightness': Schema(SchemaType.number,
description: 'Light level from 0 to 100. '
'Zero is off and 100 is full brightness.'),
'colorTemperature': Schema(SchemaType.string,
description: 'Color temperature of the light fixture, '
'which can be `daylight`, `cool` or `warm`.'),
}, requiredProperties: [
'brightness',
'colorTemperature'
]));
Mendeklarasikan fungsi selama inisialisasi model
Jika ingin menggunakan panggilan fungsi dengan model, Anda harus memberikan deklarasi fungsi saat melakukan inisialisasi objek model. Anda mendeklarasikan
fungsi dengan menetapkan parameter tools
model. Dart SDK juga mendukung
mendeklarasikan fungsi sebagai argumen ke generateContent
atau
generateContentStream
API.
final model = GenerativeModel(
model: 'gemini-1.5-flash',
apiKey: apiKey,
// Specify the function declaration.
tools: [
Tool(functionDeclarations: [lightControlTool])
],
);
Membuat panggilan fungsi
Setelah menginisialisasi model dengan deklarasi fungsi, Anda dapat meminta
model dengan fungsi yang ditentukan. Anda harus menggunakan panggilan fungsi menggunakan
perintah chat (sendMessage()
), karena panggilan fungsi umumnya mendapatkan manfaat dari
memiliki konteks perintah dan respons sebelumnya.
final chat = model.startChat(); final prompt =
'Dim the lights so the room feels cozy and warm.';
// Send the message to the generative model.
var response = await chat.sendMessage(Content.text(prompt));
final functionCalls = response.functionCalls.toList();
// When the model response with a function call, invoke the function.
if (functionCalls.isNotEmpty) {
final functionCall = functionCalls.first;
final result = switch (functionCall.name) {
// Forward arguments to the hypothetical API.
'setLightValues' => await setLightValues(functionCall.args),
// Throw an exception if the model attempted to call a function that was
// not declared.
_ => throw UnimplementedError(
'Function not implemented: ${functionCall.name}')
};
// Send the response to the model so that it can use the result to generate
// text for the user.
response = await chat
.sendMessage(Content.functionResponse(functionCall.name, result));
}
// When the model responds with non-null text content, print it.
if (response.text case final text?) {
print(text);
}