Memory Bank のトラブルシューティング

このドキュメントでは、Vertex AI Agent Engine Memory Bank の使用時に発生する一般的な問題を解決する方法について説明します。

思い出は生成されませんでした

メモリ生成プロセスには、ソース コンテンツの情報が永続化するのに十分な意味があるかどうかを判断するという重要なステップが含まれています。空のレスポンスは、プロセスは正常に実行されたものの、保存条件を満たす情報が見つからなかったことを示します。思い出が生成されるはずなのに生成されない場合は、このガイドでエラーや設定ミスを特定できます。

思い出が生成されない原因をトラブルシューティングするには、次の手順に沿って操作します。

メモリー生成がトリガーされたかどうかを確認する

まず、メモリー生成プロセスが実際に開始されたことを確認します。メモリ生成は、GenerateMemoriesclient.agent_engines.memories.generate(...))を呼び出すことで開始されます。

ADK の VertexAiMemoryBankService を使用している場合、メモリ生成は自動的にトリガーされません。エージェントまたはアプリケーションが add_session_to_memory メソッドを明示的に呼び出してプロセスをトリガーしていることを確認する必要があります。

add_session_to_memorySession オブジェクトを入力として受け取り、セッションのイベントをメモリ生成のデータソースとして使用します。セッション オブジェクトにイベントが入力されている場合にのみ、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 の高可用性を確保し、本番環境ワークロードに対して予測可能なサービスレベルを実現するには、プロビジョンド スループットをご覧ください。

  • Contentmodeluser 以外のロールを使用するなど、無効なソースデータ。

会話が有意義だったかどうかを判断する

プロセスがトリガーされ、正常に完了し、エラーが発生しなかった場合、Memory Bank はソースの会話に保存するほど意味のある情報がないと判断した可能性があります。

Memory Bank は、「メモリトピック」を使用して、どの情報が有意義かを特定します。会話の内容が構成済みのトピックと一致しない場合、メモリは生成されません。

情報が保持されるべきだとお考えの場合は、Memory Bank インスタンスの構成をカスタマイズして、期待どおりに動作するように調整できます。

記憶のトピックを構成すると、永続化する情報を定義できます。フューショットの例を構成すると、Memory Bank インスタンスは、どのような情報をどのような言い回しで保持すべきかというニュアンスを学習することで、ユーザーの期待に応えることができます。Memory Bank のカスタマイズは、伝える(Telling)と示す(Showing)の 2 つのステップで行うことができます。メモリトピックは、Memory Bank に保持する情報を伝えます。Few-shot は、特定のメモリにつながる情報の種類を Memory Bank に示し、ユーザーが理解してほしいパターン、ニュアンス、言い回しを学習するのに役立ちます。