View a markdown version of this page

名前空間を使用して長期メモリ組織を指定する - Amazon Bedrock AgentCore

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

名前空間を使用して長期メモリ組織を指定する

AgentCore メモリを作成するときは、名前空間を使用して、メモリ戦略の長期メモリを論理的にグループ化する場所を指定します。新しい長期メモリがメモリ戦略を使用して抽出されるたびに、設定した名前空間に保存されます。つまり、すべての長期記憶は特定の名前空間に限定され、整理された状態を維持し、他のユーザーやセッションとの混同を防ぎます。スラッシュ で区切られた階層形式を使用する必要があります/。これにより、思い出が明確に整理されます。必要に応じて、アプリケーションの組織のニーズに基づいて、名前空間の中括弧内で次の事前定義された変数を使用できます。

  • actorId – 長期メモリが属するユーザーを識別します。

    アクターとは、エンドユーザーやエージェント/ユーザーの組み合わせなどのエンティティを指します。たとえば、コーディングサポートチャットボットでは、アクターは通常、開発者が質問をします。アクター ID を使用すると、システムはメモリが属するユーザーを把握し、各ユーザーのデータを分離して整理できます。

  • strategyId – 使用されているメモリ戦略を示します。この戦略識別子は、AgentCore メモリを作成するときに自動生成されます。

  • sessionId – メモリのソースとなるセッションまたは会話を識別します。

    セッションは通常、ユーザーと AI エージェント間の単一の会話またはインタラクション期間です。その会話中に発生するすべての関連メッセージとイベントをグループ化します。

例えば、次の名前空間を AgentCore メモリの作成時に戦略への入力として定義するとします。

/strategy/{memoryStrategyId}/actor/{actorId}/session/{sessionId}/

メモリの作成後、この名前空間は次のようになります。

/strategy/summarization-93483043/actor/actor-9830m2w3/session/session-9330sds8

名前空間の粒度はさまざまです。次の例では、組み込み変数のみを使用します。

セッションレベルで詳細

/strategy/{memoryStrategyId}/actor/{actorId}/session/{sessionId}/

セッション間でアクターレベルできめ細か

/strategy/{memoryStrategyId}/actor/{actorId}/

アクター全体の戦略レベルで詳細

/strategy/{memoryStrategyId}/

すべての戦略にわたるグローバル

/

さらに詳細な組織化のために、テナント、チーム、環境などの追加のディメンションを表すカスタム名前空間変数を追加できます。

コード例については、「長期メモリを有効にする」を参照してください。

カスタム名前空間変数

組み込み変数 (actorId、、memoryStrategyId) に加えてsessionId、カスタム名前空間変数を定義して、会社、組織、チーム、環境など、アプリケーションの一意の組織ディメンションを表すことができます。カスタム変数を使用すると、重複戦略を作成したり、組み込み変数を過負荷にしたりすることなく、任意の階層に沿って長期的なメモリをスコープできます。

例えば、マルチテナントアプリケーションには、組織によって範囲が限定されたメモリが必要になる場合があります。

/org/{orgname}/team/{teamname}/actor/{actorId}/session/{sessionId}/

namespaceKeys パラメータを使用して既存のメモリリソースを作成または更新するときにカスタム変数を定義し、CreateEvent オペレーションの extractionConfig.namespaceVariablesフィールドを通じて実行時に値を指定します。

重要

すべてのカスタム名前空間変数のキーと値は小文字である必要があります。

名前空間キーを定義する

メモリリソースを作成または更新するときは、 namespaceKeysパラメータを使用してカスタム変数キーとオプションの検証ルールを宣言します。各キーは次の条件を満たす必要があります。

  • 小文字の英数字のみが含まれます。

  • 組み込み変数名 (actorId、sessionId、または ) ではありませんmemoryStrategyId。

  • 最大 32 文字の長さにしてください。

メモリリソースごとに最大 5 つの名前空間キーを定義でき、 ごとに最大 5 つのカスタム変数を定義できますnamespaceTemplate。

名前空間キーを定義するときは、次の点に注意してください。

  • 戦略で参照されていない名前空間キーを定義して、将来の使用のためにキーを事前登録できます。

  • 1 つの名前空間キーは、複数の戦略で参照できます。たとえば、 {companyname}はセマンティック戦略と概要戦略の両方namespaceTemplateの に表示されます。

  • 戦略の によって現在参照されている名前空間キーnamespaceTemplateは削除できません。まず、戦略から参照を削除 (キーの参照を解除) してから、削除する必要があります。

キーごとに、オプションで、実行時に受け入れられる値を制限する検証ルールを指定できます。

  • allowedValues – 最大 10 個の許容値のリスト (大文字と小文字が区別されます)。値は小文字の英数字で始まり、小文字の英数字、ハイフン、アンダースコアのみを含める必要があります。

  • regexPattern – 値が一致する必要がある正規表現パターン (最大 64 文字)。

allowedValues と の両方を指定するとregexPattern、サービスは両方のルール (論理 ) を適用しますAND。

次の例は、カスタム名前空間変数と検証を使用してメモリリソースを作成する方法を示しています。

aws bedrock-agentcore-control create-memory \ --name "MultiTenantAgentMemory" \ --description "Memory for a multi-tenant AI agent" \ --event-expiry-duration 10 \ --memory-strategies '[ { "semanticMemoryStrategy": { "name": "TenantScopedStrategy", "namespaceTemplates": ["/org/{orgname}/team/{teamname}/actor/{actorId}/session/{sessionId}/"] } } ]' \ --namespace-keys '[ {"key": "orgname", "validation": {"allowedValues": ["acme", "globex", "initech"]}}, {"key": "teamname", "validation": {"regexPattern": "^[a-z][a-z0-9-]*$"}} ]'

実行時に名前空間値を指定する

CreateEvent オペレーションを使用してイベントを作成するときは、 extractionConfig.namespaceVariablesフィールドにカスタム名前空間変数値を渡します。

aws bedrock-agentcore create-event \ --memory-id "MultiTenantAgentMemory-n29sh5ka8r" \ --actor-id "user123" \ --session-id "session67" \ --event-timestamp "$(date -u +"%Y-%m-%dT%H:%M:%S.%3NZ")" \ --payload '[ { "conversational": { "content": {"text": "I need help debugging my application."}, "role": "USER" } } ]' \ --extraction-config '{ "namespaceVariables": { "orgname": "acme", "teamname": "engineering" } }'

このサービスは、長期メモリ抽出中にこれらの値を名前空間テンプレートに置き換えます。

注記

戦略の によって参照されるカスタム名前空間変数namespaceTemplateがCreateEventリクエストで指定されていない場合、その戦略の名前空間解決は行われません。その結果、その戦略に対して長期的なメモリ抽出は開始されません。CreateEvent オペレーションは成功し、イベントは短期メモリに保持されます。

これらの障害を検出するには、提供されたログをセットアップし、NamespaceResolutionFailureメトリクスをモニタリングします。メトリクスは、抽出StrategyIdがスキップされた Operation、ResourceStrategyType、、 のディメンションでレポートします。

名前空間キーを更新する

UpdateMemory オペレーションで名前空間キーを更新すると、namespaceKeys値は既存のセットを完全に置き換えます。安全に更新するには、 で現在のキーを取得しGetMemory、変更を適用して、完全なリストを送信します。

次の制約に注意してください。

  • 戦略の によってまだ参照されているキーを省略するとnamespaceTemplate、サービスは をスローしますValidationException。からキーを削除するnamespaceTemplate前に、まず戦略の からキーを削除する必要がありますnamespaceKeys。

  • 新しいキーを追加するには、リクエストに既存のすべてのキーと一緒に含めます。

# Get the current memory configuration current = control_client.get_memory(memoryId="MultiTenantAgentMemory-n29sh5ka8r") existing_keys = current['memory'].get('namespaceKeys', []) # Add a new key while preserving existing ones existing_keys.append({ 'key': 'category', 'validation': { 'allowedValues': ['backend', 'frontend', 'data'] } }) # Update with the full set control_client.update_memory( memoryId="MultiTenantAgentMemory-n29sh5ka8r", namespaceKeys=existing_keys )

IAM 条件キーを使用して書き込みパスアクセスを制限する

bedrock-agentcore:namespaceVariable/<variableName> 条件キーを使用して、発信者がイベントの作成時に使用できるカスタム名前空間変数値を制御する IAM ポリシーを作成できます。この条件キーを使用すると、書き込みパスでテナント分離を適用できます。

条件キーは パターンに従います。bedrock-agentcore:namespaceVariable/<key>ここで、 <key>は で定義された名前空間変数名ですnamespaceKeys。

次のポリシーでは、 orgnameが に設定されている場合にのみ発信者がイベントを作成することを許可しacme、 orgnameが に設定されている場合は明示的にリクエストを拒否しますglobex。

{ "Version":"2012-10-17", "Statement": [ { "Sid": "AllowCreateEventForAcme", "Effect": "Allow", "Action": "bedrock-agentcore:CreateEvent", "Resource": "arn:aws:bedrock-agentcore:us-east-1:123456789012:memory/memory_id", "Condition": { "StringEquals": { "bedrock-agentcore:namespaceVariable/orgname": "acme" } } }, { "Sid": "DenyCreateEventForGlobex", "Effect": "Deny", "Action": "bedrock-agentcore:CreateEvent", "Resource": "arn:aws:bedrock-agentcore:us-east-1:123456789012:memory/memory_id", "Condition": { "StringEquals": { "bedrock-agentcore:namespaceVariable/orgname": "globex" } } } ] }

次の表は、ポリシーに条件キーが存在するかどうか、およびリクエストが名前空間変数を提供するかどうかに基づいて、IAM がリクエストを評価する方法を示しています。

ポリシーには の条件がありますかnamespaceVariable? リクエストは 変数を提供しますか? 結果 Reason

いいえ

いいえ

許可されています

条件が評価されない

いいえ

はい

許可されています

追加のコンテキストキーは無視されます

はい

はい (一致する値)

許可されています

条件が満たされている

はい

いいえ

拒否

条件キーがないため、満たすことができません

はい

はい (一致しない値)

拒否

条件が満たされていない

IAM による読み取りパスアクセスの制限

IAM ポリシーを作成して、アクター、セッション、名前空間など、定義したスコープによるメモリ読み取りアクセスを制限できます。IAM ポリシーでスコープをコンテキストキーとして使用します。

次のポリシーは、メモリの取得へのアクセスを、特定の名前空間または特定のnamespacePath階層のレコードに制限します。この例では、ポリシーは、 summaries/agent1/session1/または などの を持つ次の namespacePath 階層の名前空間を持つ summaries/agent1/ OR などの正確な名前空間を持つメモリへのアクセスのみを許可しますsummaries/agent1/session2/。 summaries/agent1/

{ "Version":"2012-10-17", "Statement": [ { "Sid": "SpecificNamespaceAccess", "Effect": "Allow", "Action": [ "bedrock-agentcore:RetrieveMemoryRecords" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:123456789012:memory/memory_id", "Condition": { "StringEquals": { "bedrock-agentcore:namespace": "summaries/agent1/" } } }, { "Sid": "SpecificNamespacePathAccess", "Effect": "Allow", "Action": [ "bedrock-agentcore:RetrieveMemoryRecords" ], "Resource": "arn:aws:bedrock-agentcore:us-east-1:123456789012:memory/memory_id", "Condition": { "StringLike": { "bedrock-agentcore:namespacePath": "summaries/agent1/*" } } } ] }
注記

取得 APIs (ListMemoryRecords、RetrieveMemoryRecords) には、完全に解決された名前空間が必要です。この時点でカスタム名前空間変数は既に置き換えられているため、既存の bedrock-agentcore:namespace および bedrock-agentcore:namespacePath条件キーは、追加の設定なしで読み取りパスをカバーします。