Files
beige/plans/R-裂变重写核销表.md
yangqianqian d85dcd401b 第11环裂变重写:对齐上线版 split.js 一次LLM出N套完整笔记包
架构从"扇出N个GenerationTask各跑完整管道"改为"一次LLM调用直接出N套
完整笔记包(N=1~5)",落 FissionNote 表 + 独立展示页。

后端:
- 018迁移:fission_notes 表(文案JSON+score+passed+imagePlan+images+status)
- fission_prompt:FISSION_SYSTEM+三档参考度(low/mid/high)+normalize_tags+品类兜底
- fission_pipeline:一次LLM出N套→各评分(@80合格线)→排序→落库,不达标标
  needs_optimization 非丢弃;apiports 503 回落 codeproxy gpt-5.5 强档兜底
- fission_images:每套串行调现有生图接口(零改动image_gen/storyboard)
- tasks.py:run_fission_pipeline Celery task,删旧扇出注入
- api/v1/fission:进度聚合FissionNote + GET /fission/{id}/notes(剥内部字段)

前端:FissionProgress对齐状态机 + N套独立展示页 + FissionNoteCard

测试:test_fission_engine(19)+test_fission_pipeline(5) 全过;104 全量回归绿

实测task5(fanout=2,mid)端到端跑通:一次出2套→seq0=85过/seq1=79标优化→
生图codeproxy/edits→1024×1536去AI化→task completed→notes端点返完整数据

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-18 11:17:37 +08:00

6.1 KiB
Raw Blame History

裂变重写核销表(对齐上线版 split.js一次出N套完整包

倩倩姐 2026-06 拍板:①架构=一次LLM出N套完整笔记包 ②N套存FissionNote表+独立展示页 ③参考度保留三档枚举,内部映射数值(low=35/mid=60/high=82)。 断点可续;做完一项物理勾一项;报必附真实证据。

🔴 规则清单(开工前每人逐条确认,违反即返工)

# 红线/约束 后果
R1 QUALITY_PASS_SCORE=80 任何地方不得改 返工
R2 生图引擎零改动:不碰 image_gen.py/storyboard.py/pipeline_io.run_image_generation 返工
R3 模型最强档:文字 claude-opus-4-8回落 gpt-5.5(codeproxy),绝不降 sonnet 返工
R4 新建文件目标≤100行上限200行单次编辑≤100行超先建框架再Edit
R5 裂变三档真实措辞待北哥定义,本次用占位但接口按"内部数值"做对
R6 差异化质量验收北哥过目N套真差异搁置不在本次范围
R7 LLM 走 chat_complete(OpenAI兼容 messages[system,user]),不是上线版/v1/messages原生端点 风险1
R8 FISSION_SYSTEM 作 messages[0].role=system 传不是顶级system字段 风险1
R9 llm_score_copy 是 asyncCelery同步环境用 asyncio.run 不能直接await 风险
R10 参考度入参保留 low/mid/high内部 _LEVEL_TO_INT 映射DB列不动不加迁移 已拍板

数据结构(已拍板)

  • 新建 FissionNote 表018迁移每套笔记一行存 文案JSON+score+passed+imagePlan+images+status。
  • reference_level DB列保持 String(low/mid/high)不改
  • FissionTask 状态机pending→generating_text→text_done→generating_images→done/failed
  • FissionNote 状态pending→scored→image_done→failed

文件改动清单与核销

后端

# 文件 改什么 编辑轮次 状态
B1 models/fission.py 追加 FissionNote class(~50行) 1次 已加(103行,含idx)
B2 alembic/versions/018_fission_notes_table.py 新建迁移 create_table+index(~40行) 新建 已建(rev018←017)
B3 ai_engine/fission_prompt.py 全量重写:_LEVEL_TO_INT+reference_strategy_from_level+FISSION_SYSTEM+build_fission_prompt+sanitize_image_plan_text+normalize_tags+notes_array_from_parsed 4次 183行;品类兜底超200行拆至 fission_fallback.py(145行)
B4 services/fission_service.py 重写:create_fission改丢Celery+编排(一次LLM出N套→评分→排序→落FissionNote→喂生图) 4次 超200行拆3文件:service入口76行/fission_pipeline.py编排179行/fission_images.py生图81行
B5 workers/tasks.py 追加 run_fission_pipeline Celery task(~35行);删旧裂变扇出注入(build_fission_context已删) 1次 已注册(celery inspect registered见run_fission_pipeline);实测task5 worker日志"run_fission_pipeline start: fission_id=5 src=76"真触发
B6 api/v1/fission.py 进度改读FissionNote聚合+新增 GET /fission/{id}/notes 2次 117行,py_compile过,清掉GenerationTask import,进度按FissionNote.status聚合,notes端点剥_score/_passed内部字段+workspace隔离

前端

# 文件 改什么 状态
F1 components/fission/FissionProgress.tsx 进度数据源改读FissionNote结构 status对齐generating/completed/failed,去掉子任务入口,完成跳/fission/{id}/notes展示页
F2 app/fission/[id]/notes 展示页(或组件) 新建N套笔记展示页(标题/正文/标签/封面/imagePlan/图) page.tsx(116行框架+类型)+FissionNoteCard.tsx(分数徽章/文案/标签/图网格/imagePlan),tsc全过
F3 FissionLauncher.tsx 三档保留,零改动(确认即可) low/mid/high三档+POST契约(reference_level/fanout_count/回调fission_id)与新后端一致,零改动

生图触发方案(已定)

方案一裂变Celery任务内对每套FissionNote串行调 generate_storyboard_images(现有接口零改动),结果存 FissionNote.images_json。评分用 asyncio 并发限2(参考image并发模式)。

验证方案

  • TDD: tests/test_fission_engine.py — reference_strategy_from_level/sanitize/normalize_tags/build_fallback_notes/infer_category/评分每套独立@80 | 19 passed(197行)
  • 集成: mock LLM固定JSON → parse N套→各评分→合格套排序→不合格降草稿不丢弃 | test_fission_engine(parse 4例:全套/imagePlan校正/markdown包裹/兜底不崩) + test_fission_pipeline.py(_score_notes 5例:合格线/违禁词硬拦/异常记0/多套) 全过
  • 端到端: POST /fission→状态done; 一次LLM拿N套完整字段; imagePlan数=image_count; score<80标needs_optimization非丢弃; 兜底不报500; 生图走现有接口 | 真实容器实测task5(fanout=2,mid,src=76)2026-06-18跑通: POST返回fission_id=5→worker一次apiports/chat拿2套完整(title/content/tags/imagePlan)→seq0=85分passed/seq1=79分needs_optimization=1非丢弃(R1守住)→生图走codeproxy/v1/images/edits(R2现有接口零改动)→落FissionNote→task=completed→GET/fission/5/notes返2套完整数据内部字段(_score/_passed)零泄漏;图1024×1536(对齐大卫去AI化未强缩);apiports503→回落codeproxy gpt-5.5(R3铁律真生效,日志"强档兜底非降级");seq1 hook图codeproxy重试3次失败被捕获记error不阻塞不崩任务(健壮性正确)
  • 交叉审: 另起独立agent重核, 不信第一遍 | 进行中
  • 全量回归: tests/ 104 passed(顺手补 test_integration_seams mock product 缺 brand_keyword/target_audience 字段,非裂变引入的预存在失败)

风险点

  1. FISSION_SYSTEM端点格式(chat_complete非/v1/messages) — 最易踩
  2. max_tokens按note_count缩放,实测超时加FISSION_MAX_TOKENS env
  3. FissionNote前端展示(已定独立展示页F2)
  4. build_fallback_notes品类映射表完整移植(~80行,单独一次编辑)
  5. 评分并发vs串行(asyncio.gather限2)
  6. FissionProgress进度数据源同步改(F1)

搁置/待北哥(攒批)

  • 裂变三档/参考度真实业务措辞
  • N套真差异化质量验收(北哥过目)