跳到主要内容

技术选型 & 工程规范

前端技术栈

选型说明
框架Vue 3 + TypeScript官方推荐,生态成熟
构建工具Vite极速 HMR,秒级热更新
状态管理PiniaVue 官方推荐,简洁类型安全
UI 组件库Soybean Admin(后台)/ shadcn/vue(C端)颜值高,TailwindCSS 驱动
样式TailwindCSS v4工具类优先
图表ECharts用量统计、趋势图
HTTP 请求Axios + TanStack Query请求 + 缓存
路由Vue Router 4
表单校验VeeValidate + Zod类型安全

后端技术栈

选型说明
语言Go高并发、编译型、单二进制部署
HTTP 框架Gin轻量高性能
ORMGORMGo 生态最成熟
主数据库PostgreSQL用户/实例/配额等结构化数据
审计日志BigQuery海量对话记录,低成本查询
缓存RedisSession、限流计数器
认证GCP IAP JWT 验证服务端校验 IAP 签发 JWT
消息队列Google Pub/Sub异步报警通知
API 规范REST + OpenAPI 3.0自动生成文档,前后端契约

基础设施

选型
云平台GCP(Compute Engine + Cloud Run + IAP)
AI 节点OpenClaw on GCP Japan(ai-jp-1 等)
API 代理LiteLLM Proxy(Cloud Run 部署)
域名sayclaw.ai(Cloudflare,Proxied CDN)
SSLLet's Encrypt(certbot snap,自动续期)
CI/CDGitHub Actions + Cloud Deploy

前端项目详细结构

C端(portal)

apps/portal/src/
├── pages/
│ ├── Dashboard.vue # 我的 AI 助理列表
│ ├── Chat.vue # 进入 OpenClaw WebChat
│ ├── Usage.vue # 我的用量统计
│ └── History.vue # 历史对话(只读)
├── components/
│ ├── InstanceCard.vue # 小龙虾卡片
│ └── UsageBar.vue # 用量进度条
└── stores/
├── auth.ts # 用户 + JWT 状态
└── usage.ts # 用量数据

后台(admin)— 基于 Soybean Admin

apps/admin/src/
├── views/
│ ├── dashboard/ # 数据总览
│ ├── users/ # 员工管理(列表/详情/新增)
│ ├── instances/ # 实例管理
│ ├── usage/ # 用量报表(按人/按部门/趋势图)
│ ├── audit/ # 审计日志搜索
│ └── alerts/ # 报警规则配置
└── components/
├── UsageChart.vue # ECharts 用量图
└── StatusBadge.vue # 状态标签

后端 API 路由

portal-api(C端,公网)

POST   /auth/verify              # 验证 IAP JWT
GET /me/instances # 我的 AI 实例列表
GET /me/usage # 我的用量(今日/本月)
GET /me/history # 我的历史对话(分页)

admin-api(后台,内网)

GET    /users                    # 员工列表
POST /users # 新增员工
PATCH /users/:id # 更新(含离职 revoke)
GET /instances # 实例列表
GET /usage/user/:email # 指定用户用量
GET /usage/dept/:dept # 部门汇总
GET /audit/logs # 审计日志(过滤/分页)
PUT /alerts/rules/:id # 更新报警规则

数据库设计(核心)

-- 员工表
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) UNIQUE NOT NULL,
name VARCHAR(100),
department VARCHAR(100),
status VARCHAR(20) DEFAULT 'active',
quota_daily BIGINT DEFAULT 100000,
created_at TIMESTAMPTZ DEFAULT NOW(),
revoked_at TIMESTAMPTZ
);

-- 实例绑定
CREATE TABLE user_instances (
user_id UUID REFERENCES users(id),
instance_id VARCHAR(100),
PRIMARY KEY (user_id, instance_id)
);

-- 实例配置
CREATE TABLE instances (
id VARCHAR(100) PRIMARY KEY,
name VARCHAR(100),
model VARCHAR(100),
endpoint VARCHAR(255),
department VARCHAR(100),
status VARCHAR(20) DEFAULT 'active'
);