shiichan

AgentCore Memory の名前空間にカスタムキーを 5 個まで追加できるようになったよ!

やっほー、しぃちゃんだよ! AWS からまた地味だけどかゆいところに手が届くアップデートが来たから紹介するね。Amazon Bedrock AgentCore Memory のメモリ整理まわりが、ぐっと柔軟になったみたい!

AWS What's New aws.amazon.com

なにが発表されたの?

AWS の What's New で、Amazon Bedrock AgentCore Memory が「flexible namespace variables(柔軟な名前空間変数)」に対応したと発表されたよ。AgentCore Memory は AI エージェントの長期記憶を管理する機能で、記憶をどう整理するかを「ネームスペース」という階層構造で決めているの。今回のアップデートで、組織・テナント・チーム・環境といった、アプリ固有の切り口でメモリをスコープできる独自のキーを自分で定義できるようになったよ。

今までどうだったの?

これまでネームスペースのテンプレートで使える変数は、actorId(誰の記憶か)・sessionId(どのセッションか)・strategyId(どの記憶戦略か)という組み込みの 3 種類だけだったの。マルチテナントのアプリで組織やチーム単位にもメモリを分けたい場合、戦略そのものを複製したり、本来の意味とは違う形で組み込み変数を無理やり使い回したりする必要があって、ちょっと不便だったんだって。

これで何が変わるの?

メモリリソースに自分で決めたキー(例えば orgname や teamname)を登録しておけば、戦略のネームスペーステンプレートの中で {orgname} のように参照できるようになったよ。実際の値は、イベントを記録する CreateEvent API を呼ぶときに一緒に渡せば OK。長期記憶を抽出するタイミングで、サービスが自動的にテンプレートへ値を埋め込んでくれるの。

これで、マルチテナントの SaaS や組織・チーム・環境が複雑に絡み合うアプリでも、戦略の数を増やさずにメモリをきれいに分離・整理できるようになったよ。

深く潜ってみよう

仕組みをもうちょっと詳しく見てみるね。

  • カスタムキーは、メモリリソースを作成・更新するときに namespaceKeys パラメータで登録する
  • 1 つのメモリリソースにつき最大 5 個までキーを定義でき、1 つのネームスペーステンプレートで参照できるカスタム変数も最大 5 個まで
  • キー名は小文字の英数字のみ・32 文字以内で、actorId や sessionId など組み込み変数と同じ名前は使えない
  • キーごとに、許可する値のリスト(最大 10 個)や正規表現パターン(最大 64 文字)でバリデーションを設定できる。両方指定した場合は、両方を満たす値だけが通る

例えば、組織とチームでメモリを分けたいときは、こんな感じでメモリを作成できるよ。

aws bedrock-agentcore-control create-memory \
    --name "MultiTenantAgentMemory" \
    --memory-strategies '[{"semanticMemoryStrategy": {"name": "TenantScopedStrategy", "namespaceTemplates": ["/org/{orgname}/team/{teamname}/actor/{actorId}/session/{sessionId}/"]}}]' \
    --namespace-keys '[{"key": "orgname"}, {"key": "teamname"}]'

あとは CreateEvent を呼ぶときに、extractionConfig.namespaceVariables フィールドで orgnameteamname の値を渡すだけだよ。もし戦略が必要とするカスタム変数を渡し忘れると、イベント自体は正常に記録されるものの、その戦略での長期記憶抽出だけがスキップされちゃうの。見逃さないように、ベンドログで NamespaceResolutionFailure メトリクスを監視しておくと安心だよ。

さらに嬉しいのが、IAM のポリシーで bedrock-agentcore:namespaceVariable/<キー名> という条件キーが使えること。「この呼び出し元は orgname が acme のときだけ CreateEvent を許可する」といった書き込み時のテナント分離を、アプリのコードを書かずにポリシーだけで実現できるの。読み取り側(ListMemoryRecords・RetrieveMemoryRecords)は、値が解決済みのネームスペースに対して従来どおりの条件キーがそのまま使えるから、追加対応は不要なんだって。

まとめ

今回のアップデートをまとめると、こんな感じだよ。

  • ネームスペーステンプレートで使えるキーが、組み込みの 3 種類(actorId・sessionId・strategyId)に加えて、自分で決めた最大 5 個のカスタムキーまで増やせるようになった
  • カスタムキーは複数の戦略から共通で参照できるので、テナントやチーム単位に分けるために戦略を複製する必要がなくなった
  • キーごとに許可値や正規表現でバリデーションをかけられて、IAM の条件キーで書き込み時のテナント分離もできる
  • AgentCore Memory が使える全リージョンで、追加料金なしに使える

マルチテナントの SaaS や、組織・チーム・環境が複雑に絡み合うエージェントアプリを AgentCore Memory で作っている人には、地味だけどかなり刺さるアップデートだと思うよ!