记忆库问题排查

本文档介绍了如何解决使用 Vertex AI Agent Engine 记忆库时的常见问题。

未生成任何回忆

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

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

检查是否已触发记忆生成

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

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

add_session_to_memory 接受 Session 对象作为输入,并使用会话的事件作为内存生成的数据源。仅当会话对象中填充了事件时,才会调用您的 Memory Bank 实例。如果您的 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 时,记忆库生成操作默认为阻塞操作。因此,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) 时,您的用量没有预定义的配额限制。如需确保 Memory Bank 具有高可用性并为生产工作负载提供可预测的服务等级,请参阅预配吞吐量

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

确定对话是否有意义

如果该流程已触发、成功完成且未产生任何错误,则可能是 Memory Bank 确定源对话中没有足够有意义的信息需要保留。

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

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

通过配置记忆主题,您可以定义应持久保存哪些信息。配置少样本示例有助于您的记忆库实例适应您的期望,方法是教它了解哪些信息应持久保存以及应使用哪些措辞。您可以分两步自定义记忆库:告知和展示。记忆主题用于告知记忆库要持久保存哪些信息。少样本示例可记忆库展示哪类信息应生成特定记忆,从而帮助记忆库学习您希望它理解的模式、细微差别和措辞。