變數可用來儲存及擷取多輪對話中的資料。讓代理記住資訊並掌握脈絡。撰寫代理的提示指令時,可以加入這些變數的參照。
變數類型
代理建構工具支援指令中的兩種變數類型:靜態變數和動態變數。
選擇合適的類型時,應考量變數值是否需要在使用者工作階段期間變更,以及需要對延遲時間進行多少最佳化。
靜態變數
靜態變數會在模型呼叫之前,直接編譯至代理提示詞。這類變數會直接以 1:1 的方式替換文字,且不常更新。
靜態變數可盡可能提高指令遵循品質,適合用於多種情境的條件式指令。請使用靜態變數,儲存設定資料、嚴格的業務規則,或在單一對話期間不會變更的大型情境酬載。
如要在指令中依名稱參照靜態變數,請使用雙大括號:{{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.
變數資料
變數包含下列資料:
- Name:使用蛇形命名法的變數名稱
- Type:基礎資料類型:
- 文字:字串值
- 數字:數值
- 是/否:布林值
- 自訂物件:需提供物件結構定義
- List:變數清單。需以逗號分隔的方式提供值。
- 預設值:變數的預設值
- 說明:變數的說明 (選填)
更新變數值
代理本身無法更新變數值,但工具和回呼可以。
代理變數會使用 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(以物件形式)。