Перейти к основному содержимому

База данных

AgentCore использует PostgreSQL 16 с расширением pgvector для поиска по векторной близости. Схемой управляет Prisma 6, файл — prisma/schema.prisma.

Установка

# Start PostgreSQL
docker compose up -d postgres

# Generate Prisma client
npx prisma generate

# Run migrations
npx prisma migrate dev

# Visual database browser
npm run db:studio

Обзор моделей

В схеме 26 моделей, сгруппированных по доменам.

RBAC и организация

МодельНазначениеКлючевые поля
SystemRoleКастомные и встроенные RBAC-ролиname, slug, isSystem, allDepartments, departmentIds, permissions
DepartmentTenant/department boundary для большинства данныхname, slug, color, description, settings, isArchived
UserАутентифицированные пользователи и HR-состояниеemail, name, phone, passwordHash, legacy role, roleId, departmentId, avatarUrl, tokenVersion, permission/department override-ы
PasswordResetTokenФлоу сброса пароляuserId, token, expiresAt, usedAt

User.role хранит legacy enum (admin, approver, dept_head, employee) для совместимости. Текущая авторизация использует SystemRole + per-user extraPermissions, revokedPermissions, extraDepartmentIds и revokedDepartmentIds.

База знаний

МодельНазначениеКлючевые поля
KnowledgeBaseКоллекция документов, принадлежащая отделуdepartmentId, name, description, config
DocumentИсходный документ или сгенерированный output-файлknowledgeBaseId, title, type, originalUrl, status, metadata
ChunkТекстовый фрагмент для поискаdocumentId, content, embedding, syntheticQuestions, metadata
ChunkQuestionПуть retrieval через synthetic Q&AchunkId, question, embedding

Chunk.embedding и ChunkQuestion.embedding — столбцы vector(1536), должны совпадать с размерностью настроенной embedding-модели.

Разговоры и namespaces

МодельНазначениеКлючевые поля
NamespaceDepartment-specific AI-ассистентname, departmentId, systemPrompt, persona, config
NamespacePluginВключённые integration-плагины для namespacenamespaceId, pluginId, config, enabled
ConversationТред разговора с пользователемuserId, channel, status, metadata, namespaceId
MessageСообщение в разговореconversationId, role, content, sources
PiiRedactionMapДвусторонние PII-плейсхолдеры для разговораconversationId, placeholder, entityType, encryptedValue

Namespaces задают scope персоны, trust-матрицы, конфигурации адаптера, плагинов, разговоров, document-шаблонов и agent tasks.

Approvals и intents

МодельНазначениеКлючевые поля
ApprovalHITL approval-процессmessageId, approverId, status, editedContent, approverNotes, escalatedToId, escalationReason, intentName
IntentTrustМатрица доверия для автономной отправкиnamespaceId, intentName, successfulCount, threshold, isAutonomous, samplingRate
IntentExampleРазмеченные фразы для vector intent-классификацииnamespaceId, intentName, phrase, embedding, metadata

Генерация документов

МодельНазначениеКлючевые поля
TemplateLegacy file-based шаблоныname, departmentId, filePath, variables
DocumentTemplateHandlebars-шаблоны, управляемые через APInamespaceId, departmentId, name, description, category, templateBody, variables, outputFormat, createdBy
DocumentGenerationИстория рендеринга и сгенерированный outputtemplateId, userId, input, output, outputFileId, status, error

Сгенерированные файлы можно сохранить обратно в Document по outputFileId, чтобы они участвовали в обычных knowledge base-флоу.

Память сотрудников и agent execution

МодельНазначениеКлючевые поля
EmployeeProfileИзвлечённая пользовательская память/профильuserId, summary, currentProjects, preferences, frequentIntents, accessLevel, profileVersion, lastExtractedAt
AgentTaskЗапись задачи agent executornamespaceId, conversationId, messageId, adapterType, status, поля токенов/стоимости/длительности, metadata, timestamps
AgentToolCallStep-level трейс выполнения агентаagentTaskId, stepName, status, inputData, outputData, durationMs, errorMessage

Наблюдаемость и уведомления

МодельНазначениеКлючевые поля
AuditLogBusiness и security audituserId, action, entityType, entityId, changes, ipAddress, userAgent
AgentRunСводка Langfuse/OpenAI трейсаtraceId, conversationId, provider, model, поля токенов/стоимости/latency, status
RetrievalHitRAG retrieval-evidence для трейсаagentRunId, chunkId, documentId, rank, score, rerankScore
NotificationUser inbox-уведомленияuserId, type, title, body, entityType, entityId, readAt

Enums

Role:                admin | approver | dept_head | employee
DocumentType: pdf | docx | txt | url | image
DocumentStatus: pending | processing | ready | failed
ConversationChannel: web | whatsapp | telegram | slack | email
ConversationStatus: active | closed | escalated | awaiting_approval
MessageRole: user | assistant | system
ApprovalStatus: pending | approved | rejected | edited | escalated
AgentTaskStatus: queued | running | done | failed | timeout

Операционные заметки

  • Изоляция отделов идёт через прямое departmentId или через связанные записи Namespace, User или KnowledgeBase.
  • Soft-деактивация для пользователей (isActive = false) и отделов (isArchived = true).
  • Для инвалидации JWT используется User.tokenVersion; сброс пароля, logout-all, переводы между отделами и деактивация инкрементируют его.
  • И загрузки, и сгенерированные output-документы живут в Document, но у сгенерированных в metadata.source = "document_generation".

Миграции

Миграции лежат в prisma/migrations/.

npx prisma migrate dev --name <migration_name>

Для production-деплоев:

npx prisma migrate deploy