agent-platform-database-design.md 37 KB

Python 智能体开发平台数据库设计(多服务 / 可横向扩展版)

1. 设计目标

本设计面向一套基于 Python 的智能体开发平台,要求支持:

  • 多应用、多租户、多环境
  • 多智能体、团队协作、复杂工作流
  • 会话、运行态、上下文、记忆、技能、工具、插件
  • 多服务部署与水平扩展
  • 高并发写入、长链路执行、可观测与审计

数据库设计的目标不是只满足 V0.1,而是保证从早期共库部署到后期多服务独立演进都能平滑过渡。

2. 总体原则

2.1 核心原则

  • 配置数据和运行数据分离
  • 热路径数据和冷路径数据分离
  • 强事务数据优先放 PostgreSQL
  • 短期状态与幂等控制优先放 Redis
  • 语义记忆与知识检索使用 pgvector
  • 文件和产物不落数据库,统一进入对象存储

2.2 分库分域原则

初期可以由一个 PostgreSQL 集群承载多个 schema,后期再按热点服务拆分成独立数据库。建议逻辑分域如下:

  • auth_db
  • app_db
  • session_db
  • runtime_db
  • memory_db
  • tool_db
  • retrieval_db
  • trace_db

2.3 横向扩展原则

  • 所有运行态表必须支持按 tenant_idapp_idrun_id 定位
  • 长链路表优先使用追加写,减少热点更新
  • 高并发表尽量避免大事务和跨域 join
  • 跨服务关联尽量靠业务 ID,不依赖数据库外键
  • 表设计默认支持归档和分区

3. ID 与通用字段规范

3.1 主键策略

建议统一使用 UUIDULID 作为主键。

推荐:

  • 配置类对象:UUID
  • 高写入运行表:ULID 或时序友好的 UUID v7

好处:

  • 支持多服务独立生成 ID
  • 避免数据库序列成为全局瓶颈
  • 便于未来跨库迁移

3.2 通用字段

核心业务表建议统一带上以下字段:

  • id
  • tenant_id
  • org_id
  • created_by
  • updated_by
  • created_time
  • updated_time
  • deleted_time
  • version

说明:

  • tenant_id:多租户隔离关键字段
  • org_id:组织维度隔离,可选
  • deleted_time:软删除标记
  • version:乐观锁或对象版本控制

时间字段规范:

  • 所有时间字段统一使用 _time 后缀
  • 所有时间字段统一使用 datetime 类型
  • 禁止混用 _atdatetimestamp 等命名风格

3.3 枚举字段建议

不要使用数据库原生 enum 绑定太死,建议使用 varchar + check 或应用层常量控制,方便演进。

4. 分域数据库设计

4.1 Auth / Tenant 域

职责:

  • 用户、组织、租户、角色、权限

表: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) 用户名
email 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)

4.2 App / Workflow 配置域

职责:

  • 应用定义
  • 工作流定义
  • 版本与环境配置
  • Agent、Team、Skill 绑定

表: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)

4.3 Session 域

职责:

  • 用户会话
  • 对话消息
  • 请求入口
  • 应答记录

表: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)

4.4 Runtime 域

职责:

  • 流程运行
  • 节点执行
  • 状态迁移
  • 快照与恢复
  • 异步事件

这是平台最高频的核心域之一。

表: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)

4.5 Memory / Context 域

职责:

  • 会话上下文
  • 任务上下文
  • 长期记忆
  • 领域隔离记忆
  • 召回记录

表: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 创建时间

索引:

  • 向量索引:ivfflathnsw(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)

4.6 Tool / Plugin 域

职责:

  • 工具、插件、凭据、调用记录

表: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)

4.7 Retrieval / Knowledge 域

职责:

  • 知识库
  • 文档与分片
  • 向量索引
  • 检索审计

表: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 创建时间

索引:

  • 向量索引:ivfflathnsw(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)

4.8 Model / LLM 域

如果 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)

4.9 Trace / Eval 域

职责:

  • 链路追踪
  • 回放
  • 评测与基线

表: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)

5. 关键关系说明

核心关系可以理解为:

  • 一个 tenant 下有多个 app_definition
  • 一个 app_definition 下有多个 app_version
  • 一个 app_definition 下有多个 workflow_definition
  • 一个 workflow_definition 下有多个 workflow_version
  • 一个 app 可以绑定多个 agentteamskilltool
  • 一个 session 会产生多轮 conversation_turn
  • 一次输入通常对应一个 run_request 和一个 workflow_run
  • 一个 workflow_run 下会有多个 node_run
  • 一个 node_run 会产生快照、工具调用、模型调用、trace 和 memory recall
  • memory_recordcontext_namespace 共同组成“长期记忆 + 运行状态”的双层体系

6. 索引与分区建议

