本设计面向一套基于 Python 的智能体开发平台,要求支持:
数据库设计的目标不是只满足 V0.1,而是保证从早期共库部署到后期多服务独立演进都能平滑过渡。
pgvector初期可以由一个 PostgreSQL 集群承载多个 schema,后期再按热点服务拆分成独立数据库。建议逻辑分域如下:
auth_dbapp_dbsession_dbruntime_dbmemory_dbtool_dbretrieval_dbtrace_dbtenant_id、app_id、run_id 定位建议统一使用 UUID 或 ULID 作为主键。
推荐:
UUIDULID 或时序友好的 UUID v7好处:
核心业务表建议统一带上以下字段:
idtenant_idorg_idcreated_byupdated_bycreated_timeupdated_timedeleted_timeversion说明:
tenant_id:多租户隔离关键字段org_id:组织维度隔离,可选deleted_time:软删除标记version:乐观锁或对象版本控制时间字段规范:
_time 后缀datetime 类型_at、date、timestamp 等命名风格不要使用数据库原生 enum 绑定太死,建议使用 varchar + check 或应用层常量控制,方便演进。
职责:
tenant| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| code | varchar(64) | 租户编码,唯一 |
| name | varchar(128) | 租户名称 |
| status | varchar(32) | active / suspended |
| plan_code | varchar(64) | 套餐 |
| settings_json | jsonb | 租户级配置 |
| created_time | datetime | 创建时间 |
| updated_time | datetime | 更新时间 |
索引:
uk_tenant_code(code)idx_tenant_status(status)organization| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| parent_id | uuid | 上级组织 |
| name | varchar(128) | 组织名 |
| status | varchar(32) | 状态 |
| created_time | datetime | 创建时间 |
| updated_time | datetime | 更新时间 |
索引:
idx_org_tenant(tenant_id)idx_org_parent(parent_id)user_account| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| org_id | uuid | 组织 ID |
| username | varchar(64) | 用户名 |
| varchar(128) | 邮箱 | |
| phone | varchar(32) | 手机号 |
| display_name | varchar(128) | 显示名 |
| status | varchar(32) | 状态 |
| profile_json | jsonb | 扩展资料 |
| created_time | datetime | 创建时间 |
| updated_time | datetime | 更新时间 |
索引:
uk_user_tenant_username(tenant_id, username)uk_user_tenant_email(tenant_id, email)idx_user_org(org_id)role| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| code | varchar(64) | 角色编码 |
| name | varchar(128) | 角色名 |
| role_type | varchar(32) | 系统角色 / 自定义角色 |
| created_time | datetime | 创建时间 |
| updated_time | datetime | 更新时间 |
permission| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| code | varchar(128) | 权限编码 |
| name | varchar(128) | 权限名称 |
| resource_type | varchar(64) | 资源类型 |
| action | varchar(32) | 动作 |
user_role| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| user_id | uuid | 用户 ID |
| role_id | uuid | 角色 ID |
| created_time | datetime | 创建时间 |
唯一索引:
uk_user_role(tenant_id, user_id, role_id)role_permission| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| role_id | uuid | 角色 ID |
| permission_id | uuid | 权限 ID |
| created_time | datetime | 创建时间 |
唯一索引:
uk_role_permission(role_id, permission_id)职责:
app_definition| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| code | varchar(64) | 应用编码 |
| name | varchar(128) | 应用名称 |
| description | text | 描述 |
| app_type | varchar(32) | chat / workflow / hybrid |
| status | varchar(32) | draft / active / archived |
| owner_user_id | uuid | 负责人 |
| settings_json | jsonb | UI、默认模型等配置 |
| created_time | datetime | 创建时间 |
| updated_time | datetime | 更新时间 |
索引:
uk_app_tenant_code(tenant_id, code)idx_app_owner(owner_user_id)idx_app_status(tenant_id, status)app_environment| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| app_id | uuid | 应用 ID |
| env_name | varchar(32) | dev / test / prod |
| model_policy_json | jsonb | 环境模型策略 |
| secret_ref_json | jsonb | 环境密钥引用 |
| created_time | datetime | 创建时间 |
| updated_time | datetime | 更新时间 |
唯一索引:
uk_app_env(app_id, env_name)app_version| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| app_id | uuid | 应用 ID |
| version_no | integer | 版本号 |
| status | varchar(32) | draft / published / rollback |
| workflow_version_id | uuid | 当前工作流版本 |
| published_time | datetime | 发布时间 |
| published_by | uuid | 发布人 |
| changelog | text | 发布说明 |
| created_time | datetime | 创建时间 |
唯一索引:
uk_app_version(app_id, version_no)workflow_definition| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| app_id | uuid | 应用 ID |
| code | varchar(64) | 流程编码 |
| name | varchar(128) | 流程名称 |
| workflow_type | varchar(32) | main / subflow / template |
| latest_version_no | integer | 最新版本号 |
| created_time | datetime | 创建时间 |
| updated_time | datetime | 更新时间 |
唯一索引:
uk_workflow_code(app_id, code)workflow_version| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| workflow_id | uuid | 流程定义 ID |
| version_no | integer | 版本号 |
| dsl_json | jsonb | 内部 DSL |
| compiled_plan_json | jsonb | 编译后的执行计划 |
| schema_version | varchar(32) | DSL 版本 |
| checksum | varchar(128) | 内容摘要 |
| status | varchar(32) | draft / validated / published |
| created_by | uuid | 创建人 |
| created_time | datetime | 创建时间 |
索引:
uk_workflow_version(workflow_id, version_no)idx_workflow_version_status(workflow_id, status)workflow_import_record| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| app_id | uuid | 应用 ID |
| source_type | varchar(32) | dify / custom_yaml / json |
| source_uri | varchar(512) | 原始来源 |
| raw_content_ref | varchar(512) | 原始文件对象存储地址 |
| converted_workflow_version_id | uuid | 转换后的流程版本 |
| import_status | varchar(32) | success / failed |
| error_message | text | 错误原因 |
| created_by | uuid | 导入人 |
| created_time | datetime | 创建时间 |
agent_definition| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| app_id | uuid | 应用 ID |
| code | varchar(64) | Agent 编码 |
| name | varchar(128) | Agent 名称 |
| role_type | varchar(32) | planner / worker / judge / custom |
| description | text | 描述 |
| created_time | datetime | 创建时间 |
| updated_time | datetime | 更新时间 |
唯一索引:
uk_agent_code(app_id, code)agent_version| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| agent_id | uuid | Agent 定义 ID |
| version_no | integer | 版本号 |
| system_prompt | text | 系统提示词 |
| model_policy_json | jsonb | 模型策略 |
| tool_policy_json | jsonb | 工具策略 |
| output_schema_json | jsonb | 输出结构约束 |
| created_by | uuid | 创建人 |
| created_time | datetime | 创建时间 |
唯一索引:
uk_agent_version(agent_id, version_no)team_definition| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| app_id | uuid | 应用 ID |
| code | varchar(64) | Team 编码 |
| name | varchar(128) | Team 名称 |
| team_mode | varchar(32) | leader_worker / debate / pipeline |
| created_time | datetime | 创建时间 |
| updated_time | datetime | 更新时间 |
team_version| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| team_id | uuid | Team 定义 ID |
| version_no | integer | 版本号 |
| config_json | jsonb | 团队策略 |
| created_by | uuid | 创建人 |
| created_time | datetime | 创建时间 |
team_member_binding| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| team_version_id | uuid | Team 版本 ID |
| agent_version_id | uuid | Agent 版本 ID |
| member_role | varchar(32) | planner / reviewer / researcher |
| sort_order | integer | 顺序 |
| config_json | jsonb | 角色级配置 |
索引:
idx_team_member_team(team_version_id)skill_definition| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| code | varchar(64) | 技能编码 |
| name | varchar(128) | 技能名称 |
| skill_type | varchar(32) | prompt / workflow / decision / retrieval |
| owner_scope | varchar(32) | system / tenant / app |
| created_time | datetime | 创建时间 |
| updated_time | datetime | 更新时间 |
skill_version| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| skill_id | uuid | 技能定义 ID |
| version_no | integer | 版本号 |
| content_json | jsonb | 技能定义内容 |
| created_by | uuid | 创建人 |
| created_time | datetime | 创建时间 |
app_binding统一保存应用对 Agent / Team / Skill / Tool / Plugin 的绑定关系。
| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| app_id | uuid | 应用 ID |
| bind_type | varchar(32) | agent / team / skill / tool / plugin |
| target_id | uuid | 绑定对象 ID |
| target_version_id | uuid | 绑定版本 ID |
| binding_scope | varchar(32) | app / env / workflow / node |
| config_json | jsonb | 绑定配置 |
| created_time | datetime | 创建时间 |
索引:
idx_app_binding_app(app_id, bind_type)职责:
session| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| app_id | uuid | 应用 ID |
| user_id | uuid | 用户 ID |
| channel_type | varchar(32) | web / api / webhook / sdk |
| session_status | varchar(32) | active / closed |
| title | varchar(256) | 会话标题 |
| started_time | datetime | 开始时间 |
| last_active_time | datetime | 最后活跃时间 |
| closed_time | datetime | 结束时间 |
索引:
idx_session_user(user_id, last_active_time desc)idx_session_app(app_id, last_active_time desc)conversation_turn| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| session_id | uuid | 会话 ID |
| turn_no | integer | 轮次 |
| input_message_id | uuid | 用户消息 ID |
| output_message_id | uuid | 最终回答消息 ID |
| run_id | uuid | 对应运行 ID |
| created_time | datetime | 创建时间 |
唯一索引:
uk_turn_session_no(session_id, turn_no)message| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| session_id | uuid | 会话 ID |
| turn_id | uuid | 对话轮次 ID |
| role | varchar(32) | user / assistant / system / tool |
| content_type | varchar(32) | text / json / file / stream |
| content_text | text | 文本内容 |
| content_json | jsonb | 结构化消息 |
| token_count | integer | token 数 |
| created_time | datetime | 创建时间 |
索引:
idx_message_session(session_id, created_time)idx_message_turn(turn_id)run_request| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| session_id | uuid | 会话 ID |
| app_version_id | uuid | 应用版本 ID |
| workflow_version_id | uuid | 流程版本 ID |
| trigger_type | varchar(32) | chat / api / schedule / webhook |
| request_payload_json | jsonb | 原始请求 |
| request_status | varchar(32) | accepted / rejected / started |
| created_time | datetime | 创建时间 |
索引:
idx_run_request_session(session_id, created_time desc)职责:
这是平台最高频的核心域之一。
workflow_run| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| app_id | uuid | 应用 ID |
| app_version_id | uuid | 应用版本 ID |
| workflow_id | uuid | 流程定义 ID |
| workflow_version_id | uuid | 流程版本 ID |
| session_id | uuid | 会话 ID,可空 |
| parent_run_id | uuid | 父运行 ID,子流程时使用 |
| root_run_id | uuid | 根运行 ID |
| run_type | varchar(32) | main / subflow / scheduled / batch |
| status | varchar(32) | pending / running / completed / failed / cancelled / paused |
| trigger_type | varchar(32) | user / api / event / timer |
| priority | integer | 优先级 |
| current_node_count | integer | 已执行节点数 |
| started_time | datetime | 开始时间 |
| finished_time | datetime | 结束时间 |
| error_code | varchar(64) | 错误码 |
| error_message | text | 错误信息 |
| created_time | datetime | 创建时间 |
索引:
idx_run_root(root_run_id)idx_run_session(session_id, created_time desc)idx_run_status(status, created_time desc)idx_run_app(app_id, created_time desc)node_run| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| run_id | uuid | 运行 ID |
| parent_node_run_id | uuid | 父节点运行 ID |
| node_id | varchar(128) | DSL 节点 ID |
| node_type | varchar(32) | llm / tool / code / team 等 |
| attempt_no | integer | 第几次尝试 |
| status | varchar(32) | pending / queued / running / completed / failed / skipped |
| worker_key | varchar(128) | 执行 worker 标识 |
| lease_expire_time | datetime | 执行 lease 到期时间 |
| queued_time | datetime | 入队时间 |
| started_time | datetime | 开始时间 |
| finished_time | datetime | 结束时间 |
| error_code | varchar(64) | 错误码 |
| error_message | text | 错误信息 |
| created_time | datetime | 创建时间 |
唯一索引建议:
uk_node_run_attempt(run_id, node_id, attempt_no)普通索引:
idx_node_run_status(status, queued_time)idx_node_run_run(run_id, started_time)idx_node_run_worker(worker_key, status)node_io_snapshot用于存储节点输入输出快照,便于回放和问题定位。
| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| node_run_id | uuid | 节点运行 ID |
| snapshot_type | varchar(32) | input / output / intermediate |
| payload_json | jsonb | 快照内容 |
| payload_ref | varchar(512) | 大对象外置引用 |
| created_time | datetime | 创建时间 |
索引:
idx_node_snapshot_node(node_run_id, snapshot_type)run_state_snapshot| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| run_id | uuid | 运行 ID |
| snapshot_no | integer | 快照号 |
| state_json | jsonb | 当前运行态 |
| context_hash | varchar(128) | 状态摘要 |
| created_time | datetime | 创建时间 |
唯一索引:
uk_run_snapshot(run_id, snapshot_no)run_event| 字段 | 类型 | 说明 |
|---|---|---|
| id | bigint | 主键 |
| tenant_id | uuid | 租户 ID |
| run_id | uuid | 运行 ID |
| node_run_id | uuid | 节点运行 ID,可空 |
| event_type | varchar(64) | 事件类型 |
| event_time | datetime | 事件时间 |
| payload_json | jsonb | 事件内容 |
索引:
idx_run_event_run(run_id, id)idx_run_event_type(event_type, event_time desc)建议:
run_event 可按月分区run_queue_task适合在没有独立 MQ 可视化追踪时保留调度状态。
| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| run_id | uuid | 运行 ID |
| node_run_id | uuid | 节点运行 ID |
| task_type | varchar(32) | schedule / retry / timeout / resume |
| execute_after_time | datetime | 可执行时间 |
| task_status | varchar(32) | pending / taken / done / dead_letter |
| retry_count | integer | 重试次数 |
| payload_json | jsonb | 任务内容 |
| created_time | datetime | 创建时间 |
| updated_time | datetime | 更新时间 |
索引:
idx_queue_ready(task_status, execute_after_time)职责:
context_namespace表示不同作用域下的上下文命名空间。
| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| app_id | uuid | 应用 ID |
| namespace_type | varchar(32) | session / run / user / domain / team |
| namespace_key | varchar(256) | 如 session:{id} 或 domain:policy |
| owner_ref | varchar(256) | 归属对象 |
| created_time | datetime | 创建时间 |
唯一索引:
uk_context_namespace(tenant_id, namespace_type, namespace_key)context_kv| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| namespace_id | uuid | 命名空间 ID |
| key | varchar(128) | 键 |
| value_type | varchar(32) | string / number / bool / json |
| value_json | jsonb | 值 |
| revision | integer | 修订号 |
| updated_time | datetime | 更新时间 |
| updated_by_run_id | uuid | 最后修改运行 |
唯一索引:
uk_context_kv(namespace_id, key)context_change_log| 字段 | 类型 | 说明 |
|---|---|---|
| id | bigint | 主键 |
| tenant_id | uuid | 租户 ID |
| namespace_id | uuid | 命名空间 ID |
| key | varchar(128) | 键 |
| before_json | jsonb | 修改前 |
| after_json | jsonb | 修改后 |
| change_source | varchar(32) | node / tool / system |
| run_id | uuid | 来源运行 |
| node_run_id | uuid | 来源节点 |
| created_time | datetime | 创建时间 |
索引:
idx_context_change_namespace(namespace_id, id desc)memory_record统一长期记忆记录。
| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| app_id | uuid | 应用 ID |
| user_id | uuid | 用户 ID,可空 |
| session_id | uuid | 会话 ID,可空 |
| run_id | uuid | 运行 ID,可空 |
| namespace | varchar(128) | user / app / domain:order |
| memory_type | varchar(32) | fact / preference / summary / episode |
| importance_score | numeric(5,2) | 重要性 |
| freshness_score | numeric(5,2) | 新鲜度 |
| content_text | text | 内容 |
| content_json | jsonb | 结构化内容 |
| source_type | varchar(32) | conversation / tool / import / rule |
| status | varchar(32) | active / archived / deleted |
| created_time | datetime | 创建时间 |
| updated_time | datetime | 更新时间 |
索引:
idx_memory_namespace(namespace, created_time desc)idx_memory_user(user_id, created_time desc)idx_memory_app(app_id, created_time desc)idx_memory_type(memory_type, status)memory_embedding| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| memory_id | uuid | 记忆记录 ID |
| embedding_model | varchar(64) | Embedding 模型 |
| embedding | vector | 向量 |
| token_count | integer | token 数 |
| created_time | datetime | 创建时间 |
索引:
ivfflat 或 hnsw(embedding)idx_memory_embedding_memory(memory_id)memory_recall_log| 字段 | 类型 | 说明 |
|---|---|---|
| id | bigint | 主键 |
| tenant_id | uuid | 租户 ID |
| run_id | uuid | 运行 ID |
| node_run_id | uuid | 节点运行 ID |
| query_text | text | 召回查询 |
| namespace | varchar(128) | 召回命名空间 |
| top_k | integer | 返回条数 |
| result_ids_json | jsonb | 命中记录 ID 列表 |
| created_time | datetime | 创建时间 |
索引:
idx_memory_recall_run(run_id, created_time desc)职责:
plugin_definition| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID,可空表示系统插件 |
| code | varchar(64) | 插件编码 |
| name | varchar(128) | 插件名称 |
| provider | varchar(128) | 提供方 |
| source_type | varchar(32) | marketplace / local / git |
| manifest_json | jsonb | 插件清单 |
| created_time | datetime | 创建时间 |
| updated_time | datetime | 更新时间 |
plugin_version| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| plugin_id | uuid | 插件 ID |
| version | varchar(64) | 版本号 |
| package_ref | varchar(512) | 包引用 |
| checksum | varchar(128) | 校验值 |
| status | varchar(32) | active / disabled |
| created_time | datetime | 创建时间 |
唯一索引:
uk_plugin_version(plugin_id, version)tool_definition| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID,可空表示系统工具 |
| plugin_id | uuid | 所属插件 |
| code | varchar(64) | 工具编码 |
| name | varchar(128) | 工具名称 |
| tool_type | varchar(32) | function / http / mcp / db |
| description | text | 描述 |
| created_time | datetime | 创建时间 |
| updated_time | datetime | 更新时间 |
唯一索引:
uk_tool_code(tenant_id, code)tool_version| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tool_id | uuid | 工具定义 ID |
| version_no | integer | 版本号 |
| input_schema_json | jsonb | 输入 schema |
| output_schema_json | jsonb | 输出 schema |
| invoke_config_json | jsonb | 调用配置 |
| timeout_ms | integer | 超时 |
| retry_policy_json | jsonb | 重试策略 |
| created_time | datetime | 创建时间 |
唯一索引:
uk_tool_version(tool_id, version_no)tool_credential不要直接存明文密钥,建议只存密文或外部 Secret 引用。
| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| credential_name | varchar(128) | 名称 |
| secret_type | varchar(32) | api_key / oauth / service_account |
| secret_ref | varchar(512) | Secret Manager 引用 |
| encrypted_payload | bytea | 可选密文 |
| created_time | datetime | 创建时间 |
| updated_time | datetime | 更新时间 |
tool_binding| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| app_id | uuid | 应用 ID |
| tool_version_id | uuid | 工具版本 ID |
| credential_id | uuid | 凭据 ID |
| binding_scope | varchar(32) | app / env / workflow / node |
| enabled | boolean | 是否启用 |
| config_json | jsonb | 绑定配置 |
| created_time | datetime | 创建时间 |
索引:
idx_tool_binding_app(app_id, binding_scope)tool_invocation_log| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| run_id | uuid | 运行 ID |
| node_run_id | uuid | 节点运行 ID |
| tool_id | uuid | 工具 ID |
| tool_version_id | uuid | 工具版本 ID |
| request_json | jsonb | 请求参数 |
| response_json | jsonb | 响应结果 |
| response_ref | varchar(512) | 大对象引用 |
| status | varchar(32) | success / failed / timeout |
| latency_ms | integer | 调用耗时 |
| error_message | text | 错误信息 |
| invoked_time | datetime | 调用时间 |
索引:
idx_tool_invocation_run(run_id, invoked_time desc)idx_tool_invocation_tool(tool_id, invoked_time desc)idx_tool_invocation_status(status, invoked_time desc)职责:
knowledge_base| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| app_id | uuid | 应用 ID |
| code | varchar(64) | 知识库编码 |
| name | varchar(128) | 名称 |
| retrieval_strategy | varchar(32) | vector / hybrid / keyword |
| status | varchar(32) | active / disabled |
| created_time | datetime | 创建时间 |
| updated_time | datetime | 更新时间 |
document| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| kb_id | uuid | 知识库 ID |
| source_type | varchar(32) | file / url / api / manual |
| source_uri | varchar(512) | 来源 |
| title | varchar(256) | 标题 |
| mime_type | varchar(128) | 文件类型 |
| object_ref | varchar(512) | 文件存储引用 |
| parse_status | varchar(32) | pending / parsed / failed |
| metadata_json | jsonb | 元数据 |
| created_time | datetime | 创建时间 |
| updated_time | datetime | 更新时间 |
索引:
idx_document_kb(kb_id, created_time desc)document_chunk| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| document_id | uuid | 文档 ID |
| chunk_no | integer | 分片序号 |
| content_text | text | 分片内容 |
| metadata_json | jsonb | 分片元数据 |
| created_time | datetime | 创建时间 |
唯一索引:
uk_document_chunk(document_id, chunk_no)chunk_embedding| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| chunk_id | uuid | 分片 ID |
| embedding_model | varchar(64) | Embedding 模型 |
| embedding | vector | 向量 |
| created_time | datetime | 创建时间 |
索引:
ivfflat 或 hnsw(embedding)idx_chunk_embedding_chunk(chunk_id)retrieval_log| 字段 | 类型 | 说明 |
|---|---|---|
| id | bigint | 主键 |
| tenant_id | uuid | 租户 ID |
| run_id | uuid | 运行 ID |
| node_run_id | uuid | 节点运行 ID |
| kb_id | uuid | 知识库 ID |
| query_text | text | 查询语句 |
| strategy | varchar(32) | vector / hybrid |
| top_k | integer | 命中数 |
| result_json | jsonb | 命中详情 |
| latency_ms | integer | 耗时 |
| created_time | datetime | 创建时间 |
索引:
idx_retrieval_run(run_id, created_time desc)idx_retrieval_kb(kb_id, created_time desc)如果 model-gateway 需要单独统计模型调用和成本,建议独立表。
model_provider| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| code | varchar(64) | openai / azure_openai / anthropic |
| name | varchar(128) | 名称 |
| provider_type | varchar(32) | hosted / self_hosted |
| config_json | jsonb | 默认配置 |
| created_time | datetime | 创建时间 |
model_definition| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| provider_id | uuid | Provider ID |
| model_code | varchar(128) | 模型编码 |
| model_kind | varchar(32) | chat / embedding / rerank |
| capability_json | jsonb | 能力描述 |
| pricing_json | jsonb | 价格配置 |
| status | varchar(32) | active / deprecated |
| created_time | datetime | 创建时间 |
唯一索引:
uk_model_provider_code(provider_id, model_code)model_invocation_log| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| run_id | uuid | 运行 ID |
| node_run_id | uuid | 节点运行 ID |
| provider_id | uuid | Provider ID |
| model_id | uuid | 模型 ID |
| request_json | jsonb | 请求摘要 |
| response_json | jsonb | 响应摘要 |
| prompt_tokens | integer | 输入 token |
| completion_tokens | integer | 输出 token |
| total_tokens | integer | 总 token |
| estimated_cost | numeric(18,6) | 预估成本 |
| latency_ms | integer | 耗时 |
| status | varchar(32) | success / failed / timeout |
| invoked_time | datetime | 调用时间 |
索引:
idx_model_invocation_run(run_id, invoked_time desc)idx_model_invocation_model(model_id, invoked_time desc)职责:
trace_span| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| trace_id | uuid | Trace ID |
| parent_span_id | uuid | 父 Span |
| span_type | varchar(32) | run / node / tool / model / memory |
| ref_id | varchar(128) | 关联业务 ID |
| name | varchar(128) | Span 名称 |
| status | varchar(32) | ok / error |
| started_time | datetime | 开始时间 |
| finished_time | datetime | 结束时间 |
| attributes_json | jsonb | 属性 |
索引:
idx_trace_trace(trace_id, started_time)idx_trace_ref(span_type, ref_id)trace_event| 字段 | 类型 | 说明 |
|---|---|---|
| id | bigint | 主键 |
| tenant_id | uuid | 租户 ID |
| trace_id | uuid | Trace ID |
| span_id | uuid | Span ID |
| event_name | varchar(128) | 事件名 |
| payload_json | jsonb | 事件内容 |
| event_time | datetime | 事件时间 |
索引:
idx_trace_event_trace(trace_id, id)eval_suite| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| app_id | uuid | 应用 ID |
| name | varchar(128) | 评测集名称 |
| description | text | 描述 |
| created_by | uuid | 创建人 |
| created_time | datetime | 创建时间 |
eval_case| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| suite_id | uuid | 评测集 ID |
| input_json | jsonb | 输入 |
| expected_json | jsonb | 预期输出 |
| tags_json | jsonb | 标签 |
| created_time | datetime | 创建时间 |
eval_run| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| tenant_id | uuid | 租户 ID |
| suite_id | uuid | 评测集 ID |
| app_version_id | uuid | 评测应用版本 |
| status | varchar(32) | pending / running / completed |
| started_time | datetime | 开始时间 |
| finished_time | datetime | 结束时间 |
| created_time | datetime | 创建时间 |
eval_result| 字段 | 类型 | 说明 |
|---|---|---|
| id | uuid | 主键 |
| eval_run_id | uuid | 评测运行 ID |
| eval_case_id | uuid | 评测用例 ID |
| run_id | uuid | 实际运行 ID |
| score | numeric(5,2) | 得分 |
| verdict | varchar(32) | pass / fail |
| detail_json | jsonb | 评测详情 |
| created_time | datetime | 创建时间 |
索引:
idx_eval_result_run(eval_run_id)核心关系可以理解为:
tenant 下有多个 app_definitionapp_definition 下有多个 app_versionapp_definition 下有多个 workflow_definitionworkflow_definition 下有多个 workflow_versionapp 可以绑定多个 agent、team、skill、toolsession 会产生多轮 conversation_turnrun_request 和一个 workflow_runworkflow_run 下会有多个 node_runnode_run 会产生快照、工具调用、模型调用、trace 和 memory recallmemory_record 与 context_namespace 共同组成“长期记忆 + 运行状态”的双层体系workflow_runnode_runrun_eventmessagememory_recordtool_invocation_logmodel_invocation_logretrieval_logtrace_event当数据量上来后,以下表建议按时间分区:
run_eventtool_invocation_logmodel_invocation_logretrieval_logtrace_eventcontext_change_log优先方案:
适合放 jsonb 的字段:
不要把核心检索条件全部塞进 jsonb,例如状态、版本、归属、时间等必须单独成列。
Redis 不替代主数据库,主要承载以下内容:
session:{id}:recent_messagesrun:{id}:state_cacherun:{id}:node_lock:{node_id}idempotency:{key}queue:readymodel_rate_limit:{provider}:{model}建议:
对象存储主要保存:
建议存储路径规范:
tenant/{tenant_id}/app/{app_id}/imports/...tenant/{tenant_id}/run/{run_id}/snapshots/...tenant/{tenant_id}/trace/{trace_id}/...tenant/{tenant_id}/kb/{kb_id}/documents/...tenantuser_accountapp_definitionapp_versionworkflow_definitionworkflow_versionsessionmessagerun_requestworkflow_runnode_runnode_io_snapshottool_definitiontool_versiontool_bindingtool_invocation_logmodel_providermodel_definitionmodel_invocation_log目标:
agent_definitionagent_versionskill_definitionskill_versionapp_bindingcontext_namespacecontext_kvmemory_recordmemory_embeddingmemory_recall_log目标:
team_definitionteam_versionteam_member_bindingrun_state_snapshotrun_queue_taskcontext_change_logknowledge_basedocumentdocument_chunkchunk_embeddingretrieval_log目标:
organizationrolepermissionuser_rolerole_permissionplugin_definitionplugin_versiontrace_spantrace_eventeval_suiteeval_caseeval_runeval_result目标:
为避免后续服务拆分时数据库耦合过深,建议遵循以下约束:
auth-service 只直接管理 auth_dbworkflow-service 只直接写 app_dbruntime-service 只直接写 runtime_dbmemory-service 只直接写 memory_dbtool-service 只直接写 tool_dbretrieval-service 只直接写 retrieval_dbtrace-service 只直接写 trace_db其他服务如果需要这些数据:
不要在应用层做跨库强事务。
Alembic 统一管理迁移以下操作建议强制审计:
如果进入工程实施,最顺的下一步是:
V0.1 的 SQLAlchemy 模型定义出来libsapp_db + session_db + runtime_db + tool_dbmemory_db 和 trace_db这套数据库设计的核心思想是:
如果你下一步继续让我执行,我建议直接进入:
V0.1 SQLAlchemy 模型骨架Alembic 初始建表脚本