排查 Agent Platform Memory Bank 问题

本文档介绍了如何解决在 Agent 平台上使用 Agent Platform 记忆库时遇到的常见问题。它提供了在未生成任何记忆时的问题排查步骤,并说明了如何验证操作完成情况。

未生成任何记忆

记忆生成过程包含一个关键步骤:确定源内容中的信息是否足够有意义,可以保留。空响应表示该过程已成功运行,但未找到符合保存条件的信息。如果您预计会生成记忆,本指南可以帮助您找出潜在的错误或配置错误。

如需排查未生成记忆的原因,请按顺序执行以下步骤:

检查是否触发了记忆生成

首先,确认记忆生成过程是否已实际启动。记忆生成是通过调用 GenerateMemories (client.agent_engines.memories.generate(...)) 启动的。

如果您使用的是 ADK 的 VertexAiMemoryBankService,则不会自动触发记忆生成。您必须确保智能体或应用已明确调用 add_session_to_memory 方法来触发该过程。

add_session_to_memory 方法将 Session 对象作为输入 并使用会话的事件作为记忆生成的数据源。该方法仅在会话对象中填充了事件时调用记忆库实例。如果您的 ADK 应用或智能体正在调用 add_session_to_memory,但未触发记忆生成,则可能未填充 Session 对象的事件。即使您与会话进行了互动,也可能会出现这种情况,尤其是在您使用 adk.Runner 的情况下。如需解决此问题,请将会话及其事件提取到您调用 add_session_to_memory 的环境中:

session = await session_service.get_session(
    app_name=app_name,
    user_id=user_id,
    session_id=session.id
)
# Confirm that events are populated.
print(session.events)
memory_service.add_session_to_memory(session)

验证记忆生成 LRO 是否已完成

记忆生成是一项长时间运行的操作 (LRO),可能需要几秒钟才能完成。确切的延迟时间取决于输入对话的长度和要处理的信息的复杂程度。

使用 Agent Engine SDK 时,记忆生成默认是一项阻塞操作 by default。因此,client.generate_memories(...) 会阻止代码的执行,直到记忆生成 LRO 完成。

使用 ADK 的 VertexAiMemoryBankService 时,add_session_to_memory 是一项非阻塞操作。它只会触发记忆生成,而不会等待 LRO 完成。

在操作响应中查找错误

LRO 响应可能包含类似于以下内容的错误消息,表明记忆生成失败。例如:

RuntimeError: Failed to generate memory: {'code': 3, 'message': 'Failed to extract memories: Please use a valid role: user, model.'}

常见错误包括:

  • 当您使用随用随付时,Gemini 的资源耗尽错误。借助 动态共享配额 (DSQ),您的用量没有预定义的配额限制。如需确保记忆库具有高可用性并为生产工作负载提供可预测的服务等级,请参阅预配吞吐量

  • 无效的源数据,例如在 Content 中使用 modeluser 以外的角色。

确定对话是否有意义

如果该过程已触发、成功完成且未产生任何错误,则可能是记忆库确定源对话中的任何信息都没有意义到足以保留。

记忆库使用“记忆主题”来标识哪些信息有意义。如果对话的内容与任何已配置的主题都不一致,则不会生成任何记忆。

如果您认为应该保留信息,则可以自定义记忆库实例的配置,使其更符合您的预期。

通过配置记忆主题,您可以定义应保留哪些信息。配置少样本示例,您可以教记忆库实例哪些信息应保留以及应使用哪些措辞,从而帮助其适应您的预期。您可以将自定义记忆库视为两个步骤:告知和展示。记忆主题会告知记忆库要保留哪些信息。 少样本示例会向记忆库展示哪些类型的信息应生成特定的记忆,从而帮助其了解您希望它理解的模式、细微差别和措辞。