擷取回憶

本頁面說明如何從記憶體庫擷取生成和上傳的回憶內容。如要瞭解如何設定、產生及使用 Memory Bank 的完整工作流程,請參閱「使用 REST API 快速入門」。

您可以透過下列選項擷取生成的記憶內容:

  • 取得記憶內容:使用 Vertex AI SDK 取得單一記憶內容的完整內容。

  • 列出記憶內容:使用 Vertex AI SDK 或 Google Cloud 控制台列出記憶內容。

  • 擷取記憶內容:使用 Vertex AI SDK,透過範圍式記憶內容擷取功能擷取記憶內容。使用相似度搜尋或範圍內的所有回憶集錦,擷取回憶集錦。

事前準備

如要完成本頁所示步驟,請先按照「設定 Memory Bank」中的步驟操作。

取得記憶體

使用 GetMemories 取得單一記憶體的完整內容:

memory = client.agent_engines.memories.get(
    name="MEMORY_NAME")

更改下列內容:

  • MEMORY_NAME:完全符合規定的記憶體名稱,格式為「projects/.../locations/.../reasoningEngines/.../memories...」。

列出記憶

控制台

如果是已部署的代理程式,您可以使用 Google Cloud 控制台列出與 Agent Engine 執行個體相關聯的所有記憶體:

  1. 前往 Google Cloud 控制台的「Vertex AI Agent Engine」頁面。

    前往 Agent Engine

    清單中會顯示所選專案的 Agent Engine 執行個體。您可以使用「篩選」欄位,依指定欄篩選清單。

  2. 按一下 Agent Engine 執行個體的名稱。

  3. 按一下「回憶集錦」分頁標籤。系統會依 ID 顯示回憶清單。你可以依範圍篩選回憶集錦 (例如 {"user_id": "123"})。

Vertex AI SDK

使用 ListMemories 擷取記憶體庫中的所有回憶。

pager = client.agent_engines.memories.list(name=agent_engine.api_resource.name)
for page in pager:
  print(page)

使用範圍式擷取功能擷取回憶集錦

您可以使用 RetrieveMemories 擷取特定範圍的記憶內容。系統只會傳回與擷取要求範圍完全相同的回憶集 (不論順序)。舉例來說,您可以使用 {"user_id": "123"} 擷取特定使用者的所有回憶集錦。如果沒有傳回任何回憶集錦,表示記憶體資料庫沒有符合所提供範圍的回憶集錦。

記憶體的範圍會在生成或建立記憶體時定義,且無法變更。

您可以使用 RetrieveMemories,針對特定範圍執行下列作業:

如果特定範圍內有許多回憶,您可以提供相似度搜尋參數,使用相似度搜尋功能只擷取最相似的回憶。執行相似度搜尋時,記憶體庫只會考量與要求範圍完全相同的記憶體。相似度搜尋會比較記憶內容的事實和要求搜尋查詢之間的嵌入向量。

系統會根據相似度排序回憶集錦,最相似的排在最前面 (最短的歐氏距離),最不相似的排在最後面 (最長的歐氏距離):

results = client.agent_engines.memories.retrieve(
    name=agent_engine.api_resource.name,
    scope=SCOPE,
    similarity_search_params={
        "search_query": "QUERY",
        # Optional. Defaults to 3.
        "top_k": 3
    }
)
# RetrieveMemories returns a pager. You can use `list` to retrieve all memories.
list(results)

"""
Returns:

[
    RetrieveMemoriesResponseRetrievedMemory(
      memory=Memory(
        name="projects/.../locations/.../reasoningEngines/.../memories/...",
        ...
        fact="This is a fact."
      },
      distance=0.5
    ),
    RetrieveMemoriesResponseRetrievedMemory(
      memory=Memory(
        name="projects/.../locations/.../reasoningEngines/.../memories/...",
        ...
        fact="This is another fact."
      },
      distance=0.7
    ),
]
"""

更改下列內容:

  • QUERY:要執行相似度搜尋的查詢。舉例來說,您可以將對話中最後一個使用者回合做為查詢。

  • SCOPE:字典,代表相似性搜尋的範圍。例如,{"user_id": "123"}。系統只會考慮與要求範圍相同的記憶體。

擷取所有記憶

如果未提供相似度搜尋參數,RetrieveMemories 會傳回所有具有指定範圍的記憶內容,無論這些內容與目前對話的相似度為何。

results = client.agent_engines.memories.retrieve(
    name=agent_engine.api_resource.name,
    scope=SCOPE
)
# RetrieveMemories returns a pager. You can use `list` to retrieve all pages' memories.
list(results)

"""
Returns:

[
    RetrieveMemoriesResponseRetrievedMemory(
      memory=Memory(
        name="projects/.../locations/.../reasoningEngines/.../memories/...",
        ...
        fact="This is a fact."
      }
    ),
    RetrieveMemoriesResponseRetrievedMemory(
      memory=Memory(
        name="projects/.../locations/.../reasoningEngines/.../memories/...",
        ...
        fact="This is another fact."
      }
    ),
]
"""

更改下列內容:

  • SCOPE:代表擷取範圍的字典。例如,{"user_id": "123"}。系統只會傳回與要求範圍相同的記憶內容。