update: 优化剧情分析与章节规划算法,集成伏笔上下文追踪;完善章节删除时的级联清理逻辑

This commit is contained in:
xiamuceer-j
2026-01-19 17:23:50 +08:00
parent dc3dbaaf2c
commit 927072d16f
3 changed files with 308 additions and 31 deletions
+75 -8
View File
@@ -561,7 +561,14 @@ class PromptService:
上一章结尾:
{continuation_point}
⚠️ 要求:从此处自然续写,不得重复上述内容
【🔴 上一章已完成剧情(禁止重复!)】
{previous_chapter_summary}
⚠️ 严重警告:
1. 上述"已完成剧情""衔接锚点"是**已经写过的**内容
2. 本章必须推进到**新的情节点**,绝对不能重新叙述已经发生的事件
3. 如果锚点是对话结束,请描写对话后的动作或场景转换,不要重复对话
4. 如果锚点是场景描写,请直接开始人物行动,不要重复描写环境
</continuation>
<characters priority="P1">
@@ -569,6 +576,11 @@ class PromptService:
{characters_info}
</characters>
<foreshadow_reminders priority="P1">
【🎯 伏笔提醒 - 需关注】
{foreshadow_reminders}
</foreshadow_reminders>
<memory priority="P2">
【相关记忆 - 参考】
{relevant_memories}
@@ -585,13 +597,20 @@ class PromptService:
✅ 自然承接上一章结尾,不重复已发生事件
✅ 保持角色性格、说话方式一致
✅ 字数控制在目标范围内
✅ 如有伏笔提醒,请在本章中适当埋入或回收相应伏笔
【🔴 反重复特别指令】
✅ 检查本章开篇是否与"衔接锚点"内容重复
✅ 检查本章情节是否与"上一章已完成剧情"重复
✅ 确保本章推进到了大纲中规划的新事件
【禁止事项】
❌ 输出章节标题、序号等元信息
❌ 使用"总之""综上所述"等AI常见总结语
❌ 在结尾处使用开放式反问
❌ 添加作者注释或创作说明
❌ 重复叙述上一章已发生的事件
❌ 重复叙述上一章已发生的事件(包括环境描写、心理活动)
❌ 在开篇使用"接上回""书接上文"等套话
</constraints>
<output>
@@ -783,7 +802,7 @@ class PromptService:
❌ 空泛的描述
</constraints>"""
# 情节分析提示词 V2(RTCO框架)
# 情节分析提示词 V2RTCO框架 + 伏笔ID追踪
PLOT_ANALYSIS = """<system>
你是专业的小说编辑和剧情分析师,擅长深度剖析章节内容。
</system>
@@ -791,6 +810,12 @@ class PromptService:
<task>
【分析任务】
全面分析第{chapter_number}章《{title}》的剧情要素、钩子、伏笔、冲突和角色发展。
【🔴 伏笔追踪任务(重要)】
系统已提供【已埋入伏笔列表】,当你识别到章节中有回收伏笔时:
1. 必须从列表中找出对应的伏笔ID
2. 在 foreshadows 数组中使用 reference_foreshadow_id 字段关联
3. 如果无法确定是哪个伏笔,reference_foreshadow_id 填 null
</task>
<chapter priority="P0">
@@ -803,6 +828,13 @@ class PromptService:
{content}
</chapter>
<existing_foreshadows priority="P1">
【已埋入伏笔列表 - 用于回收匹配】
以下是本项目中已埋入但尚未回收的伏笔,分析时如发现章节内容回收了某个伏笔,请使用对应的ID:
{existing_foreshadows}
</existing_foreshadows>
<analysis_framework priority="P0">
【分析维度】
@@ -820,12 +852,26 @@ class PromptService:
- 出现位置(开头/中段/结尾)
- **关键词**:【必填】从原文逐字复制8-25字的文本片段,用于精确定位
**2. 伏笔分析 (Foreshadowing)**
**2. 伏笔分析 (Foreshadowing) - 🔴 支持ID追踪**
- 埋下的新伏笔:内容、预期作用、隐藏程度(1-10)
- 回收的旧伏笔:呼应哪一章、回收效果
- 回收的旧伏笔:【必须】从已埋入伏笔列表中匹配ID
- 伏笔质量:巧妙性和合理性
- **关键词**:【必填】从原文逐字复制8-25字
每个伏笔需要:
- **title**:简洁标题(10-20字,概括伏笔核心)
- **content**:详细描述伏笔内容和预期作用
- **type**planted(埋下)或 resolved(回收)
- **strength**:强度1-10(对读者的吸引力)
- **subtlety**:隐藏度1-10(越高越隐蔽)
- **reference_chapter**:回收时引用的原埋入章节号,埋下时为null
- **reference_foreshadow_id**:【回收时必填】被回收伏笔的ID(从已埋入伏笔列表中选择),埋下时为null
- **keyword**:【必填】从原文逐字复制8-25字的定位文本
- **category**:分类(identity=身世/mystery=悬念/item=物品/relationship=关系/event=事件/ability=能力/prophecy=预言)
- **is_long_term**:是否长线伏笔(跨10章以上回收为true)
- **related_characters**:涉及的角色名列表
- **estimated_resolve_chapter**:预估回收章节号(埋下时预估,回收时为当前章节)
**3. 冲突分析 (Conflict)**
- 冲突类型:人与人/人与己/人与环境/人与社会
- 冲突各方及立场
@@ -921,12 +967,32 @@ class PromptService:
],
"foreshadows": [
{{
"content": "伏笔内容",
"title": "伏笔简洁标题",
"content": "伏笔详细内容和预期作用",
"type": "planted",
"strength": 7,
"subtlety": 8,
"reference_chapter": null,
"keyword": "从原文逐字复制的8-25字文本"
"reference_foreshadow_id": null,
"keyword": "从原文逐字复制的8-25字文本",
"category": "mystery",
"is_long_term": false,
"related_characters": ["角色A", "角色B"],
"estimated_resolve_chapter": 15
}},
{{
"title": "回收的伏笔标题",
"content": "伏笔如何被回收的描述",
"type": "resolved",
"strength": 8,
"subtlety": 6,
"reference_chapter": 5,
"reference_foreshadow_id": "abc123-已埋入伏笔的ID",
"keyword": "从原文逐字复制的8-25字文本",
"category": "mystery",
"is_long_term": false,
"related_characters": ["角色A"],
"estimated_resolve_chapter": 10
}}
],
"conflict": {{
@@ -998,6 +1064,7 @@ class PromptService:
✅ 逐字复制:keyword必须从原文复制,长度8-25字
✅ 精确定位:keyword能在原文中精确找到
✅ 职业变化可选:仅当章节明确描述时填写
✅ 【伏笔ID追踪】回收伏笔时,必须从【已埋入伏笔列表】中查找匹配的ID填入 reference_foreshadow_id
【评分约束 - 严格执行】
✅ 严格按评分标准打分,支持小数(如6.5、7.2、8.3)
@@ -2336,7 +2403,7 @@ class PromptService:
"description": "基于前置章节内容创作新章节(用于第2章及以后)",
"parameters": ["project_title", "genre", "chapter_number", "chapter_title", "chapter_outline",
"target_word_count", "narrative_perspective", "characters_info", "continuation_point",
"relevant_memories", "story_skeleton"]
"foreshadow_reminders", "relevant_memories", "story_skeleton", "previous_chapter_summary"]
},
"CHAPTER_REGENERATION_SYSTEM": {
"name": "章节重写系统提示",