服务器提示模板使用入门


在向模型发送的每个请求中,您都可以发送提示,还可以选择发送架构和配置来控制模型的回答。使用 Firebase AI Logic 时,您可以直接从客户端代码发送所有这些信息,也可以使用服务器提示模板在服务器端指定这些信息。

使用服务器提示模板时,您可以在服务器端存储提示、架构和配置,而您的应用仅需将引用特定模板的密钥(模板 ID)以及该模板所需的输入从客户端传递到服务器。

使用服务器提示模板时,您可以在服务器端存储提示和配置,然后在应用的代码库中仅提供一个密钥(模板 ID)。这种方法的一些好处包括:

  • 防止在客户端公开提示

  • 无需发布新应用版本即可更新提示和配置

本指南介绍了如何开始使用服务器提示模板。

跳转到简要概览 跳转到详细说明

支持的型号和功能



简要概览

以下是使用服务器提示模板的基本工作流程:

  1. 使用 Firebase 控制台中的引导式界面创建模板。

  2. 使用 Firebase 控制台的测试体验在真实请求中测试模板。

  3. 从应用访问模板。

服务器提示模板的基本格式

对于 Firebase AI LogicFirebase 控制台提供了一个引导式界面,可供您指定模板的内容。

服务器提示模板使用基于 Dotprompt 的语法和格式。 如需了解详情,请参阅模板格式、语法和示例

以下是向 Gemini 模型发出示例请求时最重要的组成部分:

---
model: 'gemini-2.5-flash'
---

{{role "system"}}
All output must be a clearly structured invoice document.
Use a tabular or clearly delineated list format for line items.

{{role "user"}}
Create an example customer invoice for a customer named {{customerName}}.
  • 三条短划线之间的顶部部分包含模型名称,以及您想在请求中发送的任何模型配置、输入验证或架构(可选)。它以键值对的形式编写,通常称为 YAML 前置元数据

  • 模板的正文包含提示。它还可以选择性地包含系统指令和输入值(使用 Handlebars 语法)。

在代码中使用模板

点击您的 Gemini API 提供商,以查看此页面上特定于提供商的内容和代码。

以下是在代码中使用模板的方法:

Swift


// ...

// Initialize the Gemini Developer API backend service
// Create a `TemplateGenerativeModel` instance
let model = FirebaseAI.firebaseAI(backend: .googleAI()).templateGenerativeModel()

let customerName = "Jane"

do {
    let response = try await model.generateContent(
        // Specify your template ID
        templateID: "my-first-template-v1-0-0",
        // Provide the values for any input variables required by your template.
        inputs: [
            "customerName": customerName
        ]
    )
    if let text = response.text {
        print("Response Text: \(text)")
    }
} catch {
    print("An error occurred: \(error)")
}
print("\n")

Kotlin


// ...

// Initialize the Gemini Developer API backend service
// Create a `TemplateGenerativeModel` instance
val model = Firebase.googleAI.templateGenerativeModel()

val customerName = "Jane"

val response = model.generateContent(
    // Specify your template ID
    "my-first-template-v1-0-0",
    // Provide the values for any input variables required by your template.
    mapOf(
        "customerName" to customerName
    )
)

val text = response.text
println(text)

Java


// ...

// Initialize the Gemini Developer API backend service
// Create a `TemplateGenerativeModel` instance
TemplateGenerativeModel generativeModel = FirebaseAI.getInstance().templateGenerativeModel();

TemplateGenerativeModelFutures model = TemplateGenerativeModelFutures.from(generativeModel);

String customerName = "Jane";

Future response = model.generateContent(
    // Specify your template ID
    "my-first-template-v1-0-0",
    // Provide the values for any input variables required by your template.
    mapOf("customerName", customerName)
);
addCallback(response,
       new FutureCallback() {
           public void onSuccess(GenerateContentResponse result) {
             System.out.println(result.getText());
           }
           public void onFailure(Throwable t) {
             reportError(t);
           }
    }
executor);

Web


// ...

// Initialize the Gemini Developer API backend service
const ai = getAI(app, { backend: new GoogleAIBackend() });

// Create a `TemplateGenerativeModel` instance
const model = getTemplateGenerativeModel(ai);

const customerName = 'Jane';

const result = await model.generateContent(
  // Specify your template ID
  'my-first-template-v1-0-0',
  // Provide the values for any input variables required by your template
  {
    customerName: customerName,
  }
);

const response = response.result;
const text = response.text();

Dart

Flutter 插件即将支持服务器提示模板!

Unity

Unity 软件包很快将支持服务器提示模板!



详细说明

本部分详细介绍了如何创建、测试和使用服务器提示模板。

准备工作

  • 如果您尚未完成入门指南,请先完成该指南。该指南介绍了如何设置 Firebase 项目、将应用连接到 Firebase、添加 SDK、为所选的 Gemini API 提供程序初始化后端服务,以及创建 GenerativeModel 实例。

  • 确保您拥有创建和管理服务器提示模板所需的权限。默认情况下,所有这些权限都包含在“所有者”角色中。

  • 如果您使用 Vertex AI Gemini API如果您的使用情形需要基于地理位置的限制,我们支持模板的高级工作流

第 1 步:创建服务器提示模板

在大多数使用情形下,您可以在 Firebase 控制台中创建和管理服务器提示模板。

  1. Firebase 控制台中,前往Firebase AI Logic 提示模板标签页

  2. 点击创建新模板,然后选择一个初始模板选项。

    • 这些初始模板提供了部分常见用例的格式和语法。不过,无论您选择哪个选项,都可以完全更改模板以满足您的需求。

    • 本入门指南假定您已选择 Input + System Instructions 选项。

  3. 输入模板的标识符:

    • 模板名称:这是模板的显示名称(例如 My First Template)。它仅在 Firebase 界面(例如 Firebase 控制台)中可见。

    • 模板 ID:这必须是 Firebase 项目中模板的唯一 ID(例如 my-first-template-v1-0-0)。您将在应用的请求中引用此 ID。

      • 我们建议您为模板 ID 使用版本控制系统

      • 模板 ID 最多可包含 63 个字符,并且可以包含小写字母、数字和连字符。

  4. 根据需要修改模板的配置(前言)部分。

    • 此部分必须至少包含一个模型名称,如下所示:

      ---
      model: 'gemini-2.5-flash'
      ---
      
    • 您还可以根据需要指定模型的配置以及任何输入和输出控件等。如需了解更多详情和选项,请参阅模板格式、语法和示例

  5. 根据需要修改模板的提示和(如适用)系统指令部分。

    • 此部分必须至少包含要发送给模型的文本提示。

      Write a story about a magic backpack.
      
    • 您还可以创建更复杂的提示,例如以下选项。 如需了解更多详情和选项,请参阅模板格式、语法和示例

      • (可选,视情况而定)使用 {{role "system"}} 语法指定系统指令,并使用 {{role "user"}} 语法指定文本提示。

      • (可选)使用 Handlebars 语法(例如 {{customerName}})指定输入变量。您可以在模板中提供默认值,但此输入变量的值通常在请求中传递。

      {{role "system"}}
      All output must be a clearly structured invoice document.
      Use a tabular or clearly delineated list format for line items.
      
      {{role "user"}}
      Create an example customer invoice for a customer named {{customerName}}.
      

第 2 步:在 Firebase 控制台中测试模板

Firebase 控制台可为您的模板提供测试体验。通过此体验,您可以了解使用模板时会发生什么情况,包括请求的格式以及实际请求的输出。

  1. 点击保存模板,以便测试模板。

    您稍后可以随时修改甚至删除模板。您以后无法更改的唯一值是模板 ID。

  2. 如果提示使用输入变量,请在 Test input 字段中添加测试值。在此示例中:

      {
        "customerName": "Jane"
      }
    
  3. 如果您的 Firebase 项目中启用了多个 Gemini API 提供方,您可以选择要用于测试请求的提供方。如果控制台中显示此选项,请选择 Gemini Developer APIVertex AI Gemini API

    请注意,此选择仅适用于通过 Firebase 控制台测试体验提交的请求。在应用的实际请求中,您可以像指定任何请求一样指定所选的 Gemini API 提供商。

  4. 点击创建已设置格式的测试请求按钮。

    查看界面右侧生成的格式化测试请求,并根据需要迭代更新模板的任何字段。

  5. 如果您对格式化后的测试请求感到满意,请点击运行提示测试按钮。

    查看界面右侧显示的测试响应,并根据需要迭代更新模板的任何字段。

  6. 如果您已准备好从应用的代码中访问模板,请点击模板右上角的 锁定图标锁定模板

  7. 点击关闭即可退出编辑体验。

第 3 步:通过代码访问模板

点击您的 Gemini API 提供商,以查看此页面上特定于提供商的内容和代码。

使用服务器提示模板的请求与其他请求类似,但有以下调整:

  • 使用 templateGenerativeModel(或根据需要使用 templateImagenModel)。
  • 提供模板 ID。
  • 提供模板所需的任何变量输入的值。

请注意,创建或更新模板后,您可能需要等待几分钟,让模板在 Firebase 服务器中传播,然后才能从代码中访问该模板。

Swift

创建 templateGenerativeModel 实例(或 templateImagenModel),以便在请求中使用模板。


// ...

// Initialize the Gemini Developer API backend service
// Create a `TemplateGenerativeModel` instance
let model = FirebaseAI.firebaseAI(backend: .googleAI()).templateGenerativeModel()

let customerName = "Jane"

do {
    let response = try await model.generateContent(
        // Specify your template ID
        templateID: "my-first-template-v1-0-0",
        // Provide the values for any input variables required by your template.
        inputs: [
            "customerName": customerName
        ]
    )
    if let text = response.text {
        print("Response Text: \(text)")
    }
} catch {
    print("An error occurred: \(error)")
}
print("\n")

Kotlin

创建 templateGenerativeModel 实例(或 templateImagenModel),以便在请求中使用模板。


// ...

// Initialize the Gemini Developer API backend service
// Create a `TemplateGenerativeModel` instance
val model = Firebase.googleAI.templateGenerativeModel()

val customerName = "Jane"

val response = model.generateContent(
    // Specify your template ID
    "my-first-template-v1-0-0",
    // Provide the values for any input variables required by your template.
    mapOf(
        "customerName" to customerName
    )
)

val text = response.text
println(text)

Java

创建 templateGenerativeModel 实例(或 templateImagenModel),以便在请求中使用模板。


// ...

// Initialize the Gemini Developer API backend service
// Create a `TemplateGenerativeModel` instance
TemplateGenerativeModel generativeModel = FirebaseAI.getInstance().templateGenerativeModel();

TemplateGenerativeModelFutures model = TemplateGenerativeModelFutures.from(generativeModel);

String customerName = "Jane";

Future response = model.generateContent(
    // Specify your template ID
    "my-first-template-v1-0-0",
    // Provide the values for any input variables required by your template.
    mapOf("customerName", customerName)
);
addCallback(response,
       new FutureCallback() {
           public void onSuccess(GenerateContentResponse result) {
             System.out.println(result.getText());
           }
           public void onFailure(Throwable t) {
             reportError(t);
           }
    }
executor);

Web

创建 templateGenerativeModel 实例(或 templateImagenModel),以便在请求中使用模板。


// ...

// Initialize the Gemini Developer API backend service
const ai = getAI(app, { backend: new GoogleAIBackend() });

// Create a `TemplateGenerativeModel` instance
const model = getTemplateGenerativeModel(ai);

const customerName = 'Jane';

const result = await model.generateContent(
  // Specify your template ID
  'my-first-template-v1-0-0',
  // Provide the values for any input variables required by your template
  {
    customerName: customerName,
  }
);

const response = response.result;
const text = response.text();

Dart

Flutter 插件即将支持服务器提示模板!

Unity

Unity 软件包即将支持服务器提示模板!



后续步骤