Оформление
Модель данных
Список таблиц базы данных с назначением каждой и основные связи между ними.
Общее
База одна, PostgreSQL. Схема описана средствами Drizzle ORM, миграции хранятся отдельными файлами SQL.
Идентификаторы почти везде это текстовые cuid2. Исключение составляют три таблицы настроек: в каждой из них всегда одна строка с идентификатором default.
Пользователи и доступ
| Таблица | Назначение |
|---|---|
roles | Роли. Код роли уникален, признак системной роли защищает две встроенные роли от удаления |
role_permissions | Права роли: сочетание роли, действия и объекта |
user_groups | Группы доступа. Одна из групп всегда помечена как группа по умолчанию |
users | Учётная запись: логин, хеш пароля, имя и фамилия, аватар, роль, группа, состояние |
auth_sessions | Сессии входа: хеш токена, срок истечения, признак отзыва |
api_keys | Ключи API: владелец, видимая часть ключа, хеш, признак отзыва, время последнего использования |
api_key_mcp_sources | Какие серверы MCP разрешены конкретному ключу |
Модели и инструменты
| Таблица | Назначение |
|---|---|
providers | Провайдер: название, базовый адрес, зашифрованный ключ, признак включения |
models | Модель: внешний идентификатор, отображаемое имя, размер контекста, режим работы, настройки размышлений, признак включения |
mcp_sources | Сервер MCP: транспорт, адрес или команда запуска, зашифрованный токен, флаги доступа, состояние проверки, результат проверки безопасности |
Настройки поведения ИИ
| Таблица | Назначение |
|---|---|
agents | Агент: дополнительные указания модели, значок, признак агента по умолчанию, запреты на инструменты |
rules | Правила: база знаний в формате Markdown, доступная модели через инструменты чтения. Организована деревом |
skills | Навыки: заготовки указаний в формате Markdown. Без владельца навык считается общим, с владельцем личным |
Чаты
| Таблица | Назначение |
|---|---|
agent_sessions | Чат: владелец, название, состояние, выбранная модель и агент, снимок заполненности контекста |
chat_messages | Сообщение: роль, текст, блоки для отображения, история действий модели, признак участия в контексте |
runs | Один запуск обработки сообщения: состояние и текст ошибки |
session_files | Файл чата: вид, имя, тип, размер, путь на диске, кто менял последним |
queued_turns | Очередь сообщений, которые не смогли начаться сразу |
Персональные данные
| Таблица | Назначение |
|---|---|
pii_masking_settings | Настройки маскирования: включение, категории, ограничения |
pii_aliases | Словарь замен по каждому чату. Исходное значение зашифровано, поиск по хешу |
pii_masked_messages | Кэш замаскированного вида сообщения |
Внешние агенты
| Таблица | Назначение |
|---|---|
managed_agents | Реестр внешних агентов: имя, адрес, зашифрованный токен, состояние, полученное от агента описание |
managed_agent_event_cursors | Позиция чтения потока событий по каждому агенту |
managed_agent_events | Неизменяемый локальный журнал событий агента с обязательной пометкой о маскировании |
managed_agent_commands | Аудит посланных агенту команд с ключом идемпотентности |
managed_agent_ui_manifests | Кэш описания разделов, которые объявляет агент |
managed_agent_ui_actions | Аудит нажатий кнопок в объявленных агентом разделах |
managed_agent_llm_bindings | Какая модель, служебная учётная запись и ключ выданы агенту |
eva_attention_items | Спорные случаи агента, требующие разбора человеком |
managed_agent_attention_sync_states | Позиция и результат синхронизации спорных случаев |
eva_attention_action_records | Аудит действий оператора над спорным случаем |
eva_attention_audit_events | Отдельный журнал событий разбора |
Подробности на странице Внешние агенты.
Настройки и учёт
| Таблица | Назначение |
|---|---|
capacity_policy | Лимиты Рантайма. Всегда одна строка |
platform_settings | Общие настройки платформы: адреса для слоя S3, настройки ONLYOFFICE. Всегда одна строка |
usage_ledger_entries | Журнал расхода: одна запись на обращение к модели |
Основные связи
- Пользователь ссылается на роль и на группу. Удалить роль или группу, пока в ней есть пользователи, нельзя.
- Сессии входа, ключи API, навыки и чаты удаляются вместе с пользователем.
- Модели удаляются вместе с провайдером.
- Сообщения, запуски, файлы, замены персональных данных, очередь и записи расхода удаляются вместе с чатом.
- Если удалить модель или агента, чат сохраняется, но ссылка обнуляется.
Изменения, внесённые поддержкой внешних агентов
| Изменение | Зачем |
|---|---|
| У пользователей появилось поле вида учётной записи | Служебная учётная запись агента помечается как машинная: она авторизуется только по ключу и не входит по паролю |
| В журнале расхода ссылка на чат стала необязательной | Обращения агента к модели происходят вне любого чата |
| В журнале расхода появилась ссылка на агента | Расход относится на агента, а не на чат |
Чего в модели нет
Стоимость обращений не рассчитывается. Поле для оценки стоимости в журнале расхода есть, но оно не заполняется, справочника цен в платформе нет.