Это руководство относится ко всем функциям, которые зависят от многоходовых взаимодействий, в том числе:
Многоэтапный диалог (чат), в том числе чат с выводом только текста и итеративное редактирование изображений.
Общие сведения
При многоходовом взаимодействии SDK Firebase AI Logic управляют состоянием диалога. Это также относится к шаблонам запросов на стороне сервера.
Основной рабочий процесс для многоходовых взаимодействий и шаблонов запросов к серверу в целом такой же, как и для одноходовых запросов, но есть некоторые важные отличия:
Создайте шаблон с помощью пошагового интерфейса в консоли Firebase.
Для многоходовых взаимодействий необходимо добавить тег
{{history}}в контент шаблона. Он указывает, куда вставлять ходы диалога, управляемые клиентским SDK.Проверьте шаблон в реальном запросе, используя функцию тестирования в консоли Firebase.
При многоходовом взаимодействии консоль тестирования может помочь только с первым ходом. Вы можете проверить, как обрабатываются последующие ходы (история), используя шаблон с вашим приложением.
Получите доступ к шаблону из кода приложения с помощью
templateGenerativeModel.Для многоходовых взаимодействий необходимо использовать
startChatиsendMessage(как и в случае, когда не используются шаблоны запросов к серверу).
Обратите внимание, что для вызова функций есть ещё несколько отличий, которые описаны в соответствующем разделе ниже.
Многоходовая беседа (чат)
Если вы ещё этого не сделали, ознакомьтесь с общим руководством по созданию многоходовых диалогов (чатов), когда не используются шаблоны запросов на сервере.
Базовый формат шаблона запроса к серверу
Firebase AI LogicВ консоли Firebase есть удобный интерфейс, в котором можно указать вводную часть и содержимое шаблона.
Шаблоны запросов на сервере используют синтаксис и формат на основе Dotprompt. Подробнее о формате, синтаксисе и примерах шаблонов…
В примере шаблона ниже показаны наиболее важные компоненты для создания многоходовой беседы (чата). Обратите внимание на добавление тега {{history}} в контент шаблона. Он указывает, куда нужно вставить реплики, управляемые клиентским SDK.
---
model: 'gemini-3.8-flash'
---
{{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
// ...
// Initialize the Gemini Developer API backend service
// Create a `TemplateGenerativeModel` instance.
TemplateGenerativeModel templateModel = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.templateGenerativeModel();
// Initialize TemplateChat with history and inputs
TemplateChat templateChat = templateModel.startChat(
// Specify your template ID.
"my-chat-template-v1-0-0",
Map.of(),
Collections.emptyList()
);
TemplateChatFutures chatFutures = TemplateChatFutures.from(templateChat);
// Send messages.
// The template's system instructions and model config apply to every turn automatically.
// The SDK automatically manages the state of the conversation.
Content prompt = new Content.Builder().addText("I need a copy of my invoice.").build();
ListenableFuture responseFuture = chatFutures.sendMessage(prompt);
Futures.addCallback(responseFuture, new FutureCallback() {
@Override
public void onSuccess(GenerateContentResponse result) {
System.out.println("Response: " + result.getText());
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
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 есть удобный интерфейс, в котором можно указать вводную часть и содержимое шаблона.
Шаблоны запросов к серверу используют синтаксис и формат Dotprompt. Подробнее о формате, синтаксисе и примерах шаблонов…
В примере шаблона ниже показаны наиболее важные компоненты шаблона при использовании вызова функций. Обратите внимание:
В начале шаблона перечислите функции, к которым у модели есть доступ, добавив объявления функций в объект
tools.Определите
name(обязательно) иdescription(необязательно) для каждой функции, к которой у модели есть доступ.Определите схему для каждой функции, к которой у модели есть доступ.
В приведенном ниже примере шаблона предполагается, что вы определяете схемы функций в шаблоне. Однако вы можете предоставить схему функции в клиентском коде. Схема, определенная в клиентском коде, переопределит любую схему, определенную в шаблоне. Ниже на этой странице приведен пример шаблона и клиентского кода для определения схемы в клиентском коде.
В контент шаблона добавьте тег
{{history}}, который указывает, куда вставлять реплики, управляемые клиентским SDK.
Пример шаблона со схемой функции, определенной в шаблоне
---
model: gemini-3.8-flash
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
// ...
// Initialize the Gemini Developer API backend service.
// Create a `TemplateGenerativeModel` instance.
TemplateGenerativeModel model = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.templateGenerativeModel();
// Start a chat session with a template that has functions listed as tools.
TemplateChat chatSession = model.startChat(
// Specify your template ID.
"my-function-calling-template-v1-0-0",
Map.of(), // Inputs
List.of() // History
);
TemplateChatFutures chatFutures = TemplateChatFutures.from(chatSession);
// Send a message that might trigger a function call.
Content prompt = new Content.Builder().addText(userMessage).build();
ListenableFuture responseFuture = chatFutures.sendMessage(prompt);
Futures.addCallback(responseFuture, new FutureCallback() {
@Override
public void onSuccess(GenerateContentResponse result) {
// 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.
for (FunctionCallPart callPart : result.getFunctionCalls()) {
if ("fetchWeather".equals(callPart.getName())) {
// Forward the structured input data from the model to the hypothetical external API.
JsonObject location = (JsonObject) callPart.getArgs().get("location");
String city = ((JsonPrimitive) location.get("city")).getContent();
String state = ((JsonPrimitive) location.get("state")).getContent();
String date = ((JsonPrimitive) callPart.getArgs().get("date")).getContent();
Object response = fetchWeather(city, state, date);
}
}
}
@Override
public void onFailure(Throwable t) {
t.printStackTrace();
}
}, executor);
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.8-flash
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
TemplateFunctionDeclaration tool = new TemplateFunctionDeclaration(
"fetchWeather", // Name
JsonSchema.obj( // Parameters
Map.of(
"location", JsonSchema.obj(
Map.of(
"city", JsonSchema.string(
"The city of the location."
),
"state", JsonSchema.string(
"The state of the location."
),
"zipCode", JsonSchema.string(
"Optional zip code of the location",
true // Nullable
)
),
List.of("zipCode"),
""
),
"date", JsonSchema.string(
"The date for which to get the weather. Date must be in the format: YY-MM-DD."
),
"unit", JsonSchema.enumeration(
List.of("CELSIUS", "FAHRENHEIT"),
"The temperature unit.",
true // Nullable
)
)
),
JsonSchema.string(
"A description of the current weather."
)
);
// Initialize the Gemini Developer API backend service.
// Create a `TemplateGenerativeModel` instance.
TemplateGenerativeModel templateModel = FirebaseAI.getInstance(GenerativeBackend.googleAI())
.templateGenerativeModel(
new RequestOptions(),
List.of(TemplateTool.functionDeclarations(List.of(tool), List.of()))
);
// In `startChat`, provide the schema for any functions listed in your template.
// This client-side schema will override any schema defined in the template.
TemplateChat chat = templateModel.startChat(
// Specify your template ID.
"my-function-calling-template-with-no-function-schema-v1-0-0",
Map.of(),
List.of()
);
TemplateChatFutures futures = TemplateChatFutures.from(chat);
// 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.
...
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 chosen 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.
...
}
// ...
Что дальше?
Ознакомьтесь с рекомендациями и важными замечаниями по использованию шаблонов запросов на стороне сервера.
Подробнее о формате и синтаксисе шаблонов, а также о примерах…
Управлять шаблонами, в том числе редактировать, блокировать и контролировать версии.