本文档记录项目从空仓到可验收平台的实施分解、阶段输出、依赖关系和风险控制方式。它既可作为复盘文档,也可供后续二次建设时参照。
本项目采用“先跑通主链路,再补齐治理与文档”的策略,优先级如下:
- 打通
NEW-API -> 智谱主链路。 - 打通
LibreChat -> NEW-API用户入口链路。 - 补齐脚本化初始化、联调、健康检查与恢复。
- 最后补齐管理员使用、运维和验收文档。
目标:先把“做什么、不做什么、为什么这样做”写清楚,避免后续边写边改架构。
主要产出:
docs/architecture/requirements.mddocs/architecture/architecture.mddocs/architecture/acceptance-criteria.mddocs/architecture/adr/0001-use-new-api-as-gateway.md
完成标准:
- 确认首期验收通道为智谱。
- 确认使用
NEW-API + LibreChat,不自研前后端。 - 确认本地与生产都采用 Docker Compose。
目标:建立清晰的仓库结构和统一入口。
主要工作:
- 建立
docs/、deploy/、scripts/、tests/、.github/ - 补齐
.gitignore、.env.example、Makefile、README.md - 约定
runtime/为运行时目录,不纳入 Git
完成标准:
- 仓库结构完整。
- 常见操作可通过
make入口触发。
目标:让核心组件能在本机稳定启动。
主要工作:
- 编写 deploy/docker-compose.local.yml
- 设计
runtime/local/持久化目录 - 实现
init/up/down/restart - 解决 PostgreSQL 与 Redis 的基础依赖
完成标准:
make init可生成本地环境并校验 compose。make up可启动本地核心服务。
目标:让平台真正具备模型调用能力。
主要工作:
- 固定
NEW-API v0.12.1 - 固定智谱渠道类型
26(ZhipuV4) - 编写智谱渠道模板、服务 token 模板、限流模板
- 编写
bootstrap-new-api.sh
关键细节:
- 自动初始化 root 管理员。
- 自动写入项目内请求限流配置,默认关闭。
- 自动创建或校正服务用户。
- 自动创建或校正智谱渠道。
- 自动创建或校正 LibreChat 服务 token。
完成标准:
NEW-API /v1/models能返回当前授权模型集合,且至少包含zhipu-primaryNEW-API /v1/chat/completions可真实调用智谱成功
目标:让最终用户入口真正可用。
主要工作:
- 固定
LibreChat v0.8.5 - 编写自定义端点模板
- 实现运行时配置渲染脚本
render-librechat-config.sh - 调整 compose,挂载渲染后的真实配置文件
关键细节:
- 不能直接把带
${...}的模板文件给容器使用。 - 服务 token 变更后必须自动重渲染并重启 LibreChat。
- LibreChat 默认按供应商拆分为
API-zhipu/API-deepseek/API-aliyun/API-kimi/API-doubao/API-mimo/API-minimax端点。 - 若配置前端白名单,则只展示白名单与
NEW-API模型集合的交集。 - LibreChat 不暴露真实上游模型名,只暴露平台批准的模型名或别名。
完成标准:
- LibreChat 可访问。
- LibreChat 已识别
API-zhipu/API-deepseek/API-aliyun/API-kimi/API-doubao/API-mimo/API-minimax自定义端点。 - 最终用户可以在 UI 中按供应商看到当前授权模型。
- 管理员可通过
make sync-provider-models同步供应商模型列表与前端模型列表。
目标:让平台从“能跑”变成“可交付、可验收、可接手”。
主要工作:
- 编写
doctor、healthcheck、smoke-test、smoke-test-zhipu - 编写
sync-librechat-models - 编写
backup与restore - 编写
verify-no-secrets - 记录真实自测报告
- 补齐管理员使用和运维文档
完成标准:
- 主链路联调可脚本化执行。
- 基本故障可按文档排查。
- 验收人只需按步骤执行,不需要补工程细节。
表现:
- 容器反复重启。
- 日志提示 PostgreSQL 15 无法使用由 16 初始化的数据目录。
处理:
- 将本地运行版本统一回
postgres:16-alpine - 保证镜像版本与数据目录初始化版本一致
表现:
chat/completions返回404 Not Found
根因:
NEW-API的ZhipuV4渠道会自动补/api/paas/v4- 若
base_url也手工写完整路径,会造成重复拼接
处理:
- 将
ZHIPU_API_BASE_URL修正为https://open.bigmodel.cn
表现:
insufficient_user_quota
处理:
- bootstrap 自动校正服务用户总额度为项目内不限额基准
- 同时保证服务 token 为 unlimited
表现:
- LibreChat 启动后日志报错,无法加载 OIDC 策略
根因:
- LibreChat 启动时 Casdoor 尚未就绪,OIDC 配置未加载
处理:
- 添加 Casdoor 健康检查(
/.well-known/openid-configuration) - LibreChat 依赖 Casdoor
condition: service_healthy - 增加 start_period 到 60s,首次启动给 Casdoor 足够时间初始化
表现:
/v1/models只返回glm-4-long等单个模型
根因:
- 未启用 SelfUseMode,模型比率/价格未配置
处理:
- bootstrap 自动写入
SelfUseModeEnabled=true
表现:
docker exec管道在 make 上下文中被 SIGPIPE 中断(exit 141)
处理:
- 使用
docker exec -e环境变量注入替代管道 - INSERT 不含 group 列,单独 UPDATE group 列(避免 bash 引号问题)
random_alnum添加重试和降级机制
表现:
- Casdoor panic: "Fail to delete application"
根因:
- 已有数据库数据与 init_data.json 冲突
处理:
- 清空 Casdoor 数据库后重新启动
DROP SCHEMA public CASCADE; CREATE SCHEMA public;表现:NEW-API /api/user/login触发限流
处理:
- bootstrap 只做一次 root 登录
- 服务 token 改为通过 PostgreSQL 直连维护,避免第二次登录
表现:
- 浏览器 dark / light 主题切换后,Casdoor 登录页背景、Logo 或语言选择器配色不协调
处理:
- 将 Casdoor 登录页样式统一收口到
scripts/render-casdoor-config.sh - 通过
formCss生成 light / dark 自适应样式 - 同时移除
WebAuthn/Face ID登录方式,保持登录面板简洁
表现:
- Casdoor 认证成功后先落到错误页,再做一次统一认证才能进入聊天页
处理:
- 为 LibreChat 启用 RedisStore,持久化 OIDC state / session
- 在运行时 patch 中增加 stale callback 自动重试逻辑
- 让 local / prod compose 都统一接入
new-api-redis的 DB 1
表现:
- LibreChat 模型选择中不同上游模型混在单一
NEW-API入口下
处理:
- 使用
provider_prefixes()管理ZHIPU、DEEPSEEK、ALIYUN、KIMI、DOUBAO、MIMO、MINIMAX - LibreChat 渲染为
API-zhipu、API-deepseek、API-aliyun、API-kimi、API-doubao、API-mimo、API-minimax scripts/sync-provider-models.sh每日检测供应商模型 API 并按*_MODEL_ORDER高阶优先排序
.env与真实ZHIPU_API_KEY先于真实 smoke test。- Compose 启动先于 bootstrap。
- bootstrap 先于 LibreChat 最终可用。
- LibreChat 配置渲染先于
docker compose up。 - 生产证书签发依赖 DNS 与公网连通性。
- 固定生产核心镜像版本,避免上游
latest漂移;本地 Admin Panel 可通过变量锁定,生产 compose 默认不启用。 - 使用脚本代替人工后台点击,降低重复错误。
- 关键配置回写
.env,减少多份配置分叉。 - 用自测报告固化真实联调结果。
- M1:文档和骨架完成。
- M2:本地 Compose 启动完成。
- M3:智谱主链路打通完成。
- M4:LibreChat 接入与动态模型同步完成。
- M5:自测与验收资料完成。
- M6:网络搜索配置完成(Serper + Firecrawl + Jina)。
- M7:智谱全量 19 模型矩阵接入完成。
- M8:自动 bootstrap 完成(一键部署)。
- M9:systemd 开机自启动完成。
- M10:2C2G ECS 内存优化完成。
- M11:多供应商可扩展文档完成。
- M12:Casdoor 登录页 light / dark 自适应与登录方式收敛完成。
- M13:LibreChat OIDC Redis session 持久化与 stale callback 自动恢复完成。
- M14:Admin Panel 本地集成与文档刷新完成。
- M15:LibreChat 默认 ADMIN 用户与首个非默认注册用户自动 ADMIN 提权完成。