6.1 必须优先建索引的表

  • workflow_run
  • node_run
  • run_event
  • message
  • memory_record
  • tool_invocation_log
  • model_invocation_log
  • retrieval_log
  • trace_event

6.2 建议分区的表

当数据量上来后,以下表建议按时间分区:

  • run_event
  • tool_invocation_log
  • model_invocation_log
  • retrieval_log
  • trace_event
  • context_change_log

优先方案:

  • PostgreSQL 按月 range partition

6.3 JSONB 使用建议

适合放 jsonb 的字段:

  • DSL 内容
  • 节点快照
  • 模型能力描述
  • 工具输入输出 schema
  • 配置策略

不要把核心检索条件全部塞进 jsonb,例如状态、版本、归属、时间等必须单独成列。

7. Redis 设计建议

Redis 不替代主数据库,主要承载以下内容:

  • session:{id}:recent_messages
  • run:{id}:state_cache
  • run:{id}:node_lock:{node_id}
  • idempotency:{key}
  • queue:ready
  • model_rate_limit:{provider}:{model}

建议:

  • 所有 Redis Key 带租户前缀
  • 运行态缓存必须可从数据库重建
  • 分布式锁必须带 TTL

8. 对象存储设计建议

对象存储主要保存:

  • 原始导入 YAML/JSON
  • 大体积节点快照
  • 工具大响应结果
  • 文件上传
  • 回放原始材料
  • 检索文档原文

建议存储路径规范:

  • 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/...

9. 分阶段建表建议

V0.1 必需表

  • tenant
  • user_account
  • app_definition
  • app_version
  • workflow_definition
  • workflow_version
  • session
  • message
  • run_request
  • workflow_run
  • node_run
  • node_io_snapshot
  • tool_definition
  • tool_version
  • tool_binding
  • tool_invocation_log
  • model_provider
  • model_definition
  • model_invocation_log

目标:

  • 跑通“应用配置 + 工作流执行 + 工具调用 + 基础日志”

V0.2 新增表

  • agent_definition
  • agent_version
  • skill_definition
  • skill_version
  • app_binding
  • context_namespace
  • context_kv
  • memory_record
  • memory_embedding
  • memory_recall_log

目标:

  • 跑通“Agent + 技能 + 记忆”

V0.3 新增表

  • team_definition
  • team_version
  • team_member_binding
  • run_state_snapshot
  • run_queue_task
  • context_change_log
  • knowledge_base
  • document
  • document_chunk
  • chunk_embedding
  • retrieval_log

目标:

  • 跑通“多智能体 + 子流程 + 检索 + 恢复”

V0.4 新增表

  • organization
  • role
  • permission
  • user_role
  • role_permission
  • plugin_definition
  • plugin_version
  • trace_span
  • trace_event
  • eval_suite
  • eval_case
  • eval_run
  • eval_result

目标:

  • 跑通“治理、可观测、评测、插件化”

10. 跨服务数据边界建议

为避免后续服务拆分时数据库耦合过深,建议遵循以下约束:

  • auth-service 只直接管理 auth_db
  • workflow-service 只直接写 app_db
  • runtime-service 只直接写 runtime_db
  • memory-service 只直接写 memory_db
  • tool-service 只直接写 tool_db
  • retrieval-service 只直接写 retrieval_db
  • trace-service 只直接写 trace_db

其他服务如果需要这些数据:

  • 通过 API 读
  • 或通过事件异步复制只读视图

不要在应用层做跨库强事务。

11. 迁移与演进建议

11.1 迁移工具

  • Alembic 统一管理迁移
  • 每个服务单独 migration 目录
  • 共用库只提供模型定义,不直接统一迁移所有库

11.2 演进策略

  • 先 schema 兼容,再代码切换
  • 大字段新增优先 nullable
  • 热表结构变更优先分阶段 rollout
  • 分区表和归档表尽量提前规划

11.3 审计策略

以下操作建议强制审计:

  • 应用发布
  • 工作流导入
  • 工具绑定变更
  • 记忆写入策略变更
  • 权限变更
  • 人工审批结果

12. 推荐下一步

如果进入工程实施,最顺的下一步是:

  1. 先把 V0.1 的 SQLAlchemy 模型定义出来
  2. 建 Monorepo 下的多服务目录和共享 libs
  3. 先跑通 app_db + session_db + runtime_db + tool_db
  4. 后续再补 memory_dbtrace_db

13. 结论

这套数据库设计的核心思想是:

  • 用 PostgreSQL 承载配置、运行、治理主数据
  • 用 Redis 承载高频短期状态和幂等控制
  • 用 pgvector 承载语义记忆与知识检索
  • 用对象存储承载大对象和原始产物
  • 用分域设计保证未来多服务拆分和水平扩展不需要推翻重来

如果你下一步继续让我执行,我建议直接进入:

  1. V0.1 SQLAlchemy 模型骨架
  2. Alembic 初始建表脚本