[M-AI-05-02] 注册 Feynman Job Definition 与输入 Snapshot #305
Closed
opened 2026-06-21 15:53:20 +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
Milestone
No items
No Milestone
M-AI-05 Feynman 与 ReviewCard 可靠链路
Projects
Clear projects
No project
No Assignees
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: wangdl/api-server#305
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(Definition 错误会导致 Job 无法执行;Snapshot 泄露敏感信息为 P0)
依赖
目标
按照冻结契约注册 Feynman Definition,并实现输入验证和 Snapshot Builder,不修改生产入口。
Definition
最终值以 01 审计为准,至少包括:jobType、queueName、priority、attempts、timeoutMs、inputSchemaVersion、outputSchemaVersion、promptKey、promptVersion、modelTier、inputSchema、outputSchema、executor、businessValidator、referenceValidator、projector。
队列默认
ai-interactive,若改为ai-background必须有真实业务依据。Snapshot Builder
新增
FeynmanSnapshotBuilder,职责:Snapshot 稳定性
相同业务输入必须产生相同规范化内容和 contentHash。规范化至少处理:字段顺序、null 与缺省值、不稳定时间字段、无关空格、数组顺序是否具有业务含义。不得把每次生成时间加入 hash 输入。
安全
必须扫描:token、apiKey、Authorization、cookie、password、DATABASE_URL、REDIS_URL、credential。
约束
影响范围
src/modules/ai-job/definitions/、src/modules/ai-job/snapshot/、src/modules/feynman/验收标准
feynman_evaluation成功建议执行顺序
第 2 个执行(依赖 01 契约)
开发完成评论
完成内容
FEYNMAN_JOB_DEFINITION常量(jobType=feynman_evaluation,queue=ai-interactive,timeout=180s,retries=3)FeynmanRegistrationService(onModuleInit 注册 Definition,容忍重复注册)FeynmanSnapshotBuilder:computeHash()— SHA256 前 16 字符,字段顺序无关(稳定序列化)AiJobModule:注册 FeynmanRegistrationService + FeynmanSnapshotBuilderSnapshot Schema(feynman-evaluation-v1)
修改文件
src/modules/ai-job/feynman-job-definition.ts(新增,75 行)src/modules/ai-job/feynman-snapshot-builder.ts(新增,153 行)src/modules/ai-job/feynman-registration.service.ts(新增,44 行)src/modules/ai-job/feynman-job-definition.spec.ts(新增,299 行)src/modules/ai-job/ai-job.module.ts(修改,+5 行:3 imports + 2 providers)代码证据
feynman-job-definition.ts:18-75— Definition 冻结(jobType/prompt/model/execution/credential/projectorKey)feynman-snapshot-builder.ts:92-130— build() 核心逻辑(KnowledgeItem 加载 + 所有权验证 + 参考材料 + 快照构建)feynman-snapshot-builder.ts:138-146— computeHash()(SHA256 + JSON 稳定序列化)feynman-snapshot-builder.ts:155-178— loadReferenceMaterials()(最多 5 条,仅摘要)feynman-registration.service.ts:21-40— onModuleInit 注册 + DuplicateJobTypeError 容忍测试情况
npx jest --testPathPatterns="feynman-job-definition"npx jest --testPathPatterns="ai-job"与 Legacy 的差异说明
knowledgeItemId(当前 Feynman HTTP 请求体不含此字段)submissionId由调用方(M-AI-05-05)传入,用于幂等键构建未完成 / 风险
knowledgeItemId来源待 M-AI-05-05 解决(契约 U-2)是否建议进入 Review