View a markdown version of this page

ベストプラクティス - Amazon ElastiCache

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

ベストプラクティス

メモリライフサイクル管理

  • 短期メモリに TTL を使用する – メモリエントリに適切な TTL 値を設定し、一時的な情報を自動的に期限切れにします。セッションコンテキストには、30 分から 24 時間の TTLs を使用します。長期的なユーザー設定には、長い TTLsか、無期限に保持します。

  • メモリ減衰の実装 – Mem0 は、時間の経過とともに無関係な情報を削除する組み込みの減衰メカニズムを提供します。エージェントがより多くのインタラクションを蓄積するにつれてメモリが肥大化しないように、これらを設定します。

  • メモリの重複排除 – 新しいメモリを保存する前に、ベクトル類似度検索を使用して同様のメモリが既に存在するかどうかを確認します。重複を作成するのではなく、既存のメモリを更新します。

ベクトルインデックス設定

  • 適切なインデックスタイプを選択する – 正確な検索が可能な小さなメモリストア (100,000 エントリ未満) FLATに使用します。近似近傍検索で大規模なパフォーマンスが向上する大規模なストアHNSWで を使用します。

  • 適切なディメンションを選択する – 埋め込みディメンションをモデルに一致させます。Amazon Titan Text Embeddings V2 は 1024 次元ベクトルを生成します。OpenAI の text-embedding-3-small は 1536 次元ベクトルを生成します。

  • COSINE 距離メトリクスを使用する – Amazon Titan や OpenAI などのモデルからのテキスト埋め込みの場合、COSINE 距離は通常、セマンティック類似性を測定するのに最も適切なメトリクスです。

マルチユーザー分離

  • ユーザー ID によるメモリの範囲 — ユーザー間の情報漏洩を防ぐために、メモリを保存および検索するときは常にuser_idパラメータを含めます。

  • TAG フィルターを使用して効率的に分離する – ベクトルインデックスをクエリするときは、TAG フィルター ( など@user_id:{user_123}) を使用して、KNN 検索を実行する前にユーザー別に結果を事前フィルタリングします。これは単一のアトミックオペレーションとして実行され、分離とパフォーマンスの両方を提供します。

    # Example: TAG-filtered vector search for user isolation results = client.execute_command( "FT.SEARCH", "agent_memory", f"@user_id:{{{user_id}}}=>[KNN 5 @embedding $query_vec]", "PARAMS", "2", "query_vec", query_vec, "DIALECT", "2", )

大規模なメモリ管理

  • maxmemory ポリシーの設定 – クラスターがメモリ制限に達すると、least-recently-usedメモリエントリを自動的に削除するように ElastiCache クラスターmaxmemory-policy allkeys-lruで を設定します。

  • メモリ使用量のモニタリング – Amazon CloudWatch メトリクスを使用して、メモリ使用率、キャッシュヒット率、ベクトル検索レイテンシーを追跡します。高いメモリ使用量のアラームを設定して、容量をプロアクティブに管理します。

  • 容量の計画 – 各メモリエントリには通常、約 4~6 KB (埋め込みディメンション x 4 バイト + メタデータ) が必要です。1 GB の ElastiCache インスタンスには、埋め込みサイズとメタデータに応じて約 170,000~250,000 個のメモリエントリを保存できます。