Skip to content
Эта страница создана и переведена с помощью ИИ. Если вы заметили неточности, помогите нам улучшить её. Редактировать на GitHub

Управление идентификацией

Система идентификации PRX обеспечивает области на уровне рабочего пространства и пользователя для всех операций агента. В многотенантных развёртываниях контекст идентификации определяет, к каким воспоминаниям, конфигурациям, инструментам и ресурсам может обращаться данная сессия. Модуль идентификации -- основа для контроля доступа, аудиторского журналирования и персонализации.

Обзор

Каждая сессия PRX работает в контексте идентификации, включающем:

КомпонентОписание
ПользовательЧеловек или бот, взаимодействующий с агентом
Рабочее пространствоЛогическая граница, группирующая пользователей, конфигурации и данные
СессияЕдиничный разговор между пользователем и агентом
ПринципалЭффективная идентичность для решений контроля доступа
┌─────────────────────────────────────────┐
│          Рабочее пространство: "acme"   │
│                                         │
│  ┌──────────┐  ┌──────────┐            │
│  │ Пользов. │  │ Пользов. │  ...       │
│  │    A      │  │    B     │            │
│  │          │  │          │            │
│  │ Сессии   │  │ Сессии   │            │
│  │ Память   │  │ Память   │            │
│  │ Конфиг.  │  │ Конфиг.  │            │
│  └──────────┘  └──────────┘            │
│                                         │
│  Общее: конфигурация, инструменты, ключи│
└─────────────────────────────────────────┘

Конфигурация

Настройка рабочего пространства

toml
[identity]
# Включить многотенантную область идентификации.
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"

Контекст идентификации

Структура IdentityContext передаётся через весь конвейер обработки запросов. Она содержит: user_id, display_name, workspace_id, session_id, role (Owner/Admin/Member/Guest), channel и произвольные metadata.

Контекст идентификации распространяется через каждый слой: шлюз извлекает его из входящих запросов, цикл агента использует для области памяти и доступа к инструментам, система памяти пространственно разделяет данные по рабочему пространству и пользователю, отслеживание затрат атрибутирует использование, а журнал аудита фиксирует актора.

Мультитенантность

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 пользователя
TelegramID пользователя Telegramtelegram:<user_id>
DiscordID пользователя Discorddiscord:<user_id>
SlackID пользователя Slackslack:<workspace_id>:<user_id>
CLIСистемное имя пользователяcli:<username>
API/ШлюзBearer-токен / API-ключapi:<key_hash>
WeChatWeChat OpenIDwechat:<open_id>
QQНомер QQqq:<qq_number>

Регистрация при первом контакте

При первом взаимодействии нового пользователя с PRX запись идентичности создаётся автоматически: адаптер канала извлекает идентификатор пользователя, создаёт профиль с настройками по умолчанию и назначает пользователя в default_workspace с ролью Member.

Ручное управление пользователями

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.

Ролевой контроль доступа

Роли рабочего пространства определяют, какие действия может выполнять пользователь:

РазрешениеOwnerAdminMemberGuest
Использование агента (чат)ДаДаДаДа
Сохранение воспоминанийДаДаДаНет
Настройка инструментовДаДаНетНет
Управление пользователямиДаДаНетНет
Управление рабочим пространствомДаНетНетНет
Просмотр журналов аудитаДаДаНетНет

Точки интеграции

При identity.enabled = true все операции с памятью пространственно ограничены по workspace:{workspace_id}:user:{user_id}:{key}, обеспечивая изоляцию данных. Политики инструментов могут переопределяться для каждого рабочего пространства, а использование токенов атрибутируется контексту идентификации для отчётности о затратах по пользователям.

Замечания по безопасности

  • Подмена идентичности -- система идентификации доверяет адаптеру канала в правильной идентификации пользователей. Убедитесь, что аутентификация канала настроена корректно (токены ботов, OAuth и т.д.).
  • Изоляция рабочих пространств -- границы рабочих пространств обеспечиваются в логике приложения. Базовое хранилище (SQLite, Postgres) не обеспечивает изоляцию на уровне базы данных. Ошибка в логике ограничения области может привести к утечке данных.
  • Гостевой доступ -- гости имеют минимальные разрешения по умолчанию. Проверьте конфигурацию гостевой роли при включении публичных агентов.
  • Данные профиля -- профили пользователей могут содержать персональные данные. Обрабатывайте в соответствии с вашей политикой конфиденциальности и применимым законодательством.
  • Межпространственные права -- предоставляйте межпространственный доступ экономно. Каждое предоставление расширяет зону поражения при компрометации учётной записи.

Связанные страницы

Released under the Apache-2.0 License.