seaislee1209 and Claude Opus 4.8
191cd1c3e5
docs: 移交报告再补 —— 产品视角/产品架构 + 功能模块间关系 + 脚本 Agent 运行机制
...
- 产品视角(§1.5):一句话定位(商品→可投放竖屏 AI 带货短视频的多租户 SaaS)+ 产品形态 +
用户主路径 + 产品功能模块↔后端 app 对照 + 模块间数据/依赖关系图(Team 为根,实体→资产→引用主数据线)
- 脚本 Agent(§2.6):SSE 流式对话、skill 系统提示词、3 模式收敛结构化 ScriptDraft、工具卡+思考流事件、
后端可靠抽 JSON、落库回填 script_entities 给下游、预扣额度+断连兜底、多模型
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-24 11:06:51 +08:00
seaislee1209 and Claude Opus 4.8
1d688269da
docs: 移交报告补充 —— 系统架构图 + 提示词体系(6模板+数据结构/数组) + 澄清远程库/测试权限 + 团队管理参考 AirDrama
...
- 加系统架构图(nginx/api/worker/MySQL/TOS/火山·中转站 + 后端 apps/前端结构)
- 加「提示词体系」:6 条 admin 模板(正文+占位符+比例尺寸)+ 背后的数据结构/数组
(script_entities / entity_refs / dialogue / 视频 reference_images 的 asset:// vs 直链)
- 澄清:应用直连远程测试库读写现有库没问题(真实验证就这么做的);只是 manage.py test 要建一次性
测试库需 CREATE 权限、该账号没有 → 单测走 sqlite。远程库连接是前一位同学搭的
- 团队管理可直接参考现有 AirDrama 项目(成熟,照补即可)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-24 02:31:18 +08:00
seaislee1209 and Claude Opus 4.8
c7baf5cc9d
docs: 项目移交报告(2026-06-24)—— 整体状况/本程改动/视频流程现状/已知待办/团队管理
...
给接手同学的速览:项目是什么、视频生成流程已端到端跑通、本程(06-22~06-24)做了什么、
已知小问题(admin刷新404已修/借AirDrama账号待换/视频poster/质量词半接/线上建商品复核)、
团队管理现状与缺口、风险提醒、已有文档索引、跑起来&部署速记。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-24 02:04:08 +08:00
seaislee1209 and Claude Opus 4.8
51d5010c43
fix(admin): Django 自带后台挪到 /django-admin/,/admin/* 回落 SPA,修后台刷新 404
...
前端平台后台用客户端路由 /admin/*,但 nginx 把 /admin/ 反代给了 Django(只有自带后台),
刷新 /admin/prompts 等 → Django 404。把 Django 后台挪 /django-admin/、nginx 同步改,
/admin/* 落到 try_files → index.html(SPA 路由)。Django admin 命名空间仍是 admin,reverse 不变。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-24 02:04:08 +08:00
seaislee1209 and Claude Opus 4.8
fd596776e2
feat(image): 支持真 16:9(1536x864)+ 人物/商品三视图/场景默认 16:9
...
- gpt-image-2 实测支持 16:9(宽高需被 16 整除):真 16:9 = 1536x864(长边封顶 1536);
原来「16:9」误给成 1536x1024(实为 3:2)。修正 _RATIO_TO_SIZE 与 _ratio_to_image_size
- admin「提示词」页比例按钮新增「宽 16:9」
- 迁移 0015/0016:scene + product_triview + person_triview 默认比例设为 16:9;
分镜图(storyboard_frame)/立绘/视频保持竖屏不动
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-24 00:56:33 +08:00
seaislee1209 and Claude Opus 4.8
dee269aeda
fix(script): 脚本按向导选的成片时长生成,不再写死 60 秒
...
pipeline 调脚本 agent 时 total_duration 写死成 60,忽略了向导里选的时长(选 30s 也按 60s 出)。
改为从 project.metadata.wizard.duration("0-30"→30)解析后传入;缺省回落 60。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-24 00:56:33 +08:00
seaislee1209 and Claude Opus 4.8
79fc95f1b7
fix(video): 视频卡用首帧当封面(#t=0.1),不再显示空白占位
...
<video preload="metadata"> 不解码画面、又没 poster(后端抽帧没产出 poster 文件)→ 卡片空白。
给缩略图视频地址加 #t=0.1,浏览器跳到 0.1s 渲染该帧当封面;取的是当前采用版 mp4(=最新版)。
改:视频卡缩略图 + 详情弹窗历史版本缩略图。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-23 18:23:57 +08:00
seaislee1209 and Claude Opus 4.8
ee842da19c
feat(video-prompt): 台词带说话人照脚本原样 + 时长/比例只走参数不写正文
...
- _segment_script_text:有结构化对白(dialogue)就按「说话人:台词」原样放(说话人 id 用 script_entities
解析成名字,如 室友/学生女主),回退扁平 narration;新增 with_dialogue/with_exposure 开关
- build_video_segment_prompt:视频脚本用带说话人台词、不带「商品露出」行(露出靠尾句统一要求);
正文去掉 {时长}s · 9:16 竖屏(时长/比例本就 API 参数 duration/ratio 传,不再重复写进文字)
- 尾句改为:电商带货短视频,商品露出清晰,节奏有转化感。不要字幕,不要背景音乐,但是要有音效,逼真的音效
- 迁移 0014 同步刷新 DB 里 video_segment 模板(DB 覆盖代码默认),admin「视频」卡随之更新
真渲染 v3·场1 与产品对齐版一致;后端测试通过。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-23 18:05:27 +08:00
seaislee1209 and Claude Opus 4.8
c2c2dfdc77
feat(review): 故事板分镜图挂火山人像审核盾 + 红盾可重新送审
...
- 后端 StoryboardFrameSerializer 暴露 review_status + 驳回原因(之前没给,前端画不出盾)
- 前端故事板趴:每张分镜图(缩略图角上只留盾 / 大图左上完整徽章)挂 ReviewBadge,
与人物/场景卡同款(审核中橙光 / 已过审绿 / 未过审红);故事板趴每 8s 轮询刷新审核态
- ReviewBadge:红盾(未过审)也可点「重新送审」——「审核超时」是误判(分镜图在 processing
卡太久被本地超时兜底标失败,非火山真违规),重提即可再审;灰盾/红盾两处(分镜图+人物卡)行为一致
- compact 模式:嵌在 overflow:hidden 容器里的盾(分镜图)改用原生 title 提示,避免 CSS 气泡被裁看不见
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-23 17:23:18 +08:00
seaislee1209 and Claude Opus 4.8
4074c13733
fix(video): 提交报错接住返 JSON 不再白屏 + 分镜图 processing 也走素材库 asset://
...
- submit-video-segment 视图接住 submit_video_segment 的异常 → 返回干净 JSON(真实火山报错文案),
不再让它变成 500 整页 HTML 报错栈 → 前端把 101KB HTML 怼进 toast 撑爆白屏
- 前端 request():非 JSON 错误体只显示状态行,绝不把整页 HTML 塞进 toast(白屏兜底)
- _seedance_ref_url:只要分镜图/人物已进素材库(有 remote_id)就走 asset://,不再卡 active —— 故事板
刚重生成时分镜图还是 processing,卡 active 会回落原始直链 → 火山以「疑似真人」拒。实测 processing
的素材 asset:// 照样可引用,根治「重生成故事板后重跑视频被人脸拒」
真机验证:场4 完整提交(人物/分镜图 asset:// + 场景/商品直链)ACCEPTED 出片;后端测试通过,tsc/build 过。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-23 16:57:37 +08:00
seaislee1209 and Claude Opus 4.8
38f4d95951
feat(video): 视频卡交互反馈 + 「全部重跑」真重跑已完成的段
...
- 单卡「重跑」/ 详情弹窗「重跑本场」/「全部重跑」点下立刻进「提交中」态:按钮转圈、视频块叠
spinner 遮罩,撑到该段真进 running(busy 接管),堵掉空窗连点 → 防双倍扣费、不再点完没反应
- 「全部重跑」改为把已完成(succeeded)的段也重跑(原来过滤掉 succeeded → 全成功项目点了等于
没点、还弹假的「已提交」);只跳过在途(running/queued)避免重复提交
- 视频卡加「共 N 版 ›」小标识(N>1 才显示),点开详情弹窗看历史版本/切换/采用
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-23 16:57:37 +08:00
seaislee1209 and Claude Opus 4.8
f9c52a171c
feat(product): 商品图删除接通 + 至少保留一张
...
- 详情页编辑态的删除叉子原是纯 CSS ::after 装饰、没绑事件,且列表用的是 asset id 而非删除接口要的
ProductImage id —— 接通:编辑态点图真调删除接口、用 ProductImage id,非编辑态仍点击放大
- 商品至少保留一张图(与「创建必须带图」一致):后端删到最后一张返回 400;前端只剩一张时那张不显示
叉子 + 提示「商品至少保留一张图;要移除请删除整个商品」;封面无对应 ProductImage(如三视图采用为封面)
则只展示、不可删
- 加 2 个后端测试(多张可删 200 / 删最后一张 400)
真实接口验:两张删一张 200、再删最后一张 400 并保留一张;后端测试通过,tsc/build 通过。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-23 16:29:05 +08:00
seaislee1209 and Claude Opus 4.8
f02c8053a1
feat(product-create): upload-first 建商品 —— 图拖入即进桶,创建时带 asset 一块落库
...
- 抽屉拖入/选图 → 立刻 POST /api/assets/upload/ 传进 TOS 桶拿 asset id(每张带上传中/完成/失败态,
首图标「主图」=cover_asset);上传未完成禁用「创建商品」
- 点创建 → POST /api/products/ 直接带 cover_asset + images inline 落库,一步到位,不再「先建后传图」
(那条因传图接口需先有商品 ID,与「创建必须带图」校验天然冲突 → 建商品恒 400「商品创建失败」)
- 同步读取 File:addImages 一进来就 Array.from 取文件,避免 pickImage 紧接的 input.value="" 清空
input.files 导致「第一次点没反应、第二次才上传」;选好即发起上传,不靠会滞后的 effect
- 后端保留「创建必须带图」校验(upload-first 下可满足、且正确)
真实接口验:独立上传 201 → 带 cover+images 创建 201(落库)→ 无图创建 400;tsc/build/后端测试通过。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-23 16:28:53 +08:00
seaislee1209 and Claude Opus 4.8
6916f9c877
fix(video): 真人参考图走素材库 asset:// 引用,根治 Seedance 锁脸全错
...
根因:Seedance 2.0 对写实人脸的原始直链直接 400(InputImageSensitiveContentDetected),
旧代码静默退纯文生视频 → 任务假成功、人物/场景全错(脚本是文本所以对)。
- 视频参考图:已过审(active+素材库 ID)的人物 + 分镜图换成 asset://{review_remote_id},
场景/商品(无脸、未送审)保持原始直链(_video_reference_images / _seedance_ref_url)
- 临时:VIDEO_ARK_API_KEY 让 Seedance 借 AirDrama 火山账号,与真人素材库同账号 → asset:// 可解析;
仅覆盖 VIDEO 能力,图像/文本仍用自有 key。待自有账号开通素材库后删此项即回落
- 删掉静默文生兜底:火山报错经 _raise_volcano_error 抽出真实 code+message 抛出,
落 error_message → 前端如实显示,绝不再假装成功出没锁脸的视频
真实接口验证:同图旧路 400,新路(asset://+AirDrama key)Seedance ACCEPTED 正常出片。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-23 13:16:30 +08:00
seaislee1209 and Claude Opus 4.8
dbd1382fb1
feat(storyboard): 整张生成时每张分镜转圈(不全屏遮挡)+ 未生成占位回 2:3 竖屏
...
- 每张分镜占位(缩略图 + 大图)叠半透明遮罩 + spinner,样式同基础资产趴;不再全屏遮挡
- 中间大图空占位由 16:9 横框改 2:3 竖屏,与成品(1024×1536)同形;fh-flat 下加兜底高度居中
- 生成结束(成功/失败)spinner 自动停
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-23 13:16:16 +08:00
seaislee1209 and Claude Opus 4.8
9c2a3bc365
feat(prompts): admin「提示词」页 —— 视频线 6 条生图/视频提示词正文+比例可在后台改,不再写死
...
诉求:生图/视频提示词全写死在代码里,产品方看不到也改不了(之前那版只做成「质量后缀」不是正文)。
现新增可编辑「提示词模板」体系,覆盖视频项目生产线 6 条:人物立绘 / 人物三视图 / 商品三视图 /
场景图 / 分镜图 / 视频。
后端:
- 新模型 PromptTemplate(key 固定 6 条 + template 正文 + ratio 比例 + enabled);迁移 0012/0013
种入默认正文(= 各 builder 现写死文本,零回归)。
- render_prompt(key, default, **字段):读 DB 模板,留空/停用回落默认;安全替换 {占位符}(中文名),
未知占位符原样保留(改错不致命)。prompt_ratio_size:比例→gpt-image 尺寸。
- 6 个 builder/调用点改走模板;5 条图比例可改(gpt-image 仅 1:1/竖/横),视频固定 Seedance 9:16。
场景图新增可编辑「场景风格」包装(默认仅 {场景描述},零回归)。人物/分镜/视频原质量后缀并入模板。
- adminpanel CRUD:GET /prompt-templates、PATCH /<id>(改正文/比例/启用,key 不可改、不增删,带审计)。
前端:admin 新增「提示词」侧栏页(/admin/prompts):6 卡,每卡=占位符提示+正文文本框+比例按钮+
启用开关+保存。复用 .btn/.card-hard 共享类,仅 token 配色,单橙锚点。
验证:Django 套件 102 全绿(含新模型/API/生成侧立即生效 + 人物提示词改读模板);tsc+vite build 绿;
无头(独立 sqlite 栈)真开 /admin/prompts:6 卡齐、文本框/比例/占位符齐、0 控制台错误。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-23 03:19:07 +08:00
seaislee1209 and Claude Opus 4.8
304a083184
fix(image): 图生图参考图过大时降采样,根治 yunqi 400 invalid_image_file
...
杂鱼煲商品三视图本地/线上都 400:主图 6000×4000 / 5.8MB,yunqi(gpt-image edits)拒收过大参考图
报 invalid_image_file(实测缩到 ≤2048 即过)。image_edit 发参考图前按需降采样:最长边 >2048
或 >4MB 才缩(否则原图直发不损质量);三视图成品 ≤1536px,2048 已 ≥ 成品分辨率 → 对成品无损。
保留透明通道(有 alpha 存 PNG,否则 JPEG q92),解析失败原样放行。商品三视图/故事板/模特上身等
所有 image_edit 路径一并受益。
验证:用真实 6000×4000 主图走打补丁的 provider.image_edit → 当场出图(原必 400);探测 yunqi 接受
≥4096、6000 拒;48 测全绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-23 03:18:42 +08:00
seaislee1209 and Claude Opus 4.8
be4bc1c8f4
feat(pipeline): 未生成的人物/场景卡可点进详情(先立绘后三视图)+ 卡内提示词框固定5行
...
- seed(未生成·来自脚本)卡:缩略图/名字可点 → 进资产详情弹窗(保留卡上内联「AI 生成」快捷,
两条路都能生成,A 方案)。详情弹窗支持「还没生成组」的空壳实体(用脚本名+提示词兜底),
生成立绘后刷新按同名 key 自动切回真实体。
- 顺序限制(本就在详情里,现对 seed 也生效):没立绘时「AI 生成三视图」禁用 + 提示
「请先生成左侧立绘」;立绘按钮首次显示「生成立绘」(非「重跑」),替换走 seed 路由。
- 卡内提示词框(.prompt-box,外层人物/场景卡)固定 5 行高、超长框内滚动,不再被长提示词撑高。
自检:复用现成详情弹窗与 .btn/.prompt-box 共享类,无裸色值/无重写共享类;单橙锚点不变。
验证:tsc + vite build 绿;无头(独立 sqlite 栈)真点 seed 卡 → 详情打开、三视图禁用+提示、
立绘按钮「生成立绘」、提示词框 115px 固定且超长可滚动、0 控制台错误(截图存档)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-23 02:07:46 +08:00
seaislee1209 and Claude Opus 4.8
e5b3833ba5
fix(pipeline): 基础资产页去掉重复「重新提取」按钮 + 留存的升二级(守单橙锚点)
...
- 删顶栏右上浮动「重新提取」(pipeline-reextract,JSX + CSS)—— 它与左侧「重新提取角色/场景」
提取后同时出现、点的是同一动作(runExtract only),重复。
- 留左侧那个(上下文更贴、文案更清),并按 design.md §3 从三级 ghost 升二级(btn btn-sm,
白底+inside-border)—— 比 ghost 显眼一档,又不抢橙(单橙锚点仍归 生成三视图/确认资产)。
自检:用共享 .btn 类、无裸色值/无新阴影/未重写共享类;tsc 绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-23 01:43:38 +08:00
seaislee1209 and Claude Opus 4.8
a24dbb868a
refactor(extract): 写死契约瘦身为纯结构,craft 全交给 skill(消除重复/漂移、不降质)
...
承上轮讨论(商业级质量考量):写死的 _EXTRACT_OUTPUT_CONTRACT 原先掺了 craft 规则
(穿搭/空手/字数/visual_prompt 写法),与 skill 正文重复 → 有漂移、稀释质量之虞。
现只留「格式骨架」(JSON 形状 / character|scene 两类 / 不提商品 / id 规则 / segments
覆盖每镜 / 只输出 JSON);所有创作细则一律以 skill 正文为准。定位不变:skill 丢了也
保证出 JSON 不塌(流水线硬底线),质量则 100% 由 skill 单点驱动。
验证(全在瘦身版上):
- 完整 Django 套件 152/152 全绿。
- 真调豆包「瘦身前 vs 瘦身后」对比:角色/场景/segments 一致,visual_prompt 仍守住
空手/不提商品/空镜/字数(craft 由 skill 驱动)—— 质量零退步。
- 本地起后端(sqlite+eager+真ARK)+前端+无头 chromium 真点提取按钮:闸门→提取→
角色(女主/室友)场景(学生宿舍/大学教室)落库、entities_extracted=True、
任务 succeeded、system_chars=7482(非空)、0 控制台错误。
可回退:tag extract-ok-baseline(66778fa )。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-23 00:47:01 +08:00
seaislee1209 and Claude Opus 4.8
66778fa2d3
harden(extract): 提取加写死的 JSON 输出契约兜底,消除"过度依赖 skill 文件"脆点
...
承上次定位:脚本生成空 skill 也能出 JSON,是因其 system 带写死的 _OUTPUT_PROTOCOL(进镜像、
永远在);提取没有这层兜底,只靠 skill 文件 → skill 一空就吐散文解析失败。本次对齐脚本做法:
给提取也加 _EXTRACT_OUTPUT_CONTRACT(写死的 entities/segments JSON 契约 + 不提商品等铁律),
拼在 skill 正文之后。即便将来 skill 再丢,提取也仍收到「只输出 JSON」硬指令,不会再退化。
真验证:用 dev 库里那条真实失败脚本,system 仅留写死契约(模拟 skill 全空)真调豆包 →
仍稳定出 JSON(角色/场景齐、商品不提)。
测试:152/152 全绿(新增契约兜底单测)。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-23 00:24:29 +08:00
seaislee1209 and Claude Opus 4.8
8dab8b4921
fix(skills): skills 随后端打进镜像,根治线上提取「未返回有效 JSON」(系统提示词为空)
...
真因(查 dev 库 + 重放真实失败请求 + 真调 ARK 定位):线上提取的 system 提示词长度=0。
core-api 镜像由 `./core/backend` 构建,而 skills/ 在仓库根、不在构建上下文 → 镜像里没有
→ _load_skill_system_prompt 返回空串 → 模型收不到「只输出 JSON」铁律 → 吐 markdown/散文
→ 正则抽不到 {} → 「提取结果解析失败(模型未返回有效 JSON)」。本地有 skills 故一直没复现。
(脚本生成同样受影响,只是它有退化兜底提示词,质量打折但不报错。)
验证:用 dev 库里你那条失败请求的真实脚本重放——空 system→无 JSON;补上 skill 提示词
→ 立即出 JSON(角色/场景齐、商品不提)。
改动:
- skills/ → core/backend/skills/(git mv,进构建上下文,Dockerfile `COPY . .` 自动打包)。
- services._skills_root()/script_agent._skill_dir():优先 BASE_DIR/skills,回落仓库根(双兜底)。
- worker 失败时也落 response_payload(含 content / reasoning 预览 / system_chars),
以后再坏一眼就能定位(本次正是因为失败没存返回,白绕一圈)。
- 回归测试 2 条:skills 必须在 BASE_DIR 内(随镜像走)+ 提取提示词非空且含 JSON 铁律。
- CLAUDE.md 标注 skills 必须放 core/backend 内的原因。
验收:完整 Django 套件 151/151 全绿。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-23 00:12:46 +08:00
seaislee1209 and Claude Opus 4.8
c8cb6d3d51
fix(extract): 实体提取改异步(worker+轮询),根治 502 + 刷新丢 loading + 重复扣费
...
问题:进资产页点"提取人物/场景"——同步死等豆包思考模型(数十秒)→ 撞网关超时
502;"提取中"loading 是纯前端内存态,刷新即丢;且无幂等,刷新后重点会重复扣费。
改动(对齐全站异步三件套:出图/三视图/故事板同款):
- 后端 submit_extract_entities:Web 只建 RESERVED 任务 + 预留额度秒回(不再 502);
已有在途提取则复用,绝不二次预扣(防刷新后重点 / 并发重复扣费)。
- 后端 run_extract_entities_task(Celery worker):流式调豆包 + 解析 + 落库 + 扣费;
失败退费并把可读错误记进 task.error_message。
- 新增 AITask.Type.entity_extraction(迁移 0011)+ extract-status 端点(轮询进度/成败)。
- 前端 runExtract 改提交+轮询;进资产页自动认领在途提取,刷新后 loading 自己回来。
验收:完整 Django 套件 149/149 全绿(含新增 4 测:异步落库+计费一次 / content空
回退 reasoning / 在途防重复扣费 / 状态端点成败透出);tsc + vite build 全绿;
makemigrations --check 无遗漏。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-22 23:15:11 +08:00
seaislee1209 and Claude Opus 4.8
71af0ae166
fix(extract): 实体提取改走流式通道 + 锁定豆包2.0Pro,根治"未返回有效JSON"
...
问题:进资产阶段点"提取人物/场景"间歇报「提取结果解析失败(模型未返回有效
JSON)」。根因——提取走非流式只读 content,而默认文本模型是会思考的推理模型
(豆包2.0Pro think:True),思考期常把内容留在 reasoning_content、content 返空 →
正则抽不到 JSON。脚本生成不犯此病是因其走流式、早已分离思考/正文。
改动:
- 锁模型:提取固定用 doubao-seed-2-0-pro-260215(_resolve_extract_model_config),
取不到再回落默认,不再受各环境 DB 创建序漂移影响路由。
- 根治:提取复用与脚本生成同一条已验证稳定的流式通道(_collect_extract_text)——
丢弃 reasoning 事件、只收正文 delta;正文为空时兜底回退 reasoning 里的 JSON。
response_payload 改存精简流式存档(streamed/model/content/had_reasoning)。
- 测试:提取步原零测试,新增 2 个——流式正文JSON正确落库+计费一次、content空→
回退reasoning。其余链路(脚本生成/单镜重跑)未动。
验收:本机 Python3.9 跑不了 Django5 全套,核心逻辑(事件过滤/回退/JSON抽取)已
独立验证通过;py_compile 绿;完整套件由 CI 跑。
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-22 20:12:11 +08:00