您可以透過 Memory Bank,根據使用者與服務專員的對話建立長期記憶。之後,Memory Bank 會隨著時間的推移,為特定使用者新增、更新及移除回憶,並整合及自行挑選回憶。本頁說明如何觸發回憶錄產生作業,並取得回憶錄。
觸發記憶體產生作業時,Memory Bank 會自動執行下列作業:
擷取:從使用者與服務專員的對話中擷取使用者相關資訊。
合併:判斷是否應刪除或更新相同範圍的現有回憶集錦。在將新回憶與現有回憶合併前,回憶庫會先檢查新回憶是否重複或相互矛盾。
並非所有使用者代理程式互動都會導致建立或更新回憶。Memory Bank 只會儲存系統判定對日後互動有用的資訊,包括下列類型的資訊:
- 使用者資訊,例如偏好設定、姓名、關係、興趣和重要日期。例如:「我任職於 Google」、「我偏好走道座位」或「我的結婚紀念日是 12 月 31 日」。
- 重要對話事件和工作結果。例如:「我預訂了從 JFK 到 SFO 的來回機票。我會在 2025 年 6 月 1 日出發,並於 2025 年 6 月 7 日返程。」
- 使用者明確要求服務專員記住的資訊。舉例來說,如果使用者說「記住,我主要使用 Python」,Memory Bank 就會產生「我主要使用 Python」這類記憶。
回憶集只能從來源內容中的文字、內嵌檔案和檔案資料中擷取。產生回憶時,系統會忽略所有其他內容,包括函式呼叫和回應。
回憶集錦可從使用者提供的圖片、影片和音訊中擷取。如果 Memory Bank 判斷多模態輸入內容對日後互動有意義,就會建立文字記憶,其中包含從輸入內容擷取的資訊。舉例來說,如果使用者提供黃金獵犬圖片,並附上「這是我的狗」文字,Memory Bank 就會產生「我的狗是黃金獵犬」這類的回憶。
產生回憶集錦
您可以在工作階段結束時,或在工作階段內的特定時間間隔,使用 GenerateMemories
觸發記憶體產生作業。回憶產生功能會從來源對話中擷取重要背景資訊,並與相同範圍內的現有回憶結合。舉例來說,您可以使用 {"user_id": "123", "session_id": "456"}
等範圍建立工作階段層級的記憶。系統可將範圍相同的回憶合併,並一起擷取。
呼叫 GenerateMemories
時,您必須透過 Agent Engine 工作階段或直接透過 JSON 格式提供來源對話:
Agent Engine 工作階段
在 Agent Engine 工作階段中,Memory Bank 會使用工作階段事件做為產生記憶體的來源對話。
為了將範圍限定在產生的回憶中,Memory Bank 預設會從工作階段中擷取並使用使用者 ID。舉例來說,如果工作階段的 user_id
為「123」,則會將回憶集區儲存為 {"user_id": "123"}
。您也可以直接提供 scope
,這樣做會覆寫使用工作階段的 user_id
做為範圍。
import datetime
url = "https://LOCATION-aiplatform.googleapis.com/v1beta1/AGENT_ENGINE_NAME"
response = requests.post(
url=f"{url}/memories:generate",
headers={
"Content-Type": "application/json; charset=utf-8",
"Authorization": f"Bearer {credentials.token}",
},
json={
"vertex_session_source": {
"session": f"AGENT_ENGINE_NAME/sessions/SESSION_ID",
# Time range of the session events to include.
"start_time": {"seconds": START_TIME}, # Optional.
"end_time": {"seconds": END_TIME}, # Optional.
},
# Optional. Defaults to the session's user_id.
"scope": SCOPE
}
)
更改下列內容:
LOCATION:您的區域。Vertex AI Agent Engine 的記憶體銀行和工作階段僅支援
us-central1
。AGENT_ENGINE_NAME:您建立的 Vertex AI Agent Engine 執行個體名稱,或現有的 Vertex AI Agent Engine 執行個體名稱。名稱的格式應為
projects/PROJECT_ID/locations/LOCATION/reasoningEngines/REASONING_ENGINE_ID
。SESSION_ID:工作階段 ID。
(選用) START_TIME:工作階段的開始時間 (以秒為單位)。
(選用) END_TIME:工作階段結束時間 (以秒為單位)。
(選用) SCOPE:字典,代表產生回憶的範圍。例如,
{"session_id": "MY_SESSION"}
。系統只會合併相同範圍的回憶集錦。如果未提供,系統會使用{"user_id": session.user_id}
。
JSON 格式
如果您使用的是與 Agent Engine 會話不同之會話的儲存空間,請直接以 JSON 格式提供來源對話:
url = "https://LOCATION-aiplatform.googleapis.com/v1beta1/AGENT_ENGINE_NAME"
response = requests.post(
url=f"{url}/memories:generate",
headers={
"Content-Type": "application/json; charset=utf-8",
"Authorization": f"Bearer {credentials.token}",
},
json={
"scope": SCOPE,
"direct_contents_source": {
"events": [
{
# `content` should contain the JSON-representation of a Content proto.
"content": {
"role": "user", "parts": [{"text": "This is text."}]}
}
]
}
}
)
更改下列內容:
LOCATION:您的區域。Vertex AI Agent Engine 的記憶體銀行和工作階段僅支援
us-central1
。AGENT_ENGINE_NAME:您建立的 Vertex AI Agent Engine 執行個體名稱,或現有的 Vertex AI Agent Engine 執行個體名稱。名稱的格式應為
projects/PROJECT_ID/locations/LOCATION/reasoningEngines/REASONING_ENGINE_ID
。SCOPE:字典,代表產生的回憶範圍。例如,
{"session_id": "MY_SESSION"}
。系統只會合併相同範圍的回憶集錦。
GenerateMemories
會傳回產生的回憶清單:
{
'name': 'projects/PROJECT_ID/locations/LOCATION/reasoningEngines/REASONING_ENGINE_ID/operations/OPERATION_ID',
'done': True,
'response': {
'@type': 'type.googleapis.com/google.cloud.aiplatform.v1beta1.GenerateMemoriesResponse',
'generatedMemories': [
{
'memory': {
'name': 'projects/PROJECT_ID/locations/LOCATION/reasoningEngines/REASONING_ENGINE_ID/memories/MEMORY_ID'
},
'action': 'CREATED'
},
{
'memory': {
'name': 'projects/PROJECT_ID/locations/LOCATION/reasoningEngines/REASONING_ENGINE_ID/memories/MEMORY_ID'
},
'action': 'UPDATED'
},
{
'memory': {
'name': 'projects/PROJECT_ID/locations/LOCATION/reasoningEngines/REASONING_ENGINE_ID/memories/MEMORY_ID'
},
'action': 'DELETED'
}
]
}
}
每個產生的記憶體都包含在該記憶體上執行的 action
:
CREATED
:表示系統新增了新回憶,代表新概念未包含在現有回憶中。UPDATED
:表示系統更新了現有記憶,這會發生在記憶涵蓋與新擷取資訊相似的概念時。記憶的事實可能會更新為新資訊,也可能維持不變。DELETED
:表示現有記憶庫已遭到刪除,因為其中的資訊與從對話中擷取的新資訊相衝突。
取得生成的回憶
針對 CREATED
或 UPDATED
回憶集錦,您可以使用 GetMemories
擷取回憶集錦的完整內容:
import google.auth
import google.auth.transport.requests
import requests
credentials, _ = google.auth.default()
auth_req = google.auth.transport.requests.Request()
credentials.refresh(auth_req)
url = "https://LOCATION-aiplatform.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/reasoningEngines/REASONING_ENGINE_ID/memories/MEMORY_ID"
response = requests.get(
url=url,
headers={
"Content-Type": "application/json; charset=utf-8",
"Authorization": f"Bearer {credentials.token}",
}
)
response.json()
更改下列內容:
PROJECT_ID:您的專案 ID。
REASONING_ENGINE_ID:
ReasoningEngine
執行個體 ID。MEMORY_ID:要擷取的記憶體 ID。