整体架构
系统架构图
员工设备(浏览器/手机)
│
▼
[portal.sayclaw.ai — 员工前台]
│ GCP SSO / IAP 验证公司邮箱
▼
[portal-api — C端后端(Go)]
│
├──→ PostgreSQL(用户/实例数据)
├──→ Redis(Session / 限流)
└──→ LiteLLM Proxy → OpenAI / Gemini / Claude
管理员设备
│
▼
[admin.sayclaw.ai — 后台管理系统](内网访问)
│ GCP IAP + admin 角色验证
▼
[admin-api — 后台后端(Go)]
│
├──→ PostgreSQL
├──→ BigQuery(审计日志查询)
└──→ Pub/Sub(报警通知)
[LiteLLM Proxy](统一 API 代理)
│ 计量 + 配额控制
▼
[OpenClaw 实例池](ai-jp-1 小龙等节点)
项目结构(Monorepo)
sayclaw/
├── apps/
│ ├── portal/ # C端前端(Vue3 + TypeScript)
│ ├── portal-api/ # C端后端(Go)
│ ├── admin/ # 后台前端(Vue3 + Soybean Admin)
│ └── admin-api/ # 后台后端(Go)
├── packages/
│ ├── shared/ # 公共 DB model + 工具包(Go)
│ ├── ui/ # 共享前端组件库
│ └── types/ # 共享 TypeScript 类型
├── infra/ # GCP / Terraform 配置
└── docs/ # 文档站(Docusaurus,doc.sayclaw.ai)
为什么双后端?
| 考量 | 单后端 | 双后端(选型) |
|---|---|---|
| 安全边界 | 共享,有横向提权风险 | admin-api 内网隔离 ✅ |
| 独立扩缩容 | 无法分开 | C端/后台独立扩 ✅ |
| 多租户 SaaS | 复杂 | 天然隔离 ✅ |
| 合规审计 | 需额外说明 | 开箱即用 ✅ |
| 开发成本 | 低 | 略高(shared 抹平) |
决策:面向商业化,安全边界优先,选双后端。
核心组件
GCP IAP(身份认证)
- 仅允许 @公司域名 邮箱登录
- 员工离职停用 Workspace 账号即自动失效
- 签发 JWT(email + 角色),后端验证
LiteLLM Proxy(API 代理)
- 统一管理所有 AI 模型 Key
- 员工不直接持有 API Key
- 按用户计量,支持配额 + 限流
OpenClaw 实例池
- 每个节点独立运行 OpenClaw Gateway
- Session Key 隔离各员工对话历史
- 支持横向扩展