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>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
66778fa2d3
commit
a24dbb868a
@@ -375,24 +375,24 @@ _EXTRACT_INFLIGHT = (
|
||||
|
||||
|
||||
# 写死的提取输出契约兜底(对齐脚本 agent 的 _OUTPUT_PROTOCOL):随代码进镜像、永远在。
|
||||
# 即便 skill 文件丢失/为空,模型也仍收到「只输出这套 JSON」的硬指令 → 不会再退化成吐散文 → 解析失败。
|
||||
# 这是历史事故(skills 没打进镜像 → 提取 system 全空 → 解析失败)的根治性兜底,与 skill 正文不冲突(互相强化)。
|
||||
# **只管"格式骨架"**(JSON 形状 / id 规则 / 不提商品 / 只输出 JSON)—— 这是流水线硬底线,skill 丢了也不会塌。
|
||||
# **不碰任何"创作细则"**(穿搭/空手/字数/visual_prompt 怎么写),那些归 skill 正文独占,避免两处重复→漂移→稀释质量。
|
||||
_EXTRACT_OUTPUT_CONTRACT = """
|
||||
|
||||
---
|
||||
|
||||
## 输出契约(硬性 · 优先级最高)
|
||||
你是电商短视频「实体提取」agent。读【商品信息】+【分镜脚本】,认出**角色(出镜的人)**和**场景(地点/环境)**,
|
||||
**只输出且仅输出一个 JSON 对象**(UTF-8,无注释,不要 ```json 代码块外的任何散文/解释/markdown):
|
||||
## 输出契约(硬性 · 仅格式底线)
|
||||
**只输出且仅输出一个 JSON 对象**(UTF-8,无注释,无 ```json 代码块外的任何散文/解释/markdown),形状如下:
|
||||
{
|
||||
"entities": [
|
||||
{"id": "c1", "type": "character", "name": "女主", "visual_prompt": "一句生图描述(20-45字,只写人物本身:年龄/外形/气质/整套穿搭;空手、不带与商品同类的物件)"},
|
||||
{"id": "s1", "type": "scene", "name": "地点名", "visual_prompt": "一句空镜环境描述(20-40字,不写人)"}
|
||||
{"id": "c1", "type": "character", "name": "角色称呼", "visual_prompt": "一句生图描述"},
|
||||
{"id": "s1", "type": "scene", "name": "地点名", "visual_prompt": "一句生图描述"}
|
||||
],
|
||||
"segments": [{"index": 0, "entity_refs": ["c1", "s1"]}]
|
||||
}
|
||||
硬性规则:① **绝不输出商品/product 实体**(商品由系统用真实主图注入);② 角色 id 用 c1/c2…、场景 id 用 s1/s2…,各最多 6 个、严格去重;
|
||||
③ segments 必须覆盖输入每一镜,index 从 0 开始,每镜列出该镜出现的角色/场景的 id;④ 整个回复就是那个 JSON,不要任何前后缀。
|
||||
硬性规则(**仅格式;角色/场景怎么写、穿搭/visual_prompt 细则一律以上文技能正文为准**):
|
||||
① 只认 character / scene 两类,**绝不输出 product 商品实体**;② 角色 id 用 c1/c2…、场景 id 用 s1/s2…,严格去重;
|
||||
③ segments 必须覆盖输入每一镜(index 从 0 开始),列出该镜出现的角色/场景 id;④ 整个回复就是那个 JSON,无前后缀。
|
||||
"""
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user