提取回忆

本页介绍了如何从记忆库中提取生成的记忆和上传的记忆。如需了解配置、生成和使用 Memory Bank 的完整工作流程,请参阅使用 REST API 快速入门

您可以使用以下选项来提取生成的记忆:

  • 获取记忆:获取单个记忆的完整内容。

  • 列出回忆集锦:列出回忆集锦

  • 检索记忆:使用基于范围的记忆检索功能检索记忆。使用相似性搜索功能检索记忆,或检索范围内的所有记忆。

准备工作

如需完成本页面中演示的步骤,您必须先按照设置 Memory Bank 中的步骤操作。

获取回忆

使用 GetMemories 获取单个内存的完整内容:

memory = client.agent_engines.get_memory(name="MEMORY_NAME")

替换以下内容:

  • MEMORY_NAME:完全限定的内存名称,格式为“projects/.../locations/.../reasoningEngines/.../memories...”。

列出回忆

使用 ListMemories 可提取记忆库中的所有记忆。

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

使用基于范围的检索功能获取回忆

您可以使用 RetrieveMemories 检索特定范围内的回忆。系统只会返回与检索请求具有完全相同范围(不考虑顺序)的回忆。例如,您可以使用 {"user_id": "123"} 检索限定为特定用户的所有记忆内容。如果未返回任何记忆,则表示记忆库中没有指定范围内的任何记忆。

记忆的范围是在生成或创建记忆时定义的,并且是不可变的。

您可以使用 RetrieveMemories 对特定范围执行以下操作:

如果您有许多特定范围的记忆,则可以通过提供相似性搜索参数,使用相似性搜索仅检索最相似的记忆。在执行相似性搜索时,记忆库只会考虑范围与请求完全相同的记忆。相似度搜索会比较记忆的事实与请求的搜索查询之间的嵌入向量。

返回的记忆会按相似度从高(欧几里得距离最短)到低(欧几里得距离最长)的顺序排序:

results = client.agent_engines.retrieve_memories(
    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.retrieve_memories(
    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"}。系统只会返回与请求具有相同范围的记忆。