生成回忆

借助记忆库,您可以根据用户与代理之间的对话构建长期记忆。然后,记忆库会通过添加、更新和移除记忆来整合和自行整理特定用户的记忆。本页面介绍了如何触发记忆生成并获取记忆。

当您触发记忆生成时,记忆库会自动执行以下操作:

  • 提取:从用户与代理的对话中提取有关用户的信息。

  • 整合:用于标识是否应删除或更新具有相同范围的现有记忆。记忆库会在合并新记忆与现有记忆之前,检查新记忆是否重复或矛盾。

并非所有用户代理互动都会导致系统创建或更新回忆。记忆库只会保留被认为对未来互动有价值的信息,这些信息可能包括以下类型:

  • 与用户相关的信息,例如偏好设置、姓名、关系、爱好和重要日期。例如,“我在 Google 工作”“我喜欢靠过道的座位”或“我的结婚纪念日是 12 月 31 日”。
  • 关键对话事件和任务结果。例如,“我预订了从 JFK 机场往返 SFO 机场的机票。我将于 2025 年 6 月 1 日出发,并于 2025 年 6 月 7 日返回。”
  • 用户明确要求代理记住的信息。例如,如果用户说“记住,我主要使用 Python”,记忆库会生成一条记忆,例如“我主要使用 Python”。

记忆只能从源内容中的文本、内嵌文件和文件数据中提取。生成回忆时,系统会忽略所有其他内容,包括函数调用和响应。

回忆可以从用户提供的图片视频音频中提取。如果记忆库认为多模态输入提供的上下文对未来的互动有意义,则可能会创建文本记忆,其中包含从输入中提取的信息。例如,如果用户提供了一张金毛寻回犬的图片,并附上“这是我的狗”的文字,记忆库就会生成“我的狗是金毛寻回犬”之类的记忆。

设置环境

在开始生成记忆之前,您需要设置环境和 Agent Engine 实例。本部分假定您已设置 Python 开发环境,或者正在使用具有 Python 开发环境的运行时(例如 Colab)。

导入库

安装 Vertex AI SDK:

  pip install google-cloud-aiplatform>=1.100.0

设置 Vertex AI SDK 客户端

  import vertexai

  client = vertexai.Client(
      project="PROJECT_ID",
      location="LOCATION",
  )

替换以下内容:

  • PROJECT_ID:您的项目 ID。
  • LOCATION:您的区域。 Vertex AI Agent Engine 记忆库仅支持 us-central1

配置 Agent Engine 实例

如需从记忆库中提取记忆,您首先需要一个 Agent Engine 实例。您可以创建新实例,也可以获取现有实例。新实例是空的,除非您先创建生成回忆

创建

agent_engine = client.agent_engines.create()

使用现有的

agent_engine = client.agent_engines.get(name="AGENT_ENGINE_NAME")

替换以下内容:

  • AGENT_ENGINE_NAME:代理引擎的名称。格式应为 projects/.../locations/.../reasoningEngines/...。您只能在 us-central1 中使用 Agent Engine 实例作为 Vertex AI Agent Engine 记忆库。

生成回忆

您可以在会话结束时或会话期间定期使用 GenerateMemories 触发记忆生成。记忆生成功能会从源对话中提取关键上下文,并将其与同一范围内的现有记忆相结合。例如,您可以使用 {"user_id": "123", "session_id": "456"} 等范围创建会话级记忆。具有相同范围的记忆可以合并并一起检索

调用 GenerateMemories 时,您必须通过 Agent Engine 会话或直接通过 JSON 格式提供源对话:

Agent Engine 会话

借助 Agent Engine 会话,记忆库可以使用会话事件作为对话来源来生成记忆内容。

为了确定生成的记忆的范围,记忆库默认会从会话中提取并使用用户 ID。例如,如果会话的 user_id 为“123”,则记忆的范围存储为 {"user_id": "123"}。您还可以直接提供 scope,这会替换使用会话的 user_id 作为范围。

client.agent_engines.generate_memories(
  name=agent_engine.api_resource.name,
  vertex_session_source={
    "session": "SESSION_NAME"
  },
  # Optional when using Agent Engine Sessions. Defaults to {"user_id": session.user_id}.
  scope=SCOPE,
  config={
      "wait_for_completion": True
  }
)

替换以下内容:

  • SESSION_NAME会话名称

  • (可选)SCOPE:一个字典,用于表示生成的回忆的范围。例如 {"session_id": "MY_SESSION"}。只有具有相同范围的记忆才会被考虑用于整合。如果未提供,则系统会使用 {"user_id": session.user_id}

JSON 格式

如果您使用的会话存储方式与 Agent Engine 会话不同,请直接以 JSON 格式提供源对话:

client.agent_engines.generate_memories(
    name=agent_engine.api_resource.name,
    direct_contents_source={
      "events": EVENTS
    },
    scope=SCOPE,
    config={
        "wait_for_completion": True
    }
)

替换以下内容:

  • EVENTS:内容字典列表。例如:
[
  {
    "content": {
      "role": "user",
      "parts": [
        {"text": "I'm work with LLM agents!"}
      ]
    }
  }
]
  • SCOPE:一个字典,表示生成的记忆的范围。例如 {"session_id": "MY_SESSION"}。只有具有相同范围的记忆才会被考虑用于整合。

GenerateMemories 返回一个 AgentEngineGenerateMemoriesOperation,其中包含生成的记忆列表:

AgentEngineGenerateMemoriesOperation(
  name="projects/.../locations/.../reasoningEngines/.../operations/...",
  done=True,
  response=GenerateMemoriesResponse(
    generatedMemories=[
      GenerateMemoriesResponseGeneratedMemory(
        memory=Memory(
          "name": "projects/.../locations/.../reasoningEngines/.../memories/..."
        ),
        action=<GenerateMemoriesResponseGeneratedMemoryAction.CREATED: "CREATED">,
      ),
      GenerateMemoriesResponseGeneratedMemory(
        memory=Memory(
          "name": "projects/.../locations/.../reasoningEngines/.../memories/..."
        ),
        action=<GenerateMemoriesResponseGeneratedMemoryAction.UPDATED: "UPDATED">,
      ),
      GenerateMemoriesResponseGeneratedMemory(
        memory=Memory(
          "name": "projects/.../locations/.../reasoningEngines/.../memories/..."
        ),
        action=<GenerateMemoriesResponseGeneratedMemoryAction.DELETED: "DELETED">,
      ),
    ]
  )
)

每个生成的记忆都包含对该记忆执行的 action

  • CREATED:表示添加了新的记忆,代表现有记忆未捕获的新概念。
  • UPDATED:表示现有记忆已更新,如果记忆涵盖的概念与新提取的信息类似,就会发生这种情况。记忆中的事实可能会更新为新信息,也可能保持不变。
  • DELETED:表示系统已删除现有记忆,因为其信息与从对话中提取的新信息相矛盾。

对于 CREATEDUPDATED 回忆,您可以使用 GetMemories 检索回忆的完整内容。检索 DELETED 个记忆会导致 404 错误。

后续步骤