Novro 是一个面向企业团队的大模型统一接入平台。它用一个 API 地址和一套 API Key 对接 Kimi、GLM、DeepSeek 等模型,同时提供账号、余额、API Key、 模型路由和调用用量管理。
- 开发人:gaohongshun
- 许可证:AGPL-3.0
- 后端:Go、Ent、MySQL
- 前端:Next.js、TypeScript、shadcn/ui
| 控制台 | 首页 |
|---|---|
![]() |
![]() |
| 模型目录 | API 文档 |
|---|---|
![]() |
![]() |
Novro 不是复杂的模型运营平台,而是一个轻量、可部署、边界清晰的模型网关和 管理控制台。当前版本聚焦在企业内部模型 API 管理的核心闭环:
- 统一 OpenAI / Anthropic 风格的模型调用入口。
- 管理企业成员、管理员、登录会话和账号状态。
- 为用户创建、展示、撤销 API Key,并只保存密钥哈希和必要前缀。
- 按用户维护余额、流水、充值订单和模型调用用量。
- 管理模型提供商、模型目录、计费分组和路由配置。
- 支持按提供商权重选择模型路由、对明确的非
2xx响应重试两次后故障切换,以及按上游确认的 usage 结算。 - 提供桌面侧边栏、移动端导航抽屉、浅色和深色主题。
同一个计费分组和对外模型可以配置多个提供商。权重越高的提供商越优先;
权重相同时保持稳定的路由顺序。明确收到非 2xx 响应时,当前渠道会重试两次,
三次请求均失败后切换下一渠道;请求可能已经送达但没有明确响应、响应体不完整或流已经开始时,
系统不会自动重放:
客户端 API Key
↓ 鉴权
取得 API Key 对应的 billing_group_id
↓
使用 billing_group_id + public model 查询可用模型路由
↓
过滤:路由启用、提供商启用、目录模型启用且已定价、协议兼容
↓
按照提供商 weight 从高到低排序
↓
请求权重最高的提供商
├─ 连接建立前明确失败:有限重试,再尝试下一提供商
├─ 收到非 2xx:当前提供商重试两次,三次均失败则尝试下一提供商
├─ 收到成功终态和明确 usage:按 usage 结算,多退少补
└─ 已取得连接但结果不明:进入 pending_unknown
↓
保留预占并人工核对
预占不是最终消费。输入按 JSON 请求字节数估算,并默认最多预占 16384 Token;输出默认
最多预占 1024 Token。两个上限都可以在 /admin/gateway 调整,不限制实际上下文或输出。
最终只按上游明确报告的 usage 扣费,真实费用超过预占时通过唯一结算流水幂等补扣。
- Go 服务:
cmd/novro - 私有应用代码:
internal - 数据模型:Ent schema 和生成代码
- 数据库:MySQL 8.4
- 迁移:
ent/migrate/migrations - Web 控制台:Next.js App Router
- UI 基础:原始 shadcn/ui primitives
- 包管理:pnpm workspace
cmd/novro Go 服务入口
internal 后端应用、领域和基础设施代码
ent Ent schema 与生成的数据访问代码
ent/migrate/migrations 有序 SQL 迁移
apps/web Next.js 控制台
docs 产品、开发、API、部署和运维文档
docs/images README 截图资源
前置条件:
- Go
1.26.5 - Node.js
24 - pnpm
11.23.0 - MySQL
8.4
安装依赖:
pnpm install
go mod download复制 .env.example 中的变量名到本地安全环境。不要提交真实 .env、
数据库密码、API Key、会话密钥、私钥或生产连接串。
初始化并迁移数据库:
go run ./cmd/novro init-db
go run ./cmd/novro check-db
go run ./cmd/novro migrate启动后端和控制台:
go run ./cmd/novro
pnpm --dir apps/web dev默认入口:
- 控制台:
http://localhost:3000 - API 接入文档:
http://localhost:3000/docs - 模型与官方价格:
http://localhost:3000/models - 存活检查:
http://localhost:8080/healthz - 就绪检查:
http://localhost:8080/readyz
推荐通过一次性初始化令牌创建第一个管理员:
$env:NOVRO_SETUP_TOKEN='<GENERATED_RANDOM_VALUE>'
go run ./cmd/novro然后访问 http://localhost:3000/setup 完成初始化。成功后从部署环境移除
NOVRO_SETUP_TOKEN。
无浏览器环境可以使用命令行初始化:
$env:NOVRO_BOOTSTRAP_USERNAME='novro'
$env:NOVRO_BOOTSTRAP_EMAIL='novro@example.invalid'
$env:NOVRO_BOOTSTRAP_DISPLAY_NAME='Novro'
$env:NOVRO_BOOTSTRAP_PASSWORD='<SET_A_RANDOM_PASSWORD>'
go run ./cmd/novro bootstrap-admin
Remove-Item Env:NOVRO_BOOTSTRAP_PASSWORD- 运行配置来自环境变量。
- 前端服务端变量使用
NOVRO_SERVER_URL,不要使用NEXT_PUBLIC_*暴露服务端配置。 - 正常运行不要使用 MySQL 管理员账号,使用最小权限应用账号。
- 生产环境数据库 TLS 必须保持启用。
- 不要在 HTTP 响应、前端页面、日志或文档里暴露密码、密钥、连接串、Cookie 或 Authorization 头。
- 不要让服务启动时自动创建 Ent schema,数据库变更必须通过显式迁移。
窄范围修改后运行对应检查,交付前运行完整检查:
go test ./cmd/... ./internal/... ./ent/...
go vet ./...
pnpm --dir apps/web lint
pnpm --dir apps/web typecheck
pnpm --dir apps/web test
pnpm --dir apps/web buildWindows 没有 make 时直接运行上面的命令。有 make 时也可以执行:
make checkCopyright (C) 2026 gaohongshun.
Novro 使用 GNU Affero General Public License v3.0 授权。完整条款见 LICENSE。



