Skip to content
이 페이지는 AI의 도움으로 작성 및 번역되었습니다. 부정확한 내용이 있으면 개선에 참여해 주세요. GitHub에서 편집

ID 관리 ​

PRX의 ID 시스템은 모든 에이전트 작업에 대해 워크스페이스 수준 및 사용자 수준 범위 지정을 제공합니다. 멀티 테넌트 배포에서 ID 컨텍스트는 주어진 세션이 접근할 수 있는 메모리, 설정, 도구, 리소스를 결정합니다. ID 모듈은 접근 제어, 감사 로깅, 개인화의 기반입니다.

개요 ​

모든 PRX 세션은 다음을 포함하는 ID 컨텍스트 내에서 작동합니다:

구성 요소설명
User에이전트와 상호 작용하는 사람 또는 봇
Workspace사용자, 설정, 데이터를 그룹화하는 논리적 경계
Session사용자와 에이전트 간의 단일 대화
Principal접근 제어 결정을 위한 유효 ID
┌─────────────────────────────────────────┐
│              Workspace: "acme"          │
│                                         │
│  ┌──────────┐  ┌──────────┐            │
│  │ User: A  │  │ User: B  │  ...       │
│  │          │  │          │            │
│  │ Sessions │  │ Sessions │            │
│  │ Memories │  │ Memories │            │
│  │ Config   │  │ Config   │            │
│  └──────────┘  └──────────┘            │
│                                         │
│  Shared: workspace config, tools, keys │
└─────────────────────────────────────────┘

설정 ​

워크스페이스 설정 ​

toml
[identity]
# 멀티 테넌트 ID 범위 지정 활성화.
enabled = true

# 워크스페이스를 지정하지 않는 세션의 기본 워크스페이스.
default_workspace = "default"

# 사용자가 새 워크스페이스를 생성할 수 있도록 허용.
allow_workspace_creation = true

# 배포당 최대 워크스페이스 수.
max_workspaces = 100

사용자 프로필 ​

사용자 프로필은 사용자별 선호도와 메타데이터를 저장합니다:

toml
[identity.profiles]
# 사용자 프로필의 스토리지 백엔드: "memory" | "sqlite" | "postgres"
backend = "sqlite"
path = "~/.local/share/openprx/identities.db"

워크스페이스 설정 ​

각 워크스페이스는 자체 설정 오버레이를 가질 수 있습니다:

toml
# config.toml의 워크스페이스별 오버라이드
[workspaces.acme]
display_name = "ACME Corp"
default_provider = "openai"
default_model = "gpt-4o"

[workspaces.acme.memory]
backend = "postgres"

[workspaces.acme.security.tool_policy]
default = "supervised"

ID 컨텍스트 ​

IdentityContext 구조체는 전체 요청 파이프라인을 통해 전달됩니다. user_id, display_name, workspace_id, session_id, role (Owner/Admin/Member/Guest), channel, 임의의 metadata를 포함합니다.

ID 컨텍스트는 모든 계층을 통해 전파됩니다: 게이트웨이가 수신 요청에서 추출하고, 에이전트 루프가 메모리 및 도구 접근 범위 지정에 사용하며, 메모리 시스템이 워크스페이스와 사용자별로 데이터를 네임스페이스하고, 비용 추적이 사용량을 귀속하며, 감사 로그가 행위자를 기록합니다.

멀티 테넌시 ​

PRX는 여러 조직이 단일 PRX 인스턴스를 공유하는 멀티 테넌트 배포를 지원합니다. 테넌시 경계는 워크스페이스 수준에서 적용됩니다:

데이터 격리 ​

리소스격리 수준
메모리워크스페이스별 + 사용자별
설정전역 기본값에 대한 워크스페이스별 오버레이
도구 정책워크스페이스별 오버라이드
시크릿워크스페이스별 볼트
비용 예산워크스페이스별 제한
감사 로그워크스페이스별 필터링

워크스페이스 간 접근 ​

기본적으로 사용자는 자신의 워크스페이스 내 리소스에만 접근할 수 있습니다. 워크스페이스 간 접근은 명시적인 설정이 필요합니다:

toml
[identity.cross_workspace]
# 워크스페이스 관리자가 다른 워크스페이스에 접근할 수 있도록 허용.
admin_cross_access = false

# 특정 사용자가 여러 워크스페이스에 접근할 수 있도록 허용.
[[identity.cross_workspace.grants]]
user_id = "shared-bot"
workspaces = ["acme", "beta-corp"]
role = "member"

사용자 해결 ​

PRX는 통신 채널에 따라 사용자 ID를 다르게 해결합니다:

채널ID 소스사용자 ID 형식
TelegramTelegram 사용자 IDtelegram:<user_id>
DiscordDiscord 사용자 IDdiscord:<user_id>
SlackSlack 사용자 IDslack:<workspace_id>:<user_id>
CLI시스템 사용자명cli:<username>
API/GatewayBearer 토큰 / API 키api:<key_hash>
WeChatWeChat OpenIDwechat:<open_id>
QQQQ 번호qq:<qq_number>

최초 접촉 등록 ​

새로운 사용자가 PRX와 처음 상호 작용하면 ID 레코드가 자동으로 생성됩니다: 채널 어댑터가 사용자 식별자를 추출하고, 기본 설정으로 프로필을 생성하며, Member 역할로 default_workspace에 사용자를 할당합니다.

수동 사용자 관리 ​

bash
# 모든 알려진 사용자 목록
prx identity list

# 사용자 세부 정보 표시
prx identity info telegram:123456

# 사용자를 워크스페이스에 할당
prx identity assign telegram:123456 --workspace acme --role admin

# 워크스페이스에서 사용자 제거
prx identity remove telegram:123456 --workspace acme

# 사용자 메타데이터 설정
prx identity set telegram:123456 --key language --value en

워크스페이스 관리 ​

bash
# 모든 워크스페이스 목록
prx workspace list

# 새 워크스페이스 생성
prx workspace create acme --display-name "ACME Corp"

# 워크스페이스 세부 정보 표시
prx workspace info acme

# 워크스페이스 설정 지정
prx workspace config acme --set default_provider=anthropic

# 워크스페이스 삭제 (확인 필요)
prx workspace delete acme --confirm

사용자 프로필 ​

사용자 프로필은 에이전트의 동작을 개인화하는 선호도를 저장합니다:

필드타입설명
user_idstring고유 식별자
display_namestring사람이 읽을 수 있는 이름
languagestring선호 언어 (ISO 639-1)
timezonestring선호 시간대 (IANA 형식)
roleenum워크스페이스 역할 (owner, admin, member, guest)
preferencesmap키-값 선호도 (모델, 상세도 등)
created_atdatetime최초 상호 작용 타임스탬프
last_seen_atdatetime가장 최근 상호 작용 타임스탬프

시스템 프롬프트에서 프로필 접근 ​

에이전트의 시스템 프롬프트는 템플릿 변수를 통해 사용자 프로필 정보를 포함할 수 있습니다 (예: {{identity.display_name}}, {{identity.language}}). 이는 프롬프트가 LLM에 전송되기 전에 ID 컨텍스트에서 해결됩니다.

역할 기반 접근 제어 ​

워크스페이스 역할은 사용자가 수행할 수 있는 작업을 결정합니다:

권한OwnerAdminMemberGuest
에이전트 사용 (채팅)예예예예
메모리 저장예예예아니요
도구 설정예예아니요아니요
사용자 관리예예아니요아니요
워크스페이스 관리예아니요아니요아니요
감사 로그 조회예예아니요아니요

통합 지점 ​

identity.enabled = true일 때 모든 메모리 작업은 workspace:{workspace_id}:user:{user_id}:{key}로 범위가 지정되어 데이터 격리를 보장합니다. 도구 정책은 워크스페이스별로 오버라이드할 수 있으며, 토큰 사용량은 사용자별 비용 보고를 위해 ID 컨텍스트에 귀속됩니다.

보안 참고 ​

  • ID 스푸핑 -- ID 시스템은 채널 어댑터가 사용자를 올바르게 식별한다고 신뢰합니다. 채널 인증이 적절히 설정되었는지 확인하세요 (봇 토큰, OAuth 등).
  • 워크스페이스 격리 -- 워크스페이스 경계는 애플리케이션 로직에서 적용됩니다. 기본 스토리지 (SQLite, Postgres)는 데이터베이스 수준의 격리를 제공하지 않습니다. 범위 지정 로직의 버그로 데이터가 유출될 수 있습니다.
  • 게스트 접근 -- 게스트는 기본적으로 최소 권한을 가집니다. 공개 대면 에이전트를 활성화할 때 게스트 역할 설정을 검토하세요.
  • 프로필 데이터 -- 사용자 프로필에 개인 정보가 포함될 수 있습니다. 개인정보 보호 정책 및 관련 규정에 따라 처리하세요.
  • 워크스페이스 간 부여 -- 워크스페이스 간 접근은 신중하게 부여하세요. 각 부여는 계정 침해 시 영향 범위를 확대합니다.

관련 페이지 ​

Released under the Apache-2.0 License.