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