数据模型
Hub 的核心领域包括 Agent、Tool、MCP server、Skill、Provider、Scene、Knowledge、Chat 与 Audit。所有 GORM 实体在服务启动时由 AutoMigrate 自动建表,schema 的真实源是internal/domain/*/ 下的模型定义。
多租户约定
- 业务表均携带
tenant_id列(varchar(64),默认值'')。租户 ID = Casdoor 组织名(casdoor 模式)或default(builtin 模式)。 - 空串
''是共享哨兵:tenant_id=''的行为全局种子/内置数据(内置 Tool、MCP server、共享 Provider 预设),所有租户可读、不可写(Provider 按 copy-on-write 复制)。 - 名称唯一性按租户限定,通过复合唯一索引实现:
uk_agents_tenant_name(agents)、uk_tenant_key(provider_summaries)、uk_skills_tenant_name(skills)、uk_scenes_tenant_name(scenes)、uk_mcp_tenant_name(mcp_servers)、uk_tools_tenant_name(tools)、uk_tenant_id(aigc_configs)。 tools.source(builtin|custom)与制品字段(file_name/file_url/file_hash/file_size):custom 工具四个制品字段完整 =ready,否则为missing;custom 强制is_default=false,builtin 恒为ready。
实体关系总览
核心实体
agents(Agent 配置)
Agent 配置的单一真实源。重要列:name(与 tenant_id 复合唯一)、content_hash、system_prompt、i18n 字段 title / description(JSON map)、Provider 绑定(provider_id / model_id / model_selection_id)、field_overrides(JSON,敏感字段 AES-GCM 加密)、平台可见性(desktop_enabled / mobile_enabled)、max_session_queries、部署状态(runtime_port / deployment_status / deployed_at / runtime_token——AES-GCM 加密、只写)。
关联表(agent_subagents、agent_tools、agent_skills)使用复合主键并配置 OnDelete:CASCADE。
user_identities(租户成员)
casdoor 模式下每租户一条成员记录,是角色的真实源。provider + external_id(Casdoor 用户 Id)唯一;tenant_id = 组织名;role(admin / maintainer / member,空 = 待分配);status(pending / active)。
tenant_oauth_clients(多组织登录)
多组织登录映射:主键org → Casdoor Application 凭证。client_secret_enc / cert_enc 为 AES-GCM 密文;cert_enc 为空时使用全局 CASDOOR_CERTIFICATE 验签。default_key 通过可空唯一索引(uk_default_key)实现「有且仅有一个 default 组织」不变式:default 行存组织名,其余为 NULL。
provider_summaries + EAV 子表
provider_summaries 保存描述性信息(key + tenant_id 复合唯一、protocol、authStyle、base_url、表单 fields JSON、locked_api_key AES-GCM 加密);可扩展的 per-Provider 配置存于 provider_attributes(EAV:(provider_id, attr_key) 唯一,值按 attr_type 区分 string/bool/int);模型为规范化行,存于 provider_models((provider_id, selection_id) 唯一,OnDelete:CASCADE,含 model_type、context_window、aigc_code)。
cloud_sessions / cloud_messages
两张表均携带tenant_id(两级隔离:先租户、再用户)。复合主键(user_id + id;message 额外含 session_id)。会话保存模型/Agent 绑定(model / model_selection_id / provider_id / agent_id / runtime_session_id / source);消息保存角色与内容、token_usage、feedback 和 AIGC 标识(aigc)。
aigc_configs
每租户一行的 AIGC 内容标识配置(GB 45438-2025,uk_tenant_id,无共享回退):统一社会信用代码、企业名称、27 位 ContentProducer 主体编码,以及 signing_key_encrypted(任何 API 均不返回)。
audit_logs
Append-only 审计日志(认证 / 用户 / 邀请 / Provider / Agent 生命周期 / CLI token / AIGC 写入;查询接口见 API Reference)。永不自动清理,无更新/删除接口,应用层只读——请按持续增长表规划容量。
复合索引
idx_audit_tenant_created(tenant_id, created_at, id):列表查询按租户过滤并按 created_at DESC, id DESC 排序——一张永不清理的增长表需要一个同时覆盖过滤与排序的索引。category / action 另带辅助单列索引。
认证相关表
users:builtin 本地账号(bcrypt 密码哈希、角色/状态)。cli_tokens:长效 CLI token(cli_<hex>;仅存 SHA-256token_hash,唯一)。invites:一次性注册链接(inv_<hex>token 哈希、角色、过期时间、used_at)。refresh_tokens:不透明会话 token(rt_<hex>;仅存 SHA-256 哈希;吊销 = 删行,轮转 = 删除 + 插入)。
静态加密
AutoMigrate 在应用启动时自动执行。生产环境可考虑将其拆分为独立的 Job,避免多副本并发迁移的竞态。跨表变更应通过迁移完成,并在升级前备份数据库。