框架: B4-S2 schema批——craft双模板(装置形态条件必填/禁填)+装置类型闭合枚举判定测试+原理/触发条件/读者收益/记忆维持/迁移用例等新字段+emotion目标情绪+pacing启用8字段(黄金三章/上架节奏);ingest三守卫(条件校验/枚举禁复合/专名词典);seed已重跑入库
This commit is contained in:
parent
86c5e2641a
commit
6a8b7a9ba6
@ -171,6 +171,13 @@ def patterns(work_id, chapter_order, file_):
|
||||
ch_id, src = chapter_of(conn, work_id, chapter_order)
|
||||
contracts = {t: field_contract(conn, t) for t in PATTERN_TYPES}
|
||||
book = conn.execute("SELECT title FROM muse_content_work WHERE id=%s", (work_id,)).fetchone()[0]
|
||||
# 专名词典(B4-S2):本书 scaffold 实体名就是现成专名表——短专名泄漏 15 连字抓不到
|
||||
#(金标准抓到 4 张「海拉/千亿夸克」级泄漏),出处字段豁免(设计允许专名只进出处)
|
||||
entity_names = {e.get("名称") or e.get("name") for (ents,) in conn.execute(
|
||||
"""SELECT entities FROM example_parse_scaffold
|
||||
WHERE tenant_id=%s AND work_id=%s AND deleted=FALSE""",
|
||||
(TENANT, work_id)).fetchall() for e in ents}
|
||||
entity_names = {n for n in entity_names if n and len(n) >= 2}
|
||||
# 幂等:重跑本章 = 软删本章旧 draft。
|
||||
# 但新轮 0 卡时保留旧卡——LLM 判卡有随机性,重跑「0 卡」不应清掉上轮已验证的产出
|
||||
#(实测组合病:判重名录+随机性+软删 → 每次重跑都损耗卡)
|
||||
@ -205,10 +212,36 @@ def patterns(work_id, chapter_order, file_):
|
||||
c["型"] = t = fits[0]
|
||||
else:
|
||||
reasons.append(f"字段越合同:{sorted(illegal)}")
|
||||
# 守卫(B4-S2):craft 双模板条件必填/禁填 + 装置类型闭合枚举 + 禁复合标签
|
||||
if t == "craft" and not reasons:
|
||||
form = (fields.get("装置形态") or "").strip()
|
||||
dtype = (fields.get("装置类型") or "").strip()
|
||||
if form not in ("结构装置", "场景手法"):
|
||||
reasons.append(f"装置形态非法:{form!r}(须为 结构装置/场景手法)")
|
||||
elif form == "结构装置":
|
||||
miss = [k for k in ("埋设手法", "回收点", "记忆维持", "间隔纪律") if not fields.get(k)]
|
||||
if miss:
|
||||
reasons.append(f"结构装置必填缺失:{miss}")
|
||||
else: # 场景手法:禁填间隔纪律(同场景闭环没有间隔,硬填必出伪纪律)
|
||||
miss = [k for k in ("复用节奏", "异质化要求", "单章上限") if not fields.get(k)]
|
||||
if miss:
|
||||
reasons.append(f"场景手法必填缺失:{miss}")
|
||||
if fields.get("间隔纪律"):
|
||||
reasons.append("场景手法禁填间隔纪律(伪纪律来源)")
|
||||
if dtype and t == "craft":
|
||||
if any(sep in dtype for sep in ("+", "、", "/", ",")):
|
||||
reasons.append(f"装置类型禁复合标签:{dtype!r}(只填最主要的一个)")
|
||||
elif dtype not in ("伏笔", "契诃夫之枪", "信息差", "重复意象", "倒计时", "身份错认", "非装置"):
|
||||
reasons.append(f"装置类型不在闭合枚举:{dtype!r}")
|
||||
texts = [c.get("名称"), c.get("一句话摘要"), *fields.values()]
|
||||
leak = leak_check([x for x in texts if x], src)
|
||||
if leak:
|
||||
reasons.append(f"脱敏违规(≥{NGRAM}连字重合):「{leak}」")
|
||||
# 专名词典拒卡:卡文本(不含出处)命中本书实体名 → 拒
|
||||
hit_names = [n for n in entity_names
|
||||
if any(n in str(x) for x in texts if x)]
|
||||
if hit_names:
|
||||
reasons.append(f"专名泄漏(本书实体名):{hit_names[:3]}")
|
||||
if reasons:
|
||||
rejected.append({"卡": c.get("名称") or f"#{i}", "原因": reasons})
|
||||
continue
|
||||
|
||||
@ -13,6 +13,7 @@ scope: entity
|
||||
- { key: 反转机制, 说明: 靠什么翻盘——法宝/援军/情报/环境/代价兑换, aiContext: true }
|
||||
- { key: 代价结构, 说明: 赢者付出什么——白赢是范式的失败, aiContext: true }
|
||||
- { key: 败者处理, 说明: 死/逃/收服/结仇,各自的后续钩子, aiContext: true }
|
||||
- { key: 读者收益, 说明: '闭合枚举至多两值:代入/掌控/期待/打脸/意外/优越/紧张/温情——这场戏给读者什么多巴胺', aiContext: true }
|
||||
- { key: 例证出处, 说明: 书名+回目+一句话定位;严禁抄录原文, aiContext: [planning, detection] }
|
||||
设计发现:
|
||||
- 2026-07-09 拆书首轮——「节拍结构」要求配比量化,古典文本给不出百分比,建议改「回合序列(定性)」(待回填)
|
||||
|
||||
@ -8,12 +8,23 @@ scope: entity
|
||||
判据: 单点装置——删去它场景仍成立、读者体验变平;台账只收有跨章履约的装置 ‖ 承载整场戏→桥段三型;跨章公式→trope
|
||||
实例落点: 公共面 knowledge/范式/技法/*.md;作品面 知识/技法/*.md
|
||||
特有字段:
|
||||
- { key: 装置类型, 说明: 伏笔/契诃夫之枪/信息差/重复意象/倒计时/身份错认, aiContext: true }
|
||||
- { key: 埋设手法, 说明: 如何放得自然——挂在什么载体上不显眼又可回指, aiContext: true }
|
||||
- { key: 履约方式, 说明: 何时、以什么形式兑现;兑现时如何唤起读者记忆, aiContext: true }
|
||||
- { key: 间隔纪律, 说明: 埋与收的典型距离;太近廉价、太远失效, aiContext: true }
|
||||
- { key: 装置形态, 说明: '闭合枚举二选一:「结构装置」=有埋点与回收点的跨章装置;「场景手法」=场景内完结的语气/走位/呈现技巧(跑梗/借道具/内心外化)。形态决定条件必填:结构装置必填[埋设手法/回收点/记忆维持/间隔纪律];场景手法必填[复用节奏/异质化要求/单章上限]且禁填间隔纪律——同场景闭环没有间隔,硬填必出伪纪律', aiContext: true }
|
||||
- { key: 装置类型, 说明: '闭合枚举(带判定测试,不满足任何一类填「非装置」并转场景手法形态):伏笔[大类,预置信息后续兑现;子类:契诃夫之枪=预先可见地放置一个物件/事实且后续被引爆,一次性道具不算]/信息差[必须存在角色A知道而角色B或读者不知道的明确落差;主角对自己属性做计算不算]/重复意象[同一意象跨场景复现且含义累积]/倒计时[显式时限压迫]/身份错认[必须有人把A当成B;主角确认自己新身体不算]。禁止复合标签(如「信息差+契诃夫之枪」)——只填最主要的一个', aiContext: true }
|
||||
- { key: 原理, 说明: '可迁移因果原则,固定句式「当X时做Y,因为读者会Z」——这是卡的本体;写不出因果链=不是范式', aiContext: true }
|
||||
- { key: 触发条件, 说明: 什么创作场景该检索到这张卡(写到哪类戏/遇到什么问题时用), aiContext: true }
|
||||
- { key: 读者收益, 说明: '闭合枚举至多两值:代入/掌控/期待/打脸/意外/优越/紧张/温情——这条给读者什么多巴胺', aiContext: true }
|
||||
- { key: 埋设手法, 说明: 如何放得自然——挂在什么载体上不显眼又可回指(结构装置必填), aiContext: true }
|
||||
- { key: 回收点, 说明: 兑现处长什么样——以什么形式引爆、如何唤起读者对埋点的记忆(结构装置必填), aiContext: true }
|
||||
- { key: 记忆维持, 说明: 埋与收之间隔章时如何维持读者记忆——reminder 的节奏与形态;长篇伏笔的真实成本在此(结构装置必填), aiContext: true }
|
||||
- { key: 间隔纪律, 说明: 埋与收的典型距离;太近廉价、太远失效。数值必须从出处章号差机械可验,数不出就只写定性方向(结构装置必填;场景手法禁填), aiContext: true }
|
||||
- { key: 复用节奏, 说明: 同书内多次使用的频控与变化要求(场景手法必填), aiContext: true }
|
||||
- { key: 异质化要求, 说明: 每次复用需要换什么(载体/刺激/语境)才不腻(场景手法必填), aiContext: true }
|
||||
- { key: 单章上限, 说明: 一章内最多用几次;超限的后果(场景手法必填), aiContext: true }
|
||||
- { key: 滥用反例, 说明: 至少一个「这样用必砸」的具体反面情形, aiContext: true }
|
||||
- { key: 失败模式, 说明: 这个装置最常见的用砸方式, aiContext: true }
|
||||
- { key: 迁移用例, 说明: 换一个完全不同题材(都市悬疑/古装宫斗)这技法怎么用,一句话——写不出=不是范式,降级为用例不入公共库, aiContext: true }
|
||||
- { key: 例证出处, 说明: 书名+回目+一句话定位;严禁抄录原文, aiContext: [planning, detection] }
|
||||
设计发现:
|
||||
- 2026-07-09 拆书首轮——「装置类型」枚举层级不清(契诃夫之枪是伏笔的子类),建议枚举分层:大类下挂子型(待回填)
|
||||
- 2026-07-09 拆书首轮——「装置类型」枚举层级不清(契诃夫之枪是伏笔的子类),建议枚举分层:大类下挂子型(已于 2026-07-13 B4 落入字段说明两级枚举)
|
||||
- 好字段实证:「间隔纪律(太近廉价、太远失效)」区分力五型最强——速引装置与超长线预言在此字段对比鲜明
|
||||
- 2026-07-13 B4(fable 审查+opus 金标准):加「装置形态」双模板(结构装置/场景手法条件必填)——伏笔框架硬套场景手法逼出伪纪律;加「原理/触发条件/读者收益/回收点/记忆维持/滥用反例/迁移用例」——金标准结论:失败模式才是干货位,说明重心要从剧情复述翻转到可迁移原则;装置类型闭合枚举+判定测试入字段说明(唯一源,prompt 渲染、ingest 校验)——「prompt 自立合同」漂移冤案的制度性根治。以上均为实验侧先行,待回填 design-docs 专题-06
|
||||
|
||||
@ -12,7 +12,8 @@ scope: entity
|
||||
- { key: 爆发点设计, 说明: 触发物/触发言——具体的一物一言,不是氛围, aiContext: true }
|
||||
- { key: 克制手法, 说明: 怎么不煽情而动人(动作代情/留白/错位反应), aiContext: true }
|
||||
- { key: 关系后果, 说明: 这场戏后关系发生什么不可逆变化, aiContext: true }
|
||||
- { key: 目标情绪, 说明: 预期读者反应,可复合(悲/惧/敬/意难平/鼻酸/燃)——情感戏的靶心是具体情绪,语义与「读者收益」多巴胺枚举不同故不共用, aiContext: true }
|
||||
- { key: 例证出处, 说明: 书名+回目+一句话定位;严禁抄录原文, aiContext: [planning, detection] }
|
||||
设计发现:
|
||||
- 2026-07-09 拆书首轮——缺「目标情绪/预期读者反应」独立字段(悲/惧/敬/意难平),复合情绪现只能挤进「情绪弧类型」(待回填)
|
||||
- 2026-07-09 拆书首轮——缺「目标情绪/预期读者反应」独立字段(悲/惧/敬/意难平),复合情绪现只能挤进「情绪弧类型」(2026-07-13 B4 已补字段落地)
|
||||
- 好字段实证:「铺垫结构=情感欠账清单」「爆发点=具体一物一言」把情感戏逼成可清点要件,对生成与检测都友好
|
||||
|
||||
@ -4,6 +4,17 @@ domain: narrative
|
||||
scope: work
|
||||
本体分组: 画像
|
||||
层次: 双层
|
||||
状态: 待启用
|
||||
状态: 启用
|
||||
判据: 顺序敏感的分布,值是曲线/比率,打乱章序即毁 ‖ 单个爽点构成→craft;逐章安排→outline
|
||||
启用条件: 进入卷中期、A9 质量收敛需要节奏审计时;届时补字段(张力曲线模板/爽点间隔/文戏武戏配比)
|
||||
启用记录: 2026-07-13 B4 启用(创始人议题「黄金前3章/前10章/上架前后节奏」的归属型;抽取窗口=书级——全体窗级大纲+章细纲+已审核卡锚点,不回原文)
|
||||
特有字段:
|
||||
- { key: 黄金三章画像, 说明: 前三章逐章职责链(ch1 身份锚+钩/ch2 立冲突/ch3 首爽点)及本书实际偏离——网文开局抓人法则的本书实例, aiContext: true }
|
||||
- { key: 开局策略, 说明: 前十章信息释放波次/首个大高潮位置/新角色引入密度, aiContext: true }
|
||||
- { key: 上架节奏切换, 说明: 免费期 vs 付费期的爽点密度与卷末悬念强度对比——商业节奏分水岭, aiContext: true }
|
||||
- { key: 张力曲线, 说明: 窗级定性序列(低/中/高)+转折章号——「打乱章序即毁」的本体, aiContext: true }
|
||||
- { key: 爽点间隔, 说明: 类型化爽点(打脸/升级/获得/复仇兑现)章距——典型值+最大空窗;数字从细纲数出,机械可验, aiContext: true }
|
||||
- { key: 文戏武戏配比, 说明: 窗内配比与交替模式, aiContext: true }
|
||||
- { key: 钩子密度画像, 说明: 章末钩子类型分布与强钩位置, aiContext: true }
|
||||
- { key: 例证出处, 说明: 书名+窗区间+定位;严禁抄录原文, aiContext: [planning, detection] }
|
||||
设计发现:
|
||||
- 2026-07-13 B4——作品面画像先行;公共面品类节奏范式(如「系统流开局标准节奏」)等多书画像齐+真检索需求再聚合(fable 审查「不建议做」第6条)。字段合同为实验侧先行,待回填 design-docs
|
||||
|
||||
@ -13,6 +13,7 @@ scope: entity
|
||||
- { key: 收束方式, 说明: 常见落点与"拿到但代价"的变体, aiContext: true }
|
||||
- { key: 信息功能, 说明: 这类场景天然适合埋什么/揭什么, aiContext: true }
|
||||
- { key: 角色功能位, 说明: 需要哪些位置——主导者/搅局者/围观者/裁判, aiContext: true }
|
||||
- { key: 读者收益, 说明: '闭合枚举至多两值:代入/掌控/期待/打脸/意外/优越/紧张/温情——这场戏给读者什么多巴胺', aiContext: true }
|
||||
- { key: 例证出处, 说明: 书名+回目+一句话定位;严禁抄录原文, aiContext: [planning, detection] }
|
||||
设计发现:
|
||||
- 2026-07-09 拆书首轮——「场景类型」需明标枚举非封闭(首轮三卡全落枚举外);与 trope 边界补判据:多场景但收束于一事=scene_pattern,开放跨章=trope;7 字段偏多可精简(待回填)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user