- 新增 providers/models 数据库表、迁移和数据访问层 - 新增 15 个后端 API 路由(供应商/模型 CRUD + 连通性测试) - 新增 AI 服务层(registry.ts: buildProviderRegistry + testProviderConnection) - 新增前端模型管理页面(Tabs: 供应商/模型,含表格、表单、工具栏) - 新增前端 hooks(use-providers, use-models) - 新增共享类型和 MODEL_CAPABILITIES 常量 - 新增 10 个测试文件(66 个测试用例,4 个因 bun test ESM 兼容问题待修复) - 更新开发文档(architecture, backend, frontend) - 附带 apply-review 修复:统一错误响应、提取共享常量、清理重复测试 注意:registry.test.ts 中 4 个测试因 bun test 无法解析 createProviderRegistry ESM 导出而失败,详情见 context.md
6.6 KiB
6.6 KiB
1. 上下文审查
- 1.1 阅读 design.md,识别范围、需求、决策、执行约束和待解决问题
- 1.2 审查影响范围中列出的相关文件:
src/server/db/schema.ts、src/server/db/projects.ts、src/server/server.ts、src/shared/api.ts、src/web/consoles/admin/menu.tsx、src/web/routes.tsx、src/web/pages/projects/ - 1.3 审查现有测试模式:
tests/server/routes/projects.test.ts、tests/server/db/projects.test.ts、tests/web/hooks/use-projects.test.ts、tests/web/routes/projects.test.tsx
2. 基础层:依赖安装与类型定义
- 2.1 使用
bun add ai @ai-sdk/openai @ai-sdk/anthropic @ai-sdk/openai-compatible安装 Vercel AI SDK 依赖 - 2.2 在
src/shared/api.ts新增供应商和模型相关类型定义(ProviderType、ModelCapability、Provider 相关请求/响应类型、Model 相关请求/响应类型) - 2.3 新建
src/server/ai/types.ts,定义 AI 层专用类型(ProviderType、ModelCapability、AIRegistryConfig 等)
3. 数据库层:Schema 与 Migration
- 3.1 在
src/server/db/schema.ts新增 providers 表定义(id、name、type、baseUrl、apiKey、enabled、createdAt、updatedAt) - 3.2 在
src/server/db/schema.ts新增 models 表定义(id、name、providerId、modelId、capabilities、contextLength、maxOutputTokens、enabled、createdAt、updatedAt) - 3.3 使用
bunx drizzle-kit generate生成 migration SQL 文件 - 3.4 验证 migration SQL 文件正确性(表结构、索引、外键约束)
4. 数据访问层
- 4.1 新建
src/server/db/providers.ts,实现供应商 CRUD 数据访问函数(create、list、get、update、delete、enable、disable),遵循projects.ts模式 - 4.2 新建
src/server/db/models.ts,实现模型 CRUD 数据访问函数(create、list、get、update、delete、enable、disable),包含按 providerId 查询和关联检查
5. 后端路由层
- 5.1 新建
src/server/routes/providers/create.ts(POST /api/providers) - 5.2 新建
src/server/routes/providers/list.ts(GET /api/providers) - 5.3 新建
src/server/routes/providers/get.ts(GET /api/providers/:id) - 5.4 新建
src/server/routes/providers/update.ts(PATCH /api/providers/:id) - 5.5 新建
src/server/routes/providers/delete.ts(DELETE /api/providers/:id,有关联模型时阻止删除) - 5.6 新建
src/server/routes/providers/enable.ts(POST /api/providers/:id/enable) - 5.7 新建
src/server/routes/providers/disable.ts(POST /api/providers/:id/disable) - 5.8 新建
src/server/routes/providers/test.ts(POST /api/providers/:id/test,使用 AI SDK generateText 测试连通性) - 5.9 新建
src/server/routes/models/create.ts(POST /api/models) - 5.10 新建
src/server/routes/models/list.ts(GET /api/models,支持按 providerId 筛选) - 5.11 新建
src/server/routes/models/get.ts(GET /api/models/:id) - 5.12 新建
src/server/routes/models/update.ts(PATCH /api/models/:id) - 5.13 新建
src/server/routes/models/delete.ts(DELETE /api/models/:id) - 5.14 新建
src/server/routes/models/enable.ts(POST /api/models/:id/enable) - 5.15 新建
src/server/routes/models/disable.ts(POST /api/models/:id/disable) - 5.16 在
src/server/server.ts中注册所有新路由(懒加载导入)
6. AI 服务层
- 6.1 新建
src/server/ai/registry.ts,实现buildProviderRegistry(db)(从 DB 查询启用的供应商构建 AI SDK Provider Registry,模型通过registry.languageModel('providerId:modelId')获取)和testProviderConnection(config)(使用 generateText 测试连通性)
7. 前端:Hooks 与路由
- 7.1 新建
src/web/hooks/use-providers.ts,实现供应商 CRUD 的 TanStack React Query hooks - 7.2 新建
src/web/hooks/use-models.ts,实现模型 CRUD 的 TanStack React Query hooks - 7.3 在
src/web/consoles/admin/menu.tsx新增"模型管理"菜单项,图标使用 antd 的 RobotOutlined 或类似图标 - 7.4 在
src/web/routes.tsx新增/models路由,指向 AdminConsoleLayout 下的模型管理页面
8. 前端:页面与组件
- 8.1 新建
src/web/pages/models/index.tsx,使用 antd Tabs 实现供应商/模型双标签页布局 - 8.2 新建
src/web/pages/models/components/ProviderTable.tsx,实现供应商列表表格(名称、类型、baseURL、状态、操作) - 8.3 新建
src/web/pages/models/components/ProviderFormModal.tsx,实现供应商创建/编辑表单弹窗(name、type Select 默认 openai-compatible、apiKey Password 输入、baseURL 不设默认值) - 8.4 新建
src/web/pages/models/components/ModelTable.tsx,实现模型列表表格(名称、供应商、modelId、能力标签、状态、操作) - 8.5 新建
src/web/pages/models/components/ModelFormModal.tsx,实现模型创建/编辑表单弹窗(name、provider Select、modelId、capabilities Checkbox.Group、contextLength、maxOutputTokens 可选输入、连通性测试按钮)
9. 测试:后端
- 9.1 编写
tests/server/db/providers.test.ts,覆盖供应商 CRUD 和启用/禁用数据访问函数 - 9.2 编写
tests/server/db/models.test.ts,覆盖模型 CRUD、启用/禁用和关联检查数据访问函数 - 9.3 编写
tests/server/routes/providers.test.ts,覆盖供应商路由的请求验证、CRUD 操作和连通性测试 - 9.4 编写
tests/server/routes/models.test.ts,覆盖模型路由的请求验证和 CRUD 操作 - 9.5 编写
tests/server/ai/registry.test.ts,覆盖 AI 注册表构建逻辑
10. 测试:前端
- 10.1 编写
tests/web/hooks/use-providers.test.ts,覆盖供应商 hooks 的 query 和 mutation - 10.2 编写
tests/web/hooks/use-models.test.ts,覆盖模型 hooks 的 query 和 mutation - 10.3 编写
tests/web/routes/models.test.tsx,覆盖模型管理页面路由和渲染 - 10.4 编写
tests/web/components/ProviderTable.test.tsx,覆盖供应商表格渲染和交互 - 10.5 编写
tests/web/components/ModelTable.test.tsx,覆盖模型表格渲染和交互
11. 质量保障
- 11.1 运行全部测试(
bun test),确保无失败 - 11.2 运行 lint 检查(
bun run lint),确保无错误 - 11.3 运行格式检查(
bun run format:check),确保代码格式正确
12. 文档
- 12.1 执行文档影响分析:评估本次变更对 docs/ 下各文档的影响
- 12.2 更新
docs/development/backend.md,补充 AI 服务层架构说明(src/server/ai/目录结构和职责) - 12.3 更新
docs/development/frontend.md,补充模型管理页面组件说明