Major rewrite of the Go backend to support:
- Three API format imports: openai, anthropic, compatible
- Three protocol conversions: Chat Completions, Responses, Messages
- Hub-and-spoke architecture with Chat as intermediate format
Deleted:
- opencat.go (old entry)
- store/, team/, pkg/team/, pkg/store/ (old data layer)
- internal/model/, internal/consts/ (old types)
- internal/service/team/, internal/controller/team/ (old handlers)
- llm/ (removed LLM client library, pure proxy mode)
- dist/, assets/ (old build artifacts)
Added:
- internal/store/ — 9 GORM models + multi-DB support
- internal/pkg/ — crypto (AES-GCM), apikey, jwt, ratelimit, resp, tokenizer
- internal/channel/ — channel selection, weighted LB, health checks
- internal/proxy/convert/ — 6 protocol conversion functions + SSE streaming
- internal/proxy/ — gateway with request dispatch and upstream selection
- internal/usage/ — async usage recorder with batch writes
- internal/api/ — management API (auth, users, keys, channels, models)
- Makefile for build/test/deploy
Fixed API to match frontend expectations:
- Login response wraps token in { data: { token } }
- GET /api/profile route added
- Profile response wraps user in { code, data }
- Role returned as number (10=admin, 1=user)
5.7 KiB
5.7 KiB
opencatd-open 后端重构计划
参考项目:
/home/ubuntu/Code/git/openteam创建时间:2026-08-30 当前分支:team状态:执行中
一、决策记录
| # | 决策项 | 结论 | 确认时间 |
|---|---|---|---|
| 1 | 旧系统处理 | 完全移除(opencat.go、store/、team/、pkg/team/、pkg/store/) | 2026-08-30 |
| 2 | 数据迁移 | 从旧表迁移(保留用户数据,apikeys → channels) | 2026-08-30 |
| 3 | 认证统一 | 统一到新系统(API Key SHA-256 hash 查表) | 2026-08-30 |
| 4 | Redis 依赖 | 内存起步(后续可升级) | 2026-08-30 |
| 5 | llm/ 目录 | 全部删除(纯代理模式,不需要 LLM 客户端库) | 2026-08-30 |
| 6 | cobra CLI | 保留(支持 reset_admin 等子命令) | 2026-08-30 |
二、目标目录结构
opencatd-open/
├── cmd/openteam/main.go # 唯一入口(cobra CLI + embed)
├── internal/
│ ├── config/config.go # Viper + env(OT_ 前缀)
│ ├── auth/auth.go # JWT access/refresh + argon2id
│ ├── cli/ # Cobra CLI(root/serve/reset_admin)
│ ├── store/
│ │ ├── models.go # 全部 GORM 模型
│ │ ├── db.go # DB init + AutoMigrate
│ │ └── db_postgres.go # Postgres dialector
│ ├── dao/ # 数据访问层
│ ├── channel/
│ │ ├── channel.go # 候选选择、LB、并发信号量
│ │ └── health.go # 健康检查
│ ├── proxy/
│ │ ├── gateway.go # 网关核心
│ │ ├── handlers.go # 协议分派
│ │ ├── passthrough.go # HTTP 代理 + 记账
│ │ └── convert/ # 三协议互转
│ ├── api/ # 管理 API
│ ├── usage/recorder.go # 异步记账
│ ├── dto/ # 数据传输对象
│ └── pkg/ # 工具包
├── frontend/ # Vue 3 SPA
├── deploy/docker/ # Docker 部署
├── wire/ # 依赖注入
└── go.mod
三、删除清单
文件/目录
| 删除项 | 原因 |
|---|---|
opencat.go |
旧入口 |
store/ |
旧数据层 |
team/ |
旧 handler |
pkg/team/ |
旧 service |
pkg/store/ |
DB 初始化(合并到 internal/store) |
pkg/error/ |
合并到 pkg/resp |
pkg/search/ |
不需要 |
internal/model/ |
合并到 internal/store/models.go |
internal/service/team/ |
合并到 internal/service |
internal/dto/team/ |
合并到 internal/dto |
internal/controller/team/ |
合并到 internal/api |
internal/consts/ |
合并到 internal/store/models.go |
llm/ |
整个删除 |
dist/ |
旧构建产物 |
assets/ |
旧静态资源 |
router/router.go |
旧路由 |
router/chat.go |
旧 chat 路由 |
middleware/auth_team.go |
旧认证 |
Go 依赖(移除)
| 移除依赖 | 原因 |
|---|---|
sashabaranov/go-openai |
LLM 客户端 |
liushuangls/go-anthropic/v2 |
LLM 客户端 |
google/generative-ai-go |
LLM 客户端 |
google.golang.org/genai |
LLM 客户端 |
cloud.google.com/go/vertexai |
LLM 客户端 |
gorilla/websocket |
WebSocket |
coder/websocket |
WebSocket |
faiface/beep |
音频 |
gopkg.in/vansante/go-ffprobe.v2 |
音频 |
patrickmn/go-cache |
用 gcache 替代 |
Sakurasan/to |
指针工具 |
duke-git/lancet/v2 |
大杂烩 |
go-ozzo/ozzo-validation/v4 |
验证 |
mileusna/useragent |
UA 解析 |
golang.org/x/exp |
实验性包 |
google.golang.org/api |
Google API |
golang.org/x/oauth2 |
OAuth2 |
四、执行阶段
Phase 0:清理旧代码 + 目录重组
- 状态:✅ 完成
- 内容:删除旧文件、重构 models.go、更新 go.mod、更新 wire
- 验收:
go build ./cmd/openteam通过
Phase 1:渠道服务 + 加密
- 状态:✅ 完成
- 内容:crypto(AES-GCM)、channel(候选/LB/健康检查)
- 验收:单元测试通过
Phase 2:协议转换系统
- 状态:✅ 完成
- 内容:convert 包(6 种转换 + 流式 SSE)
- 验收:全部转换路径测试通过
Phase 3:代理网关
- 状态:✅ 完成
- 内容:gateway、handlers、passthrough
- 验收:curl 冒烟测试通过
Phase 4:异步记账
- 状态:✅ 完成
- 内容:usage recorder
- 验收:用量记录正确
Phase 5:管理 API
- 状态:✅ 完成
- 内容:渠道/模型 CRUD、模型导入
- 验收:管理后台可用
Phase 6:集成测试 + 收尾
- 状态:✅ 完成
- 内容:端到端测试、makefile、README
- 验收:8 种组合通过
五、执行记录
Phase 0 — 执行记录
- 开始时间:2026-08-30
- 完成时间:2026-08-30
- 变更摘要:
- 删除旧文件:opencat.go, store/, team/, pkg/team/, pkg/store/, pkg/error/, pkg/search/, llm/, dist/, assets/, internal/model/, internal/service/team/, internal/dto/team/, internal/controller/team/, internal/consts/, router/router.go, router/chat.go, middleware/auth_team.go
- 新增 internal/store/models.go(9 个 GORM 模型)+ db.go(多数据库支持)
- 新增 internal/pkg/:crypto, apikey, jwt, ratelimit, resp, tokenizer
- 重写 internal/auth, internal/cli, internal/dao/, internal/service/, internal/controller/*
- 新增 middleware/auth_llm.go(API Key 验证)
- 重写 router/setRouter.go(无 wire 依赖)
- 重写 wire/wire.go(简化为 proxy handler)
- go mod tidy 清理未使用依赖
- 验收结果:✅ go build ./cmd/openteam 通过