startup-plan/技术设计/api-server/已完成/[已完成]-AI架构决策清单.md
WangDL 69dbb72777 docs: 更新AI架构设计、后端待办清单,归档已完成文档
- 更新AI架构设计文档链接
- 整理后端待完成事项清单(12 Repository迁Prisma、AI架构、JwtAuthGuard等)
- 归档已完成:AI架构决策清单

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 00:41:02 +08:00

7.8 KiB
Raw Permalink Blame History

知习 AI 架构 V1决策与执行清单

2026-05-16 已确认并完成三层架构Provider → Gateway → Workflow阶段 0 全部完成。 设计方向文档:AI架构设计.md

状态: 阶段 0 完成 | 阶段 1 基本完成 | 阶段 2 待推进


一、架构原则

核心分层

业务模块层ActiveRecall / ai-analysis
       ↓ 调用
AI Workflow 层ActiveRecallAnalysisWorkflow
       ↓ 调用
AI Gateway 层AiGatewayService选模型、记日志、解析 JSON、超时重试
       ↓ 调用
AI Provider 层DeepSeekProvider / MiniMaxProvider / MockAiProvider

每一层的职责边界

知道什么 不知道什么
Provider messages, model, temperature, signal 知识点、主动回忆、FocusItem
Gateway feature, promptVersion, cost, retry 业务 Workflow 细节
Workflow 知识点、回答、分析逻辑 模型 API 细节
业务模块 自己的 CRUD AI 调用细节

二、已确认决策(全部实现)

编号 决策 结论 状态
A 架构分层 Provider → Gateway → Workflow 三层
B Mock 保留 Mock 跑通闭环,永久保留
C 第一个 Provider DeepSeekV4-Flash 便宜V4-Pro 强推理)
D 第二个 Provider MiniMax M2.7Coding Plan 已付费,主力分析)
E Model Router 三层cheap / primary / strong显式 fallback
F Gateway 超时 AbortController 30s + 自动重试 + fallback
G Prompt 管理 代码文件 + promptKey / promptVersion 追踪
H JSON 校验 Zod Schema + 三层容错parse → fence → extract
I 成本控制 AiUsageLog + AiCostCalculatorService
J 旧代码清理 删除 infrastructure/aiai-analysis 迁到新 gateway

三、当前文件结构

src/modules/ai/
├── ai.module.ts                            # NestJS DIMap<string, AiProvider>
├── ai.controller.ts                        # POST /ai/analyze-recall · GET /ai/models
├── model-router.ts                         # cheap / primary / strong 三档路由
├── gateway/
│   ├── ai-gateway.types.ts                 # GatewayRequest / GatewayResponse / ModelTier
│   └── ai-gateway.service.ts               # 统一入口选模型、30s超时、重试、JSON三层容错、记日志
├── providers/
│   ├── ai-provider.interface.ts            # AiGenerateInput(signal) / AiGenerateOutput
│   ├── mock-ai.provider.ts                 # 永久保留,返回 simulated 分析结果
│   ├── deepseek.provider.ts                # DeepSeek APIOpenAI 兼容)
│   └── minimax.provider.ts                 # MiniMax M2.7OpenAI 兼容)
├── prompts/
│   ├── prompt-template.service.ts          # key + version 注册表
│   ├── active-recall-analysis.prompt.ts    # System Prompt
│   └── schemas/
│       └── active-recall-analysis.schema.ts # Zod Schema + JSON 输出示例
├── usage/
│   ├── ai-cost-calculator.service.ts       # 按模型计算费用
│   └── ai-usage-log.service.ts             # 写 AiUsageLog
└── workflows/
    └── active-recall-analysis.workflow.ts   # 第一个 Workflow主动回忆分析

关联模块

src/modules/ai-analysis/                    # 导入 AiModule用 ActiveRecallAnalysisWorkflow
├── ai-analysis.module.ts
├── ai-analysis.controller.ts               # POST /ai-analysis · GET /ai-analysis/:id
├── ai-analysis.service.ts
└── ai-analysis.repository.ts

src/modules/active-recall/                  # 导入 AiModule提交答案异步触发分析
├── active-recall.module.ts
├── active-recall.controller.ts             # POST /active-recalls/:id/submit
├── active-recall.service.ts
└── active-recall.repository.ts

src/infrastructure/ai/                      # ❌ 已删除(旧 AiService + 旧 MockAiProvider

四、数据流(主动回忆分析)

1. POST /active-recalls/:id/submit
       ↓
2. ActiveRecallService.submit() 保存回答 + 异步 analysisWorkflow.execute()
       ↓
3. ActiveRecallAnalysisWorkflow.execute({ userId, questionText, knowledgeItemContent, userAnswer })
       ↓
4. PromptTemplateService.get('active-recall-analysis', '1.0.0')
       ↓
5. AiGatewayService.generate({ feature, userId, tier:'primary', promptKey, messages, outputSchema })
       ↓
6. ModelRouter.resolve('primary') → minimax-m2.7fallback: deepseek-v4-pro
       ↓
7. Provider.generate() + AbortController(30s) → fetch()
       ↓
8. JSON 三层容错:直接 parse → 提取 markdown fence → 提取 { } 对象
       ↓
9. Zod Schema 校验 → ActiveRecallAnalysisResult
       ↓
10. AiUsageLogService.log() 记 tokens / cost / latency
       ↓
11. GatewayResponse { parsed, usage }
       ↓
12. Workflow 返回 ActiveRecallAnalysisResult

五、数据库

AiUsageLog已加入 schema待 db push

model AiUsageLog {
  id            String   @id @default(cuid())
  userId        String
  feature       String   @db.VarChar(64)
  provider      String   @db.VarChar(32)
  model         String   @db.VarChar(100)
  tier          String   @db.VarChar(32)
  promptKey     String   @db.VarChar(128)
  promptVersion String   @db.VarChar(32)
  inputTokens   Int      @default(0)
  outputTokens  Int      @default(0)
  estimatedCost Float    @default(0)
  latencyMs     Int      @default(0)
  success       Boolean  @default(true)
  errorMessage  String?  @db.VarChar(500)
  createdAt     DateTime @default(now())

  user          User     @relation(fields: [userId], references: [id])

  @@index([userId])
  @@index([feature])
  @@index([createdAt])
}

⚠️ prisma db push 待 SSH 隧道连通后执行


六、可执行任务状态

阶段 0AI 地基 14/14

# 任务 状态
1 AiUsageLog 表prisma schema
2 统一 AiProvider 接口generate + signal
3 ModelRoutercheap / primary / strong
4 AiGatewayService统一入口 + JSON 容错 + 超时重试)
5 PromptTemplateServicekey + version
6 DeepSeekProvider
7 MiniMaxProvider
8 Zod SchemaActiveRecallAnalysisResult
9 AiUsageLogService + AiCostCalculatorService
10 ActiveRecallAnalysisWorkflow
11 AiModuleDI 注入)
12 AiControlleranalyze-recall / models
13 MockAiProvider保留不动
14 删除旧 infrastructure/ai

阶段 1集成打通 4/6

# 任务 状态
15 ai-analysis 改用 ActiveRecallAnalysisWorkflow
16 ai-analysis.module 导入 AiModule
17 active-recall 提交答案触发分析
18 Gateway AbortController 30s 超时
19 prisma db push 建 AiUsageLog 表 ⚠️ 等隧道
20 真实 AI 切换 + Prompt 调优 后续

阶段 2待推进

# 任务
21 11 个业务 Repositoryin-memory Map → Prisma
22 所有 Controller 加 JwtAuthGuard
23 真实 AI 联调 + 样本测试 + Prompt 调优
24 更多 Workflow知识导入、费曼分析、复习卡片、长期趋势

七、一句话总结

DeepSeek 只是第一个模型,不是 AI 架构本身。
知习现在有了「可替换模型、可追踪成本、可校验输出、可沉淀学习结果」的三层 AI 工作流架构:
Provider → Gateway → Workflow。
阶段 0 全部完成,阶段 1 基本完成。