Variables

變數可用於儲存及擷取對話輪次中的資料。讓代理記住資訊並維持脈絡。 為代理程式撰寫提示指令時,可以加入這些變數的參照。

變數類型

代理程式建構工具支援指令中的兩種不同變數類型:靜態變數和動態變數。

選擇正確的類型取決於變數的值是否需要在使用者工作階段期間變更,以及您需要針對延遲時間進行多少最佳化。

靜態變數

靜態變數會直接編譯到代理程式提示中,然後再呼叫模型。這些字串會直接取代文字,且更新頻率不高。

靜態變數可盡量提升指令遵循品質,適用於許多情境的條件式指令。針對設定資料、嚴格的業務規則,或在單一對話生命週期內不會變更的大型情境酬載,請使用靜態變數。

如要在指令中依名稱參照靜態變數,請使用雙大括號:{{variable_name}}。

舉例來說,如果您要建立零售業代理程式,且產品目錄龐大又靜態,可以使用類似以下的指令:

You are a helpful shopping assistant.
Please follow these business rules: {{business_rules}}.

動態變數

在對話期間,工具、回呼或 API 請求隨時可以更新動態變數。系統不會直接將這些值代入提示文字。 不過,系統會將更新後的新值以 state update 事件的形式,附加至對話記錄。例如:<state_update>var_name: value</state_update>。

使用動態變數,取得工作階段期間從使用者擷取的資訊、從外部 API (工具) 擷取的輸出內容,或對話進行時變動的任何狀態。

動態變數有下列缺點:

  • 動態變數會附加至對話記錄,因此如果工作階段過長而超出內容視窗限制,系統修剪記錄時可能會遺失變數值,導致服務專員忘記這些值。
  • 與靜態變數相比,動態變數可能會導致指令遵循度略為降低。這是因為變數值定義的位置離指令較遠。這也可能增加延遲,因為模型思考需要從指令中找出更遠的值。

如要在指令中依名稱參照動態變數,請使用單一大括號:{variable_name}。

舉例來說,如果您要建立的代理程式需要驗證使用者身分,然後使用工具查詢特定帳戶詳細資料,可以採用類似以下的指令:

If the user asks for their balance, call the {@TOOL: LookupBalance}.
The tool will update the {current_account_balance} variable.
Always share the {current_account_balance} with the user.

變數資料

變數包含下列資料:

  • 名稱:使用蛇形命名法的變數名稱
  • 類型:基礎資料類型:
    • 文字:字串值
    • 數字:數值
    • 是/否:布林值
    • 自訂物件:您提供物件的結構定義
    • 清單:變數清單。以半形逗號分隔清單的形式提供值。
  • 預設值:變數的預設值
  • 說明:變數的選填說明

更新變數值

代理程式本身無法更新變數值,但工具和回呼可以更新變數值。

代理程式變數會使用 ADK 環境狀態,可用於更新變數。您可以在 Python 工具程式碼中使用名為 context 的全域變數。 舉例來說,您可以在 Python 工具中使用下列陳述式,透過 ADK 功能更新變數:

context.state["variable_name"] = value

內建工作階段情境變數

除了自訂變數,OpenAPI 和 MCP 工具也可以參照內建的工作階段脈絡變數。這些參數預設可用,且可透過 HTTP 標頭或要求參數傳遞。這些變數無法在指令中參照,也無法手動覆寫。可用的內建變數如下:

  • $context.project_id、$context.project_number、$context.location、$context.app_id、$context.session_id、$context.turn_index,適用於應用程式層級/工作階段層級的資源 ID。
  • $context.variables.variable_name,適用於特定代理程式變數值。
  • $context.variables,做為所有代理程式變數值的物件。