Skip to content

数据模型

后端使用 GORM,支持 SQLite、PostgreSQL 与 MySQL/MariaDB;启动时对所有模型执行 AutoMigrate(见 internal/model/db.go)。本页按领域归纳核心模型与关键关系。

实体关系概览

User ──< APIKey
User ──< UserGroupMembership >── Group
User ──< TokenLog
User ──< PaymentOrder
User ──< CheckInRecord
User ──< ReferralCommissionLog        (referrer)
User ──  User                         (Referrer 自引用)
User ──< PasskeyCredential

UserChannel ──< Channel ──< ModelConfig >── Model
Channel ──< ChannelGroupMultiplier >── Group
ModelConfig ──< ModelGroupMultiplier >── Group

StatusMonitor ──< StatusCheck

PersonalCompany ──< CompanyCharterRevision
PersonalCompany ──< CompanyObjective ──< CompanyWorkItem ──< CompanyWorkAttempt
CompanyWorkItem ──< CompanyArtifact / CompanyHandoffPackage / CompanyApprovalRequest

Organization ──< OrganizationMember >── User
Organization ──< Department / Workspace / Role / EnterpriseTask / QuotaAccount

账户与认证

User

字段类型说明
iduint主键
username / emailstring唯一标识
oidc_sub*string绑定的 OIDC subject,唯一
password_hashstring密码哈希(JSON 不输出)
email_verifiedbool邮箱是否验证
balancedecimal(20,6)余额
group_id / groupuint / Group主分组
groups[]UserGroupMembership多分组成员关系
api_keystring兼容字段(不输出)
referral_code*string邀请码,唯一
referrer_id / referrer*uint / *User邀请人
is_adminbool是否管理员

APIKey

字段说明
user_id所属用户
name名称
key_hash / key_prefix密钥哈希与前缀(不存明文)
allowed_models允许模型(文本)
allowed_user_channels允许用户渠道(文本)
allowed_ips允许 IP(文本)
quota_limitdecimal(20,10) 额度上限
enabled是否启用

认证辅助

  • EmailVerificationCode:邮箱验证码(哈希、用途、过期时间);
  • OIDCBindRequest:OIDC 绑定请求(state、过期);
  • WebAuthnChallenge:WebAuthn 挑战(challenge、用途、RPID、Origin、过期);
  • PasskeyCredential:Passkey 凭据(credential_id、public_key_cose 等)。

供给与路由

UserChannel

namedescriptionmultiplierrouting_algorithm(默认 priority)、enabled,下挂多个 Channel

Channel

nametypeopenai/claude)、base_urlapi_key(上游密钥)、multiplierpriorityweightenableduser_channel_id,含 ModelConfigChannelGroupMultiplier

Model(全局模型)

字段组说明
model_name对外模型名,唯一
provider / provider_icon_url供应商与图标
input_price / output_price / cached_input_price基础分项价(每 1M token)
cache_write_input_price / cache_write_1h_input_price缓存写入价
image_input_price / image_output_price图像价
audio_input_price / audio_output_price音频价
*_price_tiers各项对应阶梯价(PriceTierList,文本 JSON)
enabled是否启用

ModelConfig(模型×渠道绑定)

channel_idmodel_idupstream_model_name(上游真实名)、enabled,含 ModelGroupMultiplier。另有 input_price/output_price 为遗留字段。

计费与运营

倍率

  • Groupnamemultiplier(默认 1);
  • UserGroupMembership:用户-分组关系,可带 expires_at
  • ChannelGroupMultiplier:渠道×分组倍率;
  • ModelGroupMultiplier:模型配置×分组倍率。

倍率合并与覆盖优先级见 分组与倍率

TokenLog

每次请求一条,记录 user_idapi_key_iduser_channel_idchannel_idmodel_name,以及各维度 token 数(输入/输出/缓存输入/缓存写入/1h缓存写入/图像/音频)与费用。

PaymentOrder

order_no(唯一)、user_idamountrmb_amountexchange_ratemethodstatusgateway_providergateway_trade_nonotify_payload

CheckInRecord

user_id + check_in_date(唯一组合)、reward_amountstreak_daysreward_kind

ReferralCommissionLog

记录邀请返佣,关联触发消费与受益邀请人。

工作室运营

PersonalCompany

PersonalCompany 是用户拥有的工作室运营边界,不复用企业 Organization、成员关系或 RBAC。它关联一个 Agent Studio,并保存当前状态、时区、自主等级、每日/月度预算、余额下限、运行环境和最大并发工作数。

CompanyCharterRevision 是不可变的章程版本;当前生效版本由 PersonalCompany.charter_revision_id 指向。章程包含使命、目标、数据边界、禁止动作和审批策略。

目标、工作与治理

  • CompanyObjective:工作室目标,含状态、优先级和目标日期;
  • CompanyWorkItem:持久化交付承诺,记录验收条件、风险、分配、额度预留与实际消耗;
  • CompanyWorkAttempt:一次执行或复核尝试,与工作项分离,以支持重试与恢复而不覆盖原承诺;
  • CompanyArtifact / CompanyHandoffPackage:工作产物和成员间交接;
  • CompanyApprovalRequest:需要所有者决定的审批;
  • CompanyBudgetLedger / CompanyAuditEvent:预算流水与审计事件。

工作室成员、角色模板、成员版本、能力证据和招聘计划由 PersonalCompanyEmployeeCompanyRoleTemplateCompanyEmployeeVersionCompanyCapabilityEvidenceCompanyRecruitmentPlan 记录。

企业模式

企业模式下,一个部署对应一个 Organization,用户通过 OrganizationMember 加入其中,并拥有个人 WorkspaceDepartmentRoleRolePermissionRoleBindingDepartmentRoleBinding 组成企业 RBAC 与部门授权关系。

EnterpriseTask 及其分配、部门关联和共享资源模型保存企业工作协作;QuotaAccountQuotaLedger 保存组织、成员、任务和资源池范围内的额度流水。

内容与配置

  • StatusMonitor / StatusCheck:状态监控项与每次探测结果,见 公告与状态页
  • Announcement:公告(titlecontentenabledsort_order);
  • SystemSetting:键值对配置,key 为主键,业务设置都存于此,见 站点设置

迁移注意

  • AutoMigrate 在启动时自动建表/补列,但不会删列或破坏性变更
  • 引入新缓存价字段时,迁移逻辑会用历史 input_price 回填新列(仅首次、当新列不存在时),避免老数据缓存价为 0;
  • 改动模型字段时注意向后兼容,避免影响既有数据库及跨驱动部署。

基于 MIT 协议发布(社区版)