คู่มือนี้ใช้ได้กับความสามารถใดก็ตามที่ขึ้นอยู่กับการโต้ตอบหลายรอบ ซึ่งรวมถึงความสามารถต่อไปนี้
การสนทนาหลายรอบ (แชท) ซึ่งรวมถึงการแชทที่แสดงผลเป็นข้อความเท่านั้นและ การแก้ไขรูปภาพแบบวนซ้ำ
ภาพรวมระดับสูง
สำหรับการโต้ตอบหลายรอบ SDK Firebase AI Logic จะจัดการ สถานะของการสนทนา ซึ่งจะมีผลเมื่อใช้เทมเพลตข้อความแจ้งของเซิร์ฟเวอร์ด้วยเช่นกัน
เวิร์กโฟลว์พื้นฐานสำหรับการโต้ตอบหลายรอบและเทมเพลตข้อความแจ้งของเซิร์ฟเวอร์นั้นโดยพื้นฐานแล้วจะเหมือนกับคำขอรอบเดียว โดยมีข้อแตกต่างที่สำคัญบางประการดังนี้
สร้างเทมเพลตโดยใช้ UI ที่แนะนำใน Firebase คอนโซล
สำหรับการโต้ตอบหลายรอบ คุณต้องเพิ่มแท็ก
{{history}}ในเนื้อหาของเทมเพลต ซึ่งจะบอกเทมเพลตว่าจะแทรกการสนทนาที่จัดการโดย Client SDK ไว้ที่ใดทดสอบเทมเพลตในคำขอจริงโดยใช้ประสบการณ์การทดสอบใน Firebase คอนโซล
สำหรับการโต้ตอบหลายรอบ ประสบการณ์การทดสอบในคอนโซลจะช่วยทดสอบได้เฉพาะรอบแรกเท่านั้น คุณสามารถทดสอบวิธีจัดการรอบต่อๆ ไป (ประวัติ) ได้โดยใช้เทมเพลตกับแอปจริง
เข้าถึงเทมเพลตจากโค้ดของแอปโดยใช้
templateGenerativeModelสำหรับการโต้ตอบหลายรอบ คุณต้องใช้
startChatและsendMessage(เช่นเดียวกับที่คุณใช้สำหรับการโต้ตอบหลายรอบเมื่อ ไม่ ได้ใช้เทมเพลตข้อความแจ้งของเซิร์ฟเวอร์)
โปรดทราบว่าสำหรับการเรียกใช้ฟังก์ชัน จะมีข้อแตกต่างเพิ่มเติมอีก 2-3 ข้อ ซึ่งอธิบายไว้ในส่วนนั้นในภายหลังของหน้านี้
การสนทนาหลายรอบ (แชท)
หากยังไม่ได้อ่าน โปรดอ่าน คู่มือทั่วไปสำหรับการสร้างการสนทนาหลายรอบ (แชท) เมื่อ ไม่ ได้ใช้เทมเพลตข้อความแจ้งของเซิร์ฟเวอร์
รูปแบบพื้นฐานของเทมเพลตข้อความแจ้งของเซิร์ฟเวอร์
สำหรับ Firebase AI Logic คอนโซล Firebase จะมี UI ที่แนะนำเพื่อให้คุณระบุข้อมูลเมตาและเนื้อหาของเทมเพลต
เทมเพลตข้อความแจ้งของเซิร์ฟเวอร์ใช้ไวยากรณ์และรูปแบบที่อิงตาม Dotprompt ดูรายละเอียดเพิ่มเติมได้ที่ รูปแบบ ไวยากรณ์ และตัวอย่างของเทมเพลต
เทมเพลตตัวอย่างด้านล่างแสดงคอมโพเนนต์ที่สำคัญที่สุดสำหรับเทมเพลตเมื่อสร้างการสนทนาหลายรอบ (แชท) โปรดสังเกตการเพิ่มแท็ก
{{history}} ในเนื้อหาของเทมเพลต
ซึ่งจะบอกเทมเพลตว่าจะแทรกการสนทนาที่จัดการโดย
Client SDK ไว้ที่ใด
---
model: 'gemini-3-flash-preview'
---
{{role "system"}}
You help customers with their invoices, including answering questions or providing their invoices to them.
If an invoice is requested, it must be a clearly structured invoice document that uses a tabular or clearly delineated list format for line items.
{{history}}
ใช้เทมเพลตในโค้ด
|
คลิกผู้ให้บริการ Gemini API เพื่อดูเนื้อหาเฉพาะของผู้ให้บริการ และโค้ดในหน้านี้ |
โค้ดฝั่งไคลเอ็นต์ตัวอย่างด้านล่างแสดงวิธีใช้เทมเพลตในโค้ด โปรดสังเกตการใช้ templateGenerativeModel ร่วมกับ startChat และ sendMessage เมื่อสร้างการโต้ตอบหลายรอบ
Swift
For Swift, using server prompt templates with multi-turn interactions is not yet supported. Check back soon!
Kotlin
// ...
// Initialize the Gemini Developer API backend service
// Create a `TemplateGenerativeModel` instance.
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
.templateGenerativeModel()
// Start a chat session with a template.
val chatSession = model.startChat(
// Specify your template ID
templateId= "my-chat-template-v1-0-0",
inputs = emptyMap()
)
// Send messages.
// The template's system instructions and model config apply to every turn automatically.
// The SDK automatically manages the state of the conversation.
val response = chatSession.sendMessage(
content("user") { text("I need a copy of my invoice.") }
)
val text = response.text
println(text)
Java
For Java, using server prompt templates with multi-turn interactions is not yet supported. Check back soon!
Web
// ...
// Initialize the Gemini Developer API backend service.
const ai = getAI(app, { backend: new GoogleAIBackend() });
// Create a `TemplateGenerativeModel` instance.
const model = getTemplateGenerativeModel(ai);
// Start a chat session with a template.
const chatSession = model.startChat({
// Specify your template ID.
templateId: 'my-chat-template-v1-0-0',
});
// Send messages.
// The template's system instructions and model config apply to every turn automatically.
// The SDK automatically manages the state of the conversation.
const result = await chatSession.sendMessage("I need a copy of my invoice.");
const text = result.response.text();
console.log(text);
Dart
// ...
// Initialize the Gemini Developer API backend service.
// Create a `TemplateGenerativeModel` instance.
final model = FirebaseAI.googleAI().templateGenerativeModel();
// Start a chat session with a template.
final chatSession = model.startChat(
// Specify your template ID.
templateId: 'my-chat-template-v1-0-0',
);
// Send messages.
// The template's system instructions and model config apply to every turn automatically.
// The SDK automatically manages the state of the conversation.
final response = await chatSession.sendMessage(
Content.text('I need a copy of my invoice.'),
);
final text = response.text;
print(text);
Unity
// ...
// Initialize the Gemini Developer API backend service.
var firebaseAI = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// Create a `TemplateGenerativeModel` instance.
var model = firebaseAI.GetTemplateGenerativeModel();
// Start a chat session with a template.
var chatSession = model.StartChat(
// Specify your template ID.
"my-chat-template-v1-0-0"
);
// Send messages.
// The template's system instructions and model config apply to every turn automatically.
// The SDK automatically manages the state of the conversation.
try
{
var response = await chatSession.SendMessageAsync(ModelContent.Text("I need a copy of my invoice."));
Debug.Log($"Response Text: {response.Text}");
}
catch (Exception e) {
Debug.LogError($"An error occurred: {e.Message}");
}
การเรียกใช้ฟังก์ชัน
หากยังไม่ได้อ่าน โปรดอ่านคู่มือทั่วไปสำหรับการ เรียกใช้ฟังก์ชัน เมื่อ ไม่ ได้ใช้เทมเพลตข้อความแจ้งของเซิร์ฟเวอร์ คู่มือนี้เกี่ยวกับการใช้เทมเพลตข้อความแจ้งของเซิร์ฟเวอร์จะถือว่าคุณเข้าใจวิธีการทำงานของการเรียกใช้ฟังก์ชันโดยทั่วไป
รูปแบบพื้นฐานของเทมเพลตข้อความแจ้งของเซิร์ฟเวอร์
สำหรับ Firebase AI Logic คอนโซล Firebase จะมี UI ที่แนะนำเพื่อให้คุณระบุข้อมูลเมตาและเนื้อหาของเทมเพลต
เทมเพลตข้อความแจ้งของเซิร์ฟเวอร์ใช้ไวยากรณ์และรูปแบบที่อิงตาม Dotprompt ดูรายละเอียดเพิ่มเติมได้ที่ รูปแบบ ไวยากรณ์ และตัวอย่างของเทมเพลต
เทมเพลตตัวอย่างด้านล่างแสดงคอมโพเนนต์ที่สำคัญที่สุดสำหรับเทมเพลตเมื่อใช้การเรียกใช้ฟังก์ชัน โปรดทราบสิ่งต่อไปนี้
ในข้อมูลเมตาของเทมเพลต ให้ระบุฟังก์ชันที่โมเดลเข้าถึงได้โดยระบุการประกาศฟังก์ชันในออบเจ็กต์
toolsกำหนด
name(ต้องระบุ) และdescription(ไม่บังคับ) สำหรับแต่ละฟังก์ชันที่โมเดลเข้าถึงได้กำหนดสคีมาสำหรับแต่ละฟังก์ชันที่โมเดลเข้าถึงได้
เทมเพลตตัวอย่างด้านล่างนี้ถือว่าคุณกำลังกำหนดสคีมาของฟังก์ชันในเทมเพลต อย่างไรก็ตาม คุณสามารถระบุสคีมาของฟังก์ชันในโค้ดฝั่งไคลเอ็นต์แทนได้ สคีมาที่กำหนดไว้ในโค้ดฝั่งไคลเอ็นต์ จะลบล้าง สคีมาใดก็ตามที่กำหนดไว้ในเทมเพลต ในภายหลังของหน้านี้ คุณจะเห็นตัวอย่างของ เทมเพลตและโค้ดฝั่งไคลเอ็นต์สำหรับ การกำหนดสคีมาในโค้ดฝั่งไคลเอ็นต์
ในเนื้อหาของเทมเพลต ให้เพิ่มแท็ก
{{history}}ซึ่งจะบอกเทมเพลต ว่าจะแทรกการสนทนาที่จัดการโดย Client SDK ไว้ที่ใด
เทมเพลตตัวอย่างที่มีการกำหนดสคีมาของฟังก์ชันในเทมเพลต
---
model: gemini-3-flash-preview
tools:
- name: fetchWeather
description: Get the weather conditions for a specific city on a specific date.
input:
schema:
location(object, The name of the city and its state for which to get the weather. Only cities in the USA are supported.):
city: string, The city of the location.
state: string, The state of the location.
date: string, The date for which to get the weather. Date must be in the format YYYY-MM-DD.
---
What was the weather like in Boston, Massachusetts on 10/17 in year 2024?
{{history}}
ใช้เทมเพลตในโค้ด
|
คลิกผู้ให้บริการ Gemini API เพื่อดูเนื้อหาเฉพาะของผู้ให้บริการ และโค้ดในหน้านี้ |
โค้ดฝั่งไคลเอ็นต์ตัวอย่างด้านล่างแสดงวิธีใช้เทมเพลตในโค้ด โปรดทราบสิ่งต่อไปนี้
ใช้
templateGenerativeModelร่วมกับstartChatและsendMessageเมื่อใช้การโต้ตอบหลายรอบระหว่างการเริ่มต้นโมเดลในโค้ดฝั่งไคลเอ็นต์ อย่า ระบุฟังก์ชันที่โมเดลเข้าถึงได้ แต่ให้ระบุฟังก์ชันในออบเจ็กต์
toolsของข้อมูลเมตาของเทมเพลต (ดูด้านบน)โค้ดฝั่งไคลเอ็นต์ตัวอย่างด้านล่างนี้ถือว่าคุณกำลังกำหนดสคีมาของฟังก์ชันในเทมเพลต หากคุณตัดสินใจกำหนดสคีมาในโค้ดฝั่งไคลเอ็นต์แทน สคีมาดังกล่าว จะลบล้าง สคีมาที่กำหนดไว้ในเทมเพลต ในภายหลังของหน้านี้ คุณจะเห็น เทมเพลตตัวอย่างและโค้ดฝั่งไคลเอ็นต์สำหรับ การกำหนดสคีมาในโค้ดฝั่งไคลเอ็นต์
ตรวจสอบว่าโมเดลแสดงผลการเรียกใช้ฟังก์ชันเป็นส่วนหนึ่งของการดำเนินการตามคำขอหรือไม่ หากแสดงผล แอปของคุณต้องเรียกใช้ตรรกะในเครื่องแล้วส่งผลลัพธ์กลับไปยังโมเดล
โค้ดฝั่งไคลเอ็นต์ตัวอย่างที่มีการกำหนดสคีมาของฟังก์ชันในเทมเพลต
Swift
For Swift, using server prompt templates with multi-turn interactions is not yet supported. Check back soon!
Kotlin
// ...
// Initialize the Gemini Developer API backend service.
// Create a `TemplateGenerativeModel` instance.
val model = Firebase.ai(backend = GenerativeBackend.googleAI())
.templateGenerativeModel()
// Start a chat session with a template that has functions listed as tools.
val chatSession = model.startChat(
// Specify your template ID
templateId = "my-function-calling-template-v1-0-0",
inputs = emptyMap()
)
// Send a message that might trigger a function call.
val response = chatSession.sendMessage(
content("user") { text(userMessage) }
)
// When the model responds with one or more function calls, invoke the function(s).
// Note that this is the same as when *not* using server prompt templates.
val functionCalls = response.functionCalls
val fetchWeatherCall = functionCalls.find { it.name == "fetchWeather" }
// Forward the structured input data from the model to the hypothetical external API.
val functionResponse = fetchWeatherCall?.let {
// Alternatively, if your `Location` class is marked as @Serializable, you can use
// val location = Json.decodeFromJsonElement(it.args["location"]!!)
val location = Location(
it.args["location"]!!.jsonObject["city"]!!.jsonPrimitive.content,
it.args["location"]!!.jsonObject["state"]!!.jsonPrimitive.content
)
val date = it.args["date"]!!.jsonPrimitive.content
fetchWeather(location, date)
}
Java
For Java, using server prompt templates with multi-turn interactions is not yet supported. Check back soon!
Web
// ...
// Initialize the Gemini Developer API backend service.
const ai = getAI(app, { backend: new GoogleAIBackend() });
// Create a `TemplateGenerativeModel` instance.
const model = getTemplateGenerativeModel(ai);
// Start a chat session with a template that has functions listed as tools.
const chatSession = model.startChat({
// Specify your template ID
templateId: 'my-function-calling-template-v1-0-0',
});
// Send a message that might trigger a function call.
const result = await chatSession.sendMessage(userMessage);
// When the model responds with one or more function calls, invoke the function(s).
// Note that this is the same as when *not* using server prompt templates.
const functionCalls = result.response.functionCalls();
let functionCall;
let functionResult;
if (functionCalls.length > 0) {
for (const call of functionCalls) {
if (call.name === "fetchWeather") {
// Forward the structured input data prepared by the model
// to the hypothetical external API.
functionResult = await fetchWeather(call.args);
functionCall = call;
}
}
}
Dart
// ...
// Initialize the Gemini Developer API backend service.
// Create a `TemplateGenerativeModel` instance.
final model = FirebaseAI.googleAI().templateGenerativeModel()
// Start a chat session with a template that has functions listed as tools.
var chatSession = model.startChat(
// Specify your template ID
'my-function-calling-template-v1-0-0',
);
// Send a message that might trigger a function call.
var response = await chatSession.sendMessage(
Content.text(userMessage),
);
// Check if the model wants to call a function.
// Note that this is the same as when *not* using server prompt templates.
final functionCalls = response?.functionCalls.toList();
// When the model responds with one or more function calls, invoke the function(s).
if (functionCalls != null && functionCalls.isNotEmpty) {
for (final functionCall in functionCalls) {
if (functionCall.name == 'fetchWeather') {
Map<String, dynamic> location =
functionCall.args['location']! as Map<String, dynamic>;
var date = functionCall.args['date']! as String;
var city = location['city'] as String;
var state = location['state'] as String;
final functionResult =
await fetchWeather(Location(city, state), date);
// Send the response to the model so that it can use the result to
// generate text for the user.
response = await chatSession.sendMessage(
Content.functionResponse(functionCall.name, functionResult),
);
}
}
}
Unity
// ...
// Initialize the Gemini Developer API backend service.
var firebaseAI = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());
// Create a `TemplateGenerativeModel` instance.
var model = firebaseAI.GetTemplateGenerativeModel();
// Start a chat session with a template that has functions listed as tools.
var chatSession = model.StartChat(
// Specify your template ID
"my-function-calling-template-v1-0-0"
);
try
{
// Send a message that might trigger a function call.
var response = await chatSession.SendMessageAsync(ModelContent.Text(userMessage));
var functionResponses = new List();
// When the model responds with one or more function calls, invoke the function(s).
// Note that this is the same as when *not* using server prompt templates.
foreach (var functionCall in response.FunctionCalls) {
if (functionCall.Name == "fetchWeather") {
// TODO(developer): Handle invalid arguments.
var location = functionCall.Args["location"] as Dictionary<string, object>;
var city = location["city"] as string;
var state = location["state"] as string;
var date = functionCall.Args["date"] as string;
functionResponses.Add(ModelContent.FunctionResponse(
name: functionCall.Name,
// Forward the structured input data prepared by the model
// to the hypothetical external API.
response: FetchWeather(city: city, state: state, date: date)
));
}
// TODO(developer): Handle other potential function calls, if any.
}
// Send the function responses back to the model.
var functionResponseResult = await chatSession.SendMessageAsync(functionResponses);
}
catch (Exception e) {
Debug.LogError($"An error occurred: {e.Message}");
}
การเรียกใช้ฟังก์ชัน - กำหนดสคีมาในโค้ดฝั่งไคลเอ็นต์
โปรดอ่านส่วนด้านบนเกี่ยวกับวิธีการทำงานของการเรียกใช้ฟังก์ชันกับ
เทมเพลตข้อความแจ้งของเซิร์ฟเวอร์ (โดยเฉพาะการใช้แท็ก
{{history}} ในเนื้อหาของ
เทมเพลต) ส่วนนี้มีเทมเพลตตัวอย่างและโค้ดฝั่งไคลเอ็นต์หากคุณต้องการกำหนดสคีมาของฟังก์ชันในโค้ดฝั่งไคลเอ็นต์ (แทนที่จะกำหนดในเทมเพลต)
โปรดทราบสิ่งต่อไปนี้เกี่ยวกับการกำหนดสคีมาของฟังก์ชันในโค้ดฝั่งไคลเอ็นต์
หากคุณกำหนดสคีมาของฟังก์ชันในโค้ดฝั่งไคลเอ็นต์ (ดังที่แสดงในตัวอย่างด้านล่าง) สคีมาฝั่งไคลเอ็นต์ จะลบล้าง สคีมาที่กำหนดไว้ในเทมเพลตสำหรับฟังก์ชันนั้น
หากต้องการกำหนดสคีมาของฟังก์ชันในโค้ดฝั่งไคลเอ็นต์ ให้เขียนการประกาศฟังก์ชัน แล้วระบุการประกาศใน
startChat, ไม่ใช่ระหว่างการเริ่มต้นโมเดล (ซึ่งเป็นสิ่งที่คุณทำเมื่อไม่ได้ใช้ เทมเพลตข้อความแจ้งของเซิร์ฟเวอร์)แม้ว่าการประกาศฟังก์ชันจะระบุ
nameแต่เทมเพลตก็ยังต้องระบุฟังก์ชันที่คุณต้องการให้โมเดลเข้าถึงได้nameในเทมเพลตต้องตรงกับnameในโค้ดฝั่งไคลเอ็นต์
เทมเพลตตัวอย่างที่มีการกำหนดสคีมาของฟังก์ชันในโค้ดฝั่งไคลเอ็นต์
---
model: gemini-3-flash-preview
tools:
- name: fetchWeather
description: Get the weather conditions for a specific city on a specific date.
---
What was the weather like in Boston, Massachusetts on 10/17 in year 2024, formatted in CELSIUS?
{{history}}
โค้ดฝั่งไคลเอ็นต์ตัวอย่างที่มีการกำหนดสคีมาของฟังก์ชันในโค้ดฝั่งไคลเอ็นต์
(ดูรายละเอียดที่ละไว้ในตัวอย่างนี้ได้จาก
โค้ดฝั่งไคลเอ็นต์ตัวอย่างด้านบน)
Swift
For Swift, using server prompt templates with multi-turn interactions is not yet supported. Check back soon!
Kotlin
// ...
// Initialize your desired Gemini API backend service.
// Create a `TemplateGenerativeModel` instance.
...
// Define the schema for any functions listed in your template.
val fetchWeatherTool = functionDeclarations(
functionDeclarations = listOf(
FunctionDeclaration(
name = "fetchWeather",
description = "Returns the weather for a given location at a given time",
parameters = mapOf(
"location" to Schema.obj(
description = "The name of the city and its state for which to get the weather. Only cities in the USA are supported.",
properties = mapOf(
"city" to Schema.string(
description = "The city of the location."
),
"state" to Schema.string(
description = "The state of the location."
),
"zipCode" to Schema.string(
description = "Optional zip code of the location.",
nullable = true
)
),
optionalProperties = listOf("zipCode")
),
"date" to Schema.string(
description = "The date for which to get the weather. Date must be in the format: YYYY-MM-DD."
),
"unit" to Schema.enumeration(
description = "The temperature unit.",
values = listOf("CELSIUS", "FAHRENHEIT"),
nullable = true
)
),
optionalParameters = listOf("unit"),
)
)
)
// Start a chat session with a template that has functions listed as tools.
var chatSessionWithSchemaOverride = model.startChat(
// Specify your template ID.
templateId = "my-function-calling-template-with-no-function-schema-v1-0-0",
// In `startChat`, provide the schema for any functions listed in your template.
// This client-side schema will override any schema defined in the template.
tools = listOf(fetchWeatherTool)
)
// Send a message that might trigger a function call.
...
// When the model responds with one or more function calls, invoke the function(s).
// Note that this is the same as when *not* using server prompt templates.
...
// Forward the structured input data from the model to the hypothetical external API.
...
Java
For Java, using server prompt templates with multi-turn interactions is not yet supported. Check back soon!
Web
// ...
// Initialize your desired Gemini API backend service.
...
// Create a `TemplateGenerativeModel` instance.
...
// Start a chat session with a template that has functions listed as tools.
const chatSessionWithSchemaOverride = model.startChat({
// Specify your template ID.
templateId: 'my-function-calling-template-with-no-function-schema-v1-0-0',
// In `startChat`, provide the schema for any functions listed in your template.
// This client-side schema will override any schema defined in the template.
tools: [
{
functionDeclarations: [
{
name: "fetchWeather",
parameters: {
type: Type.OBJECT,
properties: {
location: {
type: Type.OBJECT,
description: "The name of the city and its state for which to get the weather. Only cities in the USA are supported.",
properties: {
city: {
type: Type.STRING,
description: "The city of the location."
},
state: {
type: Type.STRING,
description: "The state of the location."
},
zipCode: {
type: Type.INTEGER,
description: "Optional zip code of the location.",
nullable: true
},
},
required: ["city", "state"],
},
date: {
type: Type.STRING,
description: "The date for which to get the weather. Date must be in the format: YYYY-MM-DD.",
},
unit: {
type: Type.STRING,
description: "The temperature unit.",
enum: ["CELSIUS", "FAHRENHEIT"],
nullable: true,
},
},
required: ["location", "date"],
},
},
],
}
],
});
// Send a message that might trigger a function call.
...
// When the model responds with one or more function calls, invoke the function(s).
// Note that this is the same as when *not* using server prompt templates.
...
Dart
// ...
// Initialize your desired Gemini API backend service.
// Create a `TemplateGenerativeModel` instance.
...
// Start a chat session with a template that has functions listed as tools.
final chatSessionWithSchemaOverride = model?.startChat(
// Specify your template ID.
'my-function-calling-template-with-no-function-schema-v1-0-0',
inputs: {},
// In `startChat`, provide the schema for any functions listed in your template.
// This client-side schema will override any schema defined in the template.
tools: [
TemplateTool.functionDeclarations(
[
TemplateFunctionDeclaration(
'fetchWeather',
parameters: {
'location': JSONSchema.object(
description:
'The name of the city and its state for which to get '
'the weather. Only cities in the USA are supported.',
properties: {
'city': JSONSchema.string(
description: 'The city of the location.',
),
'state': JSONSchema.string(
description: 'The state of the location.',
),
'zipCode': JSONSchema.integer(
description: 'Optional zip code of the location.',
nullable: true,
),
},
optionalProperties: ['zipCode'],
),
'date': JSONSchema.string(
description: 'The date for which to get the weather. '
'Date must be in the format: YYYY-MM-DD.',
),
'unit': JSONSchema.enumString(
enumValues: ['CELSIUS', 'FAHRENHEIT'],
description: 'The temperature unit.',
nullable: true,
),
},
optionalParameters: ['unit'],
),
],
),
],
);
// Send a message that might trigger a function call.
...
// Check if the model wants to call a function.
// Note that this is the same as when *not* using server prompt templates.
...
Unity
// ...
// Initialize your desired Gemini API backend service.
...
// Create a `TemplateGenerativeModel` instance.
...
// Define the schema for any functions listed in your template.
var fetchWeatherTool = new TemplateTool.FunctionDeclaration(
name: "fetchWeather",
parameters: new Dictionary<string, JsonSchema>() {
{ "location", JsonSchema.Object(
description: "The name of the city and its state for which to get the weather. Only cities in the USA are supported.",
properties: new Dictionary<string, JsonSchema>() {
{ "city", JsonSchema.String(description: "The city of the location.") },
{ "state", JsonSchema.String(description: "The state of the location.") },
{ "zipCode", JsonSchema.Int(description: "Optional zip code of the location.", nullable: true) }
},
optionalProperties: new[] { "zipCode" })
},
{ "date", JsonSchema.String(description: "The date for which to get the weather. Date must be in the format: YYYY-MM-DD.")},
{ "unit", JsonSchema.Enum(
values: new[] { "CELSIUS", "FAHRENHEIT" },
description: "The temperature unit.",
nullable: true)
}
},
optionalParameters: new[] { "unit" }
);
// Start a chat session with a template that has functions listed as tools.
var chatSessionWithSchemaOverride = model.StartChat(
// Specify your template ID.
templateId: "my-function-calling-template-with-no-function-schema-v1-0-0",
// In `startChat`, provide the schema for any functions listed in your template.
// This client-side schema will override any schema defined in the template.
tools: new[] { fetchWeatherTool }
);
try
{
// Send a message that might trigger a function call.
...
// When the model responds with one or more function calls, invoke the function(s).
// Note that this is the same as when *not* using server prompt templates.
...
}
// ...
ขั้นตอนต่อไปคืออะไร
ดูข้อมูลเกี่ยวกับ แนวทางปฏิบัติแนะนำและข้อควรพิจารณา สำหรับการใช้เทมเพลตข้อความแจ้งของเซิร์ฟเวอร์
ดูรายละเอียดเกี่ยวกับ รูปแบบและไวยากรณ์ของเทมเพลต พร้อมตัวอย่าง
จัดการเทมเพลต, ซึ่งรวมถึงการแก้ไข การล็อก และการควบคุมเวอร์ชัน