Skip to main content
스코핑은 기억을 무엇을 기준으로 나눠 저장할지 정하는 것입니다. 기준이 되는 값을 스코프 키라고 합니다. 즉, 기억은 스코프 키 값에 따라 나뉘어 저장됩니다. 누가 이 메모리 공간에 접근할 수 있고 접근한 사람에게 무엇이 보이는지는 접근 제어에서 설정합니다.

스코프 키

기억을 나누는 기준이 되는 키입니다.
  • flow_id Flow 단위로 나눕니다. 해당 Flow를 쓰는 모든 실행이 같은 기억을 공유합니다.
  • thread_id 대화 단위로 나눕니다. 보통 flow_id와 함께 써서 대화마다 기억을 따로 둡니다.
  • user_id 사용자 단위로 나눕니다. 사용자마다 기억이 따로 쌓입니다.
  • 커스텀 키 위 셋 말고도 호출에 함께 보내는 값이면 키가 될 수 있습니다. 예: org_id
키 값은 Flow를 호출할 때 요청에서 채워집니다. 대화형 Flow에서는 대화가 thread_id를, 호출자가 user_id를 채우는 식입니다. 그래서 커스텀 키에는 호출에서 보내는 이름을 그대로 넣어야 합니다. 호출 쪽에서 org_id를 보내고 있다면 커스텀 키에도 org_id를 넣습니다. 호출에 없는 organization_id를 넣으면 스코핑이 되지 않습니다. 키를 하나도 쓰지 않으면 전역이 되어, 모든 실행이 하나의 저장소를 공유합니다.

스코프 키 조합

스코프 키는 여러 개를 조합할 수 있고, 조합한 결과가 하나의 저장 단위가 됩니다. flow_id와 thread_id를 함께 쓰면 대화 하나가 저장 단위가 되고, 여기에 user_id까지 더하면 같은 대화라도 사용자마다 따로 저장됩니다. 키를 더할수록 저장 단위가 작아집니다. 메모리 공간 설정에서 다음 중 하나를 선택합니다. 앞의 넷은 자주 쓰는 조합을 미리 담아 둔 프리셋입니다.
  • 세션 flow_id와 thread_id
  • 유저 장기기억 user_id
  • Flow 공유 flow_id
  • 전역 키 없음
  • 키 직접 조합 flow_id, thread_id, user_id 중 필요한 것을 선택하고, 커스텀 키를 만들어 같이 조합할 수도 있습니다.

접근 제어

스코프가 저장을 나눈다면, 접근 제어는 읽기를 통제합니다. 이 메모리 공간에 접근할 수 있는 사람을 제한하고, 접근한 사람에게 보여 줄 항목을 정합니다. 파티션 키(개인화) 기준이 될 값을 하나 정하면, 호출자는 자기 값에 해당하는 항목만 봅니다. 비워 두면 모두가 같은 항목을 봅니다. 안 함, 유저별(user_id), 조직별(org_id), 고객사별(client_id) 중에서 선택하거나 커스텀 클레임을 직접 넣습니다. 필요 권한(게이트) 조건을 걸어 접근 자체를 막습니다. 조건을 통과하지 못한 호출은 이 메모리 공간을 읽지 못합니다. 각 규칙은 param + 연산자(in / eq) + 허용값 목록 형태입니다. 관리자만을 누르면 user.permission in admin, owner 규칙이 바로 만들어지고, + 규칙으로 조건을 더 추가할 수 있습니다. 조건이 여럿이면 모두 통과해야 접근됩니다.

디버깅하는 법

Agent 답변에 다른 스코프의 기억이 섞여 나온다면 이렇게 확인합니다.
  1. 트레이스의 메모리 작업을 봅니다. 모든 읽기/쓰기가 스코프와 함께 기록됩니다.
  2. 의도보다 넓은 스코프로 쓰인 항목을 찾습니다.
  3. 메모리 공간 설정 탭의 접근 섹션에서 파티션 키와 필요 권한이 의도대로 걸려 있는지 확인합니다.
가장 흔한 실수는 스코프 키를 켜는 걸 잊어 모든 항목이 전역 하나에 쌓이는 경우입니다.