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.