框架: 前文实体索引压缩为名字清单(每章16万→2万token砍86%,判重只需名字)

This commit is contained in:
zizi 2026-07-14 12:29:40 +08:00
parent 1444dfb956
commit be6e36f8e3

View File

@ -86,7 +86,10 @@ def render_contracts(contracts):
def scaffold_prompt(title, ch, ch_title, text, prev_entities):
ents = json.dumps(prev_entities, ensure_ascii=False) if prev_entities else "(第一章,为空)"
# 前文实体压缩(创始人 2026-07-14判重只需名字清单不必重发型+摘要全档——
# 全量 json 到后期每章膨胀到 15 万+ token深空第 557 章 2851 实体≈15 万),是次数被压的真凶
_names = sorted({(e.get("名称") or e.get("name") or "").strip() for e in prev_entities} - {""}) if prev_entities else []
ents = "".join(_names) if _names else "(第一章,为空)"
wc = len(text.replace("\n", "").replace(" ", ""))
cap = max(60, int(wc * 0.05)) # 绝对字数上限(纯比例约束 M3 会写超,首轮实测 9.8%19%
# 缓存友好read-context「稳定度递减吃前缀缓存」固定规则段全部前置吃前缀缓存
@ -95,7 +98,7 @@ def scaffold_prompt(title, ch, ch_title, text, prev_entities):
对参考书的当前章书名/章号/正文见文末材料区做三件事
1) 逆推本章细纲章目标/关键事件/出场角色/伏笔动作(··)/章末钩子**细纲全文不得超过文末给出的字数上限**约本章正文的 5%超标会被校验脚本机械退回细纲是结构骨架不是缩写复述用短语与分号不写完整句子
2) 抽实体增量脚手架级索引{ENTITY_CRITERIA}
判重文末给出前文已收录实体不重报除非本章给出新身份则在一句话摘要里并入
判重文末给出前文已收录实体**名字清单**清单内的实体本章不重报若本章赋予其新身份可在摘要里点明清单外的本章新实体照抽
3) 报范式候选线索**只报线索不出卡**出卡由窗级聚类另做本章表现突出疑似可跨书复用的写法五型候选craft=单点叙事装置(删去它场景仍成立)combat=整场武力对抗的打法emotion=整场情绪戏的推进scene_pattern=拍卖/谈判/审讯等场景公式trope=跨章复用的情节公式
每条线索给四项type五型之一拿不准填"?"name28 字短名作者口头会说的话禁书内专名禁修饰堆叠clue一句话这个写法怎么运作{PLACEHOLDERS}等抽象指代evidence一句话本章哪里这样写为何突出可用专名
05 /平庸章 0 条正常门槛比出卡低拿不准的报上来窗级聚类会过滤
@ -105,7 +108,7 @@ def scaffold_prompt(title, ch, ch_title, text, prev_entities):
本章材料每章不同非规则
当前章{title} {ch} {ch_title}正文约 {wc} 细纲上限 {cap}
前文实体索引
前文实体名字清单判重用已在列的不重报
{ents}
本章正文
{text}"""