本文說明如何解決使用 Vertex AI Agent Engine Memory Bank 時的常見問題。
未生成任何回憶集錦
記憶生成過程包含一個重要步驟:判斷來源內容中的資訊是否足夠有意義,可供保留。如果回應為空白,表示程序已順利執行,但未找到符合儲存條件的資訊。如果系統未生成回憶集錦,本指南可協助你找出潛在錯誤或設定錯誤。
如要排解回憶集錦未生成的問題,請依序按照下列步驟操作:
確認記憶體生成功能是否已觸發
首先,請確認記憶體產生程序是否確實已啟動。呼叫 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
中使用model
和user
以外的角色。
判斷對話是否有意義
如果系統已觸發程序並順利完成,且未發生任何錯誤,則可能是記憶庫判斷來源對話中沒有足夠有意義的資訊可供保留。
記憶體庫會使用「記憶體主題」來判斷哪些資訊有意義。如果對話內容與任何已設定的主題不符,系統就不會生成回憶內容。
如果您認為資訊應該保留,可以自訂 Memory Bank 執行個體的設定,使其更符合您的期望。
設定記憶體主題可讓您定義應保留的資訊。設定少量樣本可教導記憶體執行個體應保留哪些資訊,以及使用哪些措辭,讓執行個體適應您的期望。你可以透過「告知」和「顯示」這兩個步驟,自訂記憶體庫。記憶主題會告知記憶庫要保留哪些資訊。少樣本提示可顯示記憶庫應根據哪些資訊建立特定記憶內容,協助記憶庫瞭解您希望它理解的模式、細微差異和措辭。