開始使用伺服器提示詞範本


在傳送給模型的每個要求中,您會傳送提示,並視需要傳送結構定義和設定,藉此控制模型的回覆。使用 Firebase AI Logic 時,您可以直接從用戶端程式碼傳送所有這類資訊,也可以使用伺服器提示詞範本,在伺服器端指定這類資訊。

使用伺服器提示詞範本時,你會將提示詞、結構定義和設定儲存在伺服器端,應用程式只會將金鑰 (範本 ID) 從用戶端傳遞至伺服器,參照特定範本,以及該範本的必要輸入內容。

使用伺服器提示詞範本時,你會將提示詞和設定儲存在伺服器端,然後只在應用程式的程式碼庫中提供金鑰 (範本 ID)。這種做法的優點包括:

  • 防止在用戶端公開提示

  • 更新提示詞和設定,不必發布新版應用程式

本指南說明如何開始使用伺服器提示範本。

跳到高階總覽 跳到詳細操作說明

支援的機型和功能



高階總覽

以下是使用伺服器提示範本的基本工作流程:

  1. 使用 Firebase 控制台的引導式 UI 建立範本。

  2. 使用 Firebase 控制台的測試功能,在實際要求中測試範本。

  3. 使用 templateGenerativeModel 從應用程式的程式碼存取範本。

伺服器提示詞範本的基本格式

對於 Firebase AI LogicFirebase 控制台提供導覽式 UI,可供您指定範本的前言和內容。

伺服器提示詞範本使用以 Dotprompt 為基礎的語法和格式。 詳情請參閱範本格式、語法和範例

以下範本範例顯示向 Gemini 模型發出要求時,範本最重要的元件:

---
model: 'gemini-3.6-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.ai(backend = GenerativeBackend.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 = result.response;
const text = response.text();

Dart


// ...

// Initialize the Gemini Developer API backend service
// Create a `TemplateGenerativeModel` instance
var _model = FirebaseAI.googleAI().templateGenerativeModel()

var customerName = 'Jane';

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

var 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();

var customerName = "Jane";

try
{
   var response = await model.GenerateContentAsync(
      // Specify your template ID
      "my-first-template-v1-0-0",
      // Provide the values for any input variables required by your template
      new Dictionary<string, object> {
         { "customerName", customerName },
      }
   );
   Debug.Log($"Response Text: {response.Text}");
}
catch (Exception e) {
  Debug.LogError($"An error occurred: {e.Message}");
}



詳細操作說明

本節提供詳細操作說明,協助您建立、測試及使用伺服器提示範本。

事前準備

  • 如果尚未完成,請參閱入門指南,瞭解如何設定 Firebase 專案、將應用程式連結至 Firebase、新增 SDK、為所選Gemini API供應商初始化後端服務,以及建立 GenerativeModel 執行個體。

  • 請確認您具備建立及管理伺服器提示範本的必要權限。根據預設,這些權限都包含在「擁有者」角色中。

  • 如果您使用 Agent Platform Gemini API (formerly Vertex AI)if your use case requires location-based restrictions,我們支援範本的進階工作流程

步驟 1:建立伺服器提示詞範本

在大多數情況下,您會在 Firebase 控制台中建立及管理伺服器提示範本。

  1. Firebase 控制台中,依序前往「AI Services」(AI 服務) >「AI Logic」(AI 邏輯) >「提示範本」分頁標籤

  2. 按一下「建立新範本」,然後選取新手範本選項。

    • 這些入門範本提供常見用途的格式和語法。不過,無論選取哪個選項,您都可以完全變更範本,以符合自身需求。

    • 本入門指南假設您已選取 Input + System Instructions 選項。

  3. 輸入範本的 ID:

    • 範本名稱:這是範本的顯示名稱 (例如 My First Template),只會在 Firebase 介面 (如 Firebase 控制台) 中顯示。

    • 範本 ID:這是範本的專屬 ID,在 Firebase 專案中不得重複 (例如 my-first-template-v1-0-0)。在應用程式中提出要求時,會參照這個 ID。

      • 建議您使用版本管理系統來管理範本 ID。

      • 範本 ID 最多可包含 63 個字元,且只能使用小寫英文字母、數字和連字號。

  4. 視需要修改範本的「Configuration (frontmatter)」部分。

    • 這個部分至少須包含模型名稱,例如:

      ---
      model: 'gemini-3.6-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. 如果提示使用輸入變數,請在「測試輸入」欄位中加入測試值。在此範例中:

      {
        "customerName": "Jane"
      }
    
  3. 如果 Firebase 專案中已啟用多個 Gemini API 供應商,您可以選擇要使用哪個供應商來發出測試要求。如果控制台顯示這個選項,請選取 Gemini Developer APIAgent Platform Gemini API (舊稱 Vertex AI)。

    請注意,這項選取項目只適用於透過 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.ai(backend = GenerativeBackend.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 = result.response;
const text = response.text();

Dart

Flutter 外掛程式即將支援伺服器提示範本!

建立 templateGenerativeModel 執行個體 (或 templateImagenModel),以便在要求中使用範本。


// ...

// Initialize the Gemini Developer API backend service
// Create a `TemplateGenerativeModel` instance
var _model = FirebaseAI.googleAI().templateGenerativeModel()

var customerName = 'Jane';

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

var text = response?.text;
print(text);

Unity

建立 templateGenerativeModel 執行個體 (或 templateImagenModel),以便在要求中使用範本。


// ...

// Initialize the Gemini Developer API backend service
var firebaseAI = FirebaseAI.GetInstance(FirebaseAI.Backend.GoogleAI());

// Create a `TemplateGenerativeModel` instance
var model = firebaseAI.GetTemplateGenerativeModel();

var customerName = "Jane";

try
{
   var response = await model.GenerateContentAsync(
      // Specify your template ID
      "my-first-template-v1-0-0",
      // Provide the values for any input variables required by your template
      new Dictionary<string, object> {
         { "customerName", customerName },
      }
   );
   Debug.Log($"Response Text: {response.Text}");
}
catch (Exception e) {
  Debug.LogError($"An error occurred: {e.Message}");
}



後續步驟