[M-AI-06-04] 实现 ReviewCard Generation Executor 与输出验证 #315
Closed
opened 2026-06-21 18:13:13 +08:00 by wangdl
·
1 comment
Labels
Clear labels
adr
Area: adr
architecture
Area: architecture
area:activity
活动/统计
area:admin
管理后台
area:admin-api
area:ai
AI/RAG
area:ai-runtime
AI Runtime / AI 分析体系相关
area:analytics
area:api
API 接口
area:auth
认证与授权
area:cos
对象存储
area:database
数据库/Migration
area:import
文件导入/解析
area:knowledge
知识库/知识点
area:learning-info
area:learning-session
area:quiz
测验/自测
area:reading-event
area:reading-progress
area:review
复习系统
area:security
安全相关
audit
Area: audit
audit:api-admin-info
audit:api-info
audit:planned
已完成宏观规划,尚未代码审查
audit:reviewed
backend
Area: backend
billing
Area: billing
blocked-by:api-info-aggregation
blocked-by:api-info-core
blocked-by:api-info-ops
blocked-by:api-info-schema
blocked-by:processor
blocked-by:schema
compatibility
Area: compatibility
gate
Area: gate
infrastructure
Area: infrastructure
priority:p0
最高优先级,阻塞发布
priority:p1
高优先级,里程碑必需
priority:p2
中优先级,后续版本
prisma
Area: prisma
release
Area: release
repo:api
API 仓库 Issue
status:blocked
被阻塞
status:done
已完成
status:partial
status:todo
type:aggregation
type:bug
缺陷修复
type:design
设计
type:docs
文档
type:feature
新功能
type:migration
type:refactor
重构
type:test
work:admin-api
work:aggregation
work:api
work:artifact
题目/卡片产物
work:audit
work:circuit-breaker
熔断
work:contract
work:design
架构/协议设计工作
work:docs
work:export
work:extend-existing
work:internal-api
Runtime 内部接口
work:job
Job 调度相关
work:new-module
work:new-table
work:ops
work:query
work:quota
额度/限流
work:schema
Prisma Schema 设计
work:security
work:service
Service 层实现
work:snapshot
Snapshot 构建
work:test
No Label
Milestone
No items
No Milestone
M-AI-06 Feynman ReviewCard 子 Job 与可靠生成
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: wangdl/api-server#315
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
No description provided.
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
类型 / 标签
风险等级
P1 — 验证缺失会导致非法输出进入数据库;Prompt 语义偏离会导致卡片质量下降
依赖
目标
将现有 ReviewCardGenerationWorkflow 适配为统一 AiJob Executor,保持旧 Prompt、cheap tier 和输出语义。
Executor
新增 ReviewCardGenerationExecutor。
职责:
禁止:直接调用 Provider SDK、注入 PrismaService、直接创建 ReviewCard、直接修改 Job 状态、自行处理 BullMQ Retry、读取 Parent 原始模型响应、重新验证用户权限。
Prompt 兼容
对比旧 ReviewCardGenerationWorkflow,确认以下保持兼容:Prompt Key、Prompt Version、system message、user message、cardCount、model tier、temperature、maxTokens、output schema。
Output Schema
以现有真实 Schema 为准,至少评估:cards[]、frontText、backText、difficulty。
验证:cards 数量与 cardCount 一致或在允许范围、frontText 非空、backText 非空、字段长度限制、difficulty 枚举、禁止空卡片、禁止完全重复卡片、禁止模型指令或 Markdown 代码块、禁止超大文本。
Business Validator
新增或复用 ReviewCardGenerationValidator。不得为了迁移重新设计卡片质量算法。
测试
至少覆盖:正常输出、非法 JSON、空 cards、卡片数量越界、空 front/back、重复卡片、非法 difficulty、超长文本、AbortSignal、Provider 失败、AiGateway 调用参数兼容。
验收标准
建议执行顺序
第 4 个执行(依赖 03 Definition 和 Snapshot)
开发完成评论
完成内容
新增
ReviewCardGenerationExecutor:将旧ReviewCardGenerationWorkflow适配为统一 AiJob ExecutorAiGatewayService.generate()调用模型(不直接导入 Provider SDK)tier: 'cheap',promptKey: 'review-card-generation',promptVersion: '1.0.0'AbortSignal(通过 timeout 参数传入 AiGateway)AiGateway响应(含 parsed + usage)新增
ReviewCardGenerationValidator:结构化输出验证BusinessValidationError(含 violations 数组)修改
ai-job.module.ts:注册 2 个 Provider修改文件
src/modules/ai-job/review-card-generation-executor.ts— 新增(103 行)src/modules/ai-job/review-card-generation-validator.ts— 新增(170 行)src/modules/ai-job/review-card-generation-executor.spec.ts— 新增(350 行,39 个测试)src/modules/ai-job/ai-job.module.ts— 修改(+4 行)代码证据
review-card-generation-executor.ts:67-76— userMessage 格式与旧review-card-generation.workflow.ts:18-28完全一致review-card-generation-executor.ts:86—tier: s.modelTier(从 Snapshot 读取,值为cheap)review-card-generation-executor.ts:88—promptKey: s.promptKey(从 Definition,值为review-card-generation)review-card-generation-executor.ts:39-41— 构造函数仅注入AiGatewayService,无 Prisma/Provider SDKreview-card-generation-validator.ts:69— cards 非空检查review-card-generation-validator.ts:103-113— 重复卡片检查(frontText+backText 去重)review-card-generation-validator.ts:138-152— 模型指令检查(CODE_BLOCK_PATTERN + MODEL_INSTRUCTION_PATTERNS)review-card-generation-validator.ts:155-160— 超大文本二次检查测试覆盖
无数据库副作用证明
constructor(private readonly aiGateway: AiGatewayService)— 仅注入 AiGatewayconstructor()— 无注入expect(hasPrisma).toBe(false)(spec:123-128)未完成 / 风险
ai-job-execution-engine.ts,Executor/Validator 仅单元测试通过。Engine 的review_card_generation分支将在 M-AI-06-06(Parent Projector 接入)中与 Projector 一同接入是否建议进入 Review