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.

네임스페이스 키를 정의할 때는 다음 사항에 유의하세요.

  • 나중에 사용할 수 있도록 키를 사전 등록하기 위해 전략에서 참조하지 않는 네임스페이스 키를 정의할 수 있습니다.

  • 여러 전략에서 단일 네임스페이스 키를 참조할 수 있습니다. 예를 들어는 의미 체계 전략과 요약 전략 모두namespaceTemplate의에 나타날 {companyname} 수 있습니다.

  • 현재 전략의에서 참조하는 네임스페이스 키는 삭제할 수 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, StrategyType, 및 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 설정된 경우에만 호출자가 이벤트를 생성하도록 허용하고 acmeorgname가 로 설정된 경우 요청을 명시적으로 거부합니다. 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/session1/ 또는와 같은를 사용하는 다음 네임스페이스 경로 계층 구조에서 네임스페이스가 있는 summaries/agent1/ OR과 summaries/agent1/ 같은 정확한 namespacePath스페이스가 있는 메모리에 대한 액세스만 허용합니다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 조건 키는 추가 구성 없이 읽기 경로를 포함합니다.