產生回憶集錦

您可以透過 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:表示現有記憶庫已遭到刪除,因為其中的資訊與從對話中擷取的新資訊相衝突。

取得生成的回憶

針對 CREATEDUPDATED 回憶集錦,您可以使用 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_IDReasoningEngine 執行個體 ID。

  • MEMORY_ID:要擷取的記憶體 ID。