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、sessionId、memoryStrategyId) 之外,您還可以定義自訂命名空間變數,以代表應用程式的獨特組織維度,例如公司、組織、團隊或環境。使用自訂變數,您可以沿著任意階層範圍化長期記憶體,而無需建立重複的策略或超載內建變數。

例如,多租戶應用程式可能需要組織範圍的記憶體:

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

您可以在使用 namespaceKeys 參數建立或更新現有記憶體資源時定義自訂變數,並透過 CreateEvent 操作中的 extractionConfig.namespaceVariables 欄位在執行時間提供其值。

重要

所有自訂命名空間變數索引鍵和值都必須是小寫。

定義命名空間索引鍵

當您建立或更新記憶體資源時,請使用 namespaceKeys 參數來宣告您的自訂變數金鑰和選用的驗證規則。每個金鑰必須:

  • 僅包含小寫英數字元。

  • 不是內建變數名稱 (actorId、 sessionId或 memoryStrategyId)。

  • 長度上限為 32 個字元。

每個記憶體資源最多可以定義 5 個命名空間索引鍵,每個 最多可以定義 5 個自訂變數namespaceTemplate。

定義命名空間索引鍵時,請記住下列事項:

  • 您可以定義任何策略未參考的命名空間金鑰,以預先註冊金鑰以供日後使用。

  • 多個策略可以參考單一命名空間金鑰。例如, {companyname}可以同時出現在語意策略和摘要策略namespaceTemplate的 中。

  • namespaceTemplate 無法刪除策略 目前參考的命名空間金鑰。您必須先從策略中移除參考 (取消參考金鑰),然後將其刪除。

對於每個金鑰,您可以選擇指定驗證規則,以限制執行時間接受的值:

  • allowedValues – 最多 10 個允許值的清單 (區分大小寫)。值必須以小寫英數字元開頭,且只包含小寫英數字元、連字號和底線。

  • regexPattern – 值必須符合的 regex 模式 (最多 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" } }'

服務會在長期記憶體擷取期間將這些值取代為命名空間範本。

注意

如果CreateEvent請求中namespaceTemplate未提供策略 參考的自訂命名空間變數,則不會針對該策略進行命名空間解析。因此,該策略不會啟動長期記憶體擷取。CreateEvent 操作仍然成功,事件會保留在短期記憶體中。

若要偵測這些失敗,請設定已結束的日誌並監控 NamespaceResolutionFailure 指標,該指標會以略過擷取StrategyId的維度報告:StrategyType、、 Operation Resource和 。

更新命名空間金鑰

當您使用 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? 請求提供 變數? 結果 原因

否

否

允許

未評估的條件

否

是

允許

會忽略額外的內容索引鍵

是

是 (相符值)

允許

滿足條件

是

否

已拒絕

缺少條件索引鍵,無法滿足

是

是 (不相符的值)

已拒絕

條件未滿足

使用 IAM 限制讀取路徑存取

您可以建立 IAM 政策來限制您定義範圍的記憶體讀取存取權,例如演員、工作階段和命名空間。使用範圍做為 IAM 政策中的內容索引鍵。

下列政策會將擷取記憶體的存取權限制在特定命名空間或特定namespacePath階層下的記錄。在此範例中,政策僅允許存取具有確切命名空間的記憶體,例如具有命名空間的 summaries/agent1/ OR,位於具有 的下列namespacePath階層下,例如 summaries/agent1/ summaries/agent1/session1/或 summaries/agent1/session2/。

{ "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條件索引鍵涵蓋讀取路徑,而不需要額外的組態。