[M-AI-04-02] 注册 Active Recall Job Definition 与输入 Snapshot #297
Closed
opened 2026-06-21 12:48:13 +08:00 by wangdl
·
3 comments
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-04 Active Recall 端到端迁移
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: wangdl/api-server#297
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?
类型 / 标签
风险等级
P0
依赖
背景
按照迁移契约注册 Active Recall Definition,使其成为统一 Job Engine 可识别的真实业务 Job Type,并实现输入 Schema、Snapshot Builder 和注册校验。此 Issue 不切换生产入口,仅完成注册与验证。
目标
非目标
影响范围
Definition 冻结字段
jobType, queueName, priority, attempts, timeoutMs, inputSchemaVersion, outputSchemaVersion, promptKey, promptVersion, modelTier, inputSchema, outputSchema, executor, businessValidator, referenceValidator, projector
队列原则:ai-interactive(除非审计证明属于后台任务)
Snapshot Builder 职责
禁止存储
JWT / Authorization Header / 模型 API Key / Cookie / 数据库连接信息 / 无关用户画像 / 未脱敏 Credential
验收标准
建议执行顺序
第 2 个执行(依赖 M-AI-04-01)
开发完成评论
完成内容
ActiveRecallJobDefinition冻结常量 — 所有字段源自 M-AI-04-01 迁移契约ActiveRecallSnapshotBuilder— 加载答案+问题、所有权校验、构建版本化脱敏快照、计算 contentHashActiveRecallRegistrationService— OnModuleInit 向 Registry 注册 DefinitionAiJobModule注册以上两个新 Provider修改/新增文件
src/modules/ai-job/active-recall-job-definition.ts— 新增, ActiveRecall JobDefinition 常量src/modules/ai-job/active-recall-snapshot-builder.ts— 新增, 快照构建器src/modules/ai-job/active-recall-registration.service.ts— 新增, 注册服务src/modules/ai-job/active-recall-registration.service.spec.ts— 新增, 24 testssrc/modules/ai-job/ai-job.module.ts— 修改, 注册 2 个新 Provider代码证据
active-recall-job-definition.ts:13-75:Definition 冻结常量,全部字段映射自契约active-recall-snapshot-builder.ts:53-101:build() 方法 — findUnique 加载 → 所有权校验 → 构建快照active-recall-snapshot-builder.ts:64:answer.userId !== userId→ ForbiddenException(P0 跨用户所有权修复)active-recall-snapshot-builder.ts:114-120:computeHash() — SHA256 前 16 字符active-recall-registration.service.ts:17-25:onModuleInit 注册 Definitionai-job.module.ts:18-19:import 新服务ai-job.module.ts:34-35:providers 注册active-recall-registration.service.spec.ts:24 tests 覆盖 Registration + SnapshotBuilder测试情况
npm run buildnpx jest --testPathPatterns="active-recall-registration"npx jest --testPathPatterns="ai-job"验收标准对照
active-recall-registration.service.spec.ts:36-47active-recall-registration.service.spec.ts:49-62active-recall-registration.service.spec.ts:193-203active-recall-registration.service.spec.ts:175-191schemaVersion: 'active-recall-v1'未完成 / 风险
是否建议进入 Review
Non-blocking 问题修复
1. SnapshotBuilder 孤儿类 + 2. 接口签名不兼容 ✅ 已修复
问题:
ActiveRecallSnapshotBuilder.build(userId, answerId)2 参数 vsSnapshotBuilderService.buildSnapshot(userId, targetType, targetId)3 参数。且AiJobCreationService无 jobType 分派机制。修复(不扩大 M-AI-04-02 范围):
buildSnapshot(userId, targetType, targetId)方法 — 签名与SnapshotBuilderService.buildSnapshot()完全兼容targetType='active_recall_answer'+targetId=answerId→ 委托build(userId, targetId)BadRequestExceptionM-AI-04-05 集成方案(文档化):
修改文件:
active-recall-snapshot-builder.ts:+BadRequestException import, +集成说明注释, +buildSnapshot()方法active-recall-registration.service.spec.ts:+BadRequestException import, +3 tests (buildSnapshot 正常/非法 targetType/签名兼容)测试: 27/27 passed (原 24 + 新增 3)
Non-blocking 问题修复(第 2 轮)
3. Definition 与 SnapshotBuilder 的值重复硬编码 ✅ 已修复
修复: SnapshotBuilder 注入
JobDefinitionRegistry,在build()中通过this.registry.get('active_recall')读取 prompt/model 配置。全部值来自 Definition,零重复硬编码。修改:
active-recall-snapshot-builder.ts:构造函数新增JobDefinitionRegistry参数,build()第 1 步调用this.registry.get('active_recall')读取配置single-source-of-truth用例:修改 Registry 返回的 Definition → Snapshot 自动跟随4. temperature 不在 JobDefinition 类型中 ✅ 已修复(文档化)
分析:
JobDefinition接口已冻结(ADR-003 §2.1,不得自行扩展),temperature不在其中。AiGatewayService.generate()硬编码temperature: 0.3(ai-gateway.service.ts:62)。修复:
AI_GATEWAY_DEFAULT_TEMPERATURE = 0.3,附注释说明来源(ai-gateway.service.ts:62)5. projectorKey 指向不存在的实现 ✅ 已确认(增量开发正常状态)
active_recall_projector预计在 M-AI-04-04 实现projectorKey 已设置验证 Definition 中的 key 为'active_recall_projector'RESULT_PROJECTORSmulti-provider(ai-job.module.ts:38)测试结果