メモリが生成されなかった
メモリーの生成プロセスには、ソース コンテンツの情報が永続化するのに十分な意味があるかどうかを判断するという重要なステップが含まれています。空のレスポンスは、プロセスが正常に実行されたものの、保存の条件を満たす情報が見つからなかったことを示します。メモリが生成されることを想定していた場合は、このガイドで考えられるエラーや構成ミスを特定できます。
メモリが生成されない理由をトラブルシューティングするには、次の手順に沿って操作します。
メモリーの生成がトリガーされたかどうかを確認する
まず、メモリーの生成プロセスが実際に開始されたことを確認します。メモリ生成は、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)を使用する場合、使用量に事前定義された割り当て上限はありません。メモリバンク の高可用性を確保し、本番環境ワークロードに対して予測可能なサービスレベルを実現するには、プロビジョンド スループットをご覧ください。
Contentでmodelとuser以外のロールを使用するなど、ソースデータが無効です。
会話に意味があったかどうかを判断する
プロセスがトリガーされ、正常に完了し、エラーが発生しなかった場合、メモリバンク はソース会話の情報が永続化するのに十分な意味がないと判断した可能性があります。
メモリバンクは「メモリトピック」を使用して、意味のある情報を特定します。会話の内容が構成済みのトピックと一致しない場合、メモリは生成されません。
情報が永続化されるべきだと考える場合は、メモリバンク インスタンスの構成をカスタマイズして、期待どおりに動作するように調整できます。
メモリトピックを構成すると、永続化する情報を定義できます。フューショットの例を構成すると、永続化する情報とフレーズのニュアンスをメモリバンク インスタンスに学習させ、期待どおりに動作するように調整できます。メモリバンクのカスタマイズは、伝えることと示すことの 2 つのステップで考えることができます。メモリトピックは、永続化する情報を Memory Bank に伝えます。 フューショットは、特定のメモリを生成する情報の種類をメモリバンクに示し、理解すべきパターン、ニュアンス、フレーズを学習させます。