本文档给出一份可直接执行的改造计划,用于在当前 webnovel-writer 基础上引入 LIGHT 风格的三层记忆系统,同时尽量复用现有的 state.json、index.db、vectors.db、ContextManager 与写作工作流。
目标不是推翻现有架构,而是在低风险前提下补齐:
scratchpadmemory orchestrator当前项目已经具备以下能力:
state.json:精简运行态与章节元信息index.db:实体、别名、状态变化、关系、追读力、审查指标vectors.db:章节摘要与场景切片的向量检索ContextManager:多源上下文拼装与预算裁剪extract_chapter_context.py:写作前统一上下文入口workflow_manager.py:写作工作流状态机与中断恢复当前缺口主要有两项:
working / episodic / scratchpad 的记忆编排器将系统升级为三层记忆架构:
working memory:近期写作上下文episodic memory:可检索历史证据scratchpad memory:长期高密度摘要记忆/webnovel-write 主流程Skills / Agents
│
▼
Chapter Context Facade
│ extract_chapter_context.py
│ ContextManager
▼
Memory Orchestrator
├── Working Memory
├── Episodic Memory
└── Scratchpad Memory
▼
Final Context Pack
写入侧:
Data Agent / Step 5
├── state.json
├── index.db
├── vectors.db
├── summaries/
└── memory_scratchpad.json
优先复用:
ContextManagerextract_chapter_context.pyStateManagerIndexManagerRAGAdapterstate.json 继续保存运行态精简信息index.db 继续保存结构化事实vectors.db 继续保存语义检索向量memory_scratchpad.json 专门保存长期摘要记忆先“旁路接入”,再逐步把逻辑迁入编排器,而不是一次性重写 ContextManager
每个阶段都能独立上线和回退,避免一次改太大导致写作链失稳
来源:
state.jsonreader_signalwriting_guidance当前主要载体:
scripts/extract_chapter_context.pyscripts/data_modules/context_manager.py来源:
index.dbvectors.db.webnovel/summaries/chNNNN.md当前主要载体:
scripts/data_modules/index_manager.pyscripts/data_modules/rag_adapter.pyscripts/data_modules/state_manager.py新增:
.webnovel/memory_scratchpad.json用途:
建议新增以下文件:
webnovel-writer/scripts/data_modules/
├── memory_orchestrator.py
├── scratchpad_manager.py
├── scratchpad_schema.py
└── memory_conflict_resolver.py
scratchpad_schema.py职责:
memory_scratchpad.json 结构建议结构:
{
"story_facts": [],
"character_facts": [],
"world_rules": [],
"timeline": [],
"open_loops": [],
"reader_promises": [],
"active_constraints": [],
"meta": {
"version": 1,
"last_updated": ""
}
}
scratchpad_manager.py职责:
memory_scratchpad.json建议能力:
load()save()update_from_chapter_result()compress_if_needed()filter_for_chapter()mark_fact_status()memory_conflict_resolver.py职责:
建议状态:
activeoutdatedcontradictedtentative建议处理对象:
memory_orchestrator.py职责:
建议接口:
build_memory_pack(chapter: int) -> dictload_working_memory(chapter: int) -> dictload_episodic_memory(chapter: int) -> dictload_scratchpad_memory(chapter: int) -> dictresolve_conflicts(...)assemble(...)scripts/data_modules/context_manager.py改造目标:
scratchpad sectionMemoryOrchestrator建议改动:
_build_pack() 中加入 scratchpad 内容SECTION_ORDER 中加入或重新排序 scratchpadscripts/extract_chapter_context.py改造目标:
MemoryOrchestrator建议改动:
build_chapter_context_payload() 中加载 orchestrator 结果scratchpad_signal 或 long_term_memory 字段scripts/data_modules/state_manager.py改造目标:
process_chapter_result() 完成后触发 scratchpad 更新建议改动:
ScratchpadManager.update_from_chapter_result()scripts/data_modules/rag_adapter.py改造目标:
建议改动:
chunk_type=scratchpad 做检索scripts/status_reporter.py改造目标:
建议改动:
改造目标:
建议改动:
新增:
.webnovel/memory_scratchpad.json
建议字段:
story_facts:当前剧情稳定事实character_facts:角色稳定状态与重要变化world_rules:长期不可违背设定timeline:关键事件时间线open_loops:未回收伏笔、未完成承诺、待兑现悬念reader_promises:已对读者抛出的期待点active_constraints:当前章节仍需遵守的重要约束meta:版本、更新时间、压缩次数建议事实项结构:
{
"id": "fact-char-xiaoyan-realm-001",
"category": "character_facts",
"subject": "xiaoyan",
"field": "realm",
"value": "筑基三层",
"status": "active",
"source_chapter": 128,
"updated_at": "2026-03-19T20:00:00+08:00",
"evidence": [
"ch0128_summary",
"state_change:xiaoyan:realm:128"
],
"confidence": 0.95
}
目标:
任务:
memory_scratchpad.json schemaScratchpadManager 最小接口MemoryOrchestrator 输入输出格式交付物:
scratchpad_schema.py验收标准:
目标:
任务:
scratchpad_schema.pyscratchpad_manager.py交付物:
memory_scratchpad.jsonScratchpadManager验收标准:
目标:
任务:
StateManager.process_chapter_result() 后接入 scratchpad 更新entities_newstate_changesrelationships_newchapter_metaplot_threads.foreshadowing交付物:
验收标准:
目标:
任务:
ContextManager 中加入 scratchpad sectionextract_chapter_context.py 中输出长期记忆摘要交付物:
scratchpad / long_term_memory验收标准:
目标:
任务:
memory_orchestrator.pyContextManager 调用 orchestrator,而不是自己做全部组装交付物:
MemoryOrchestratorContextManager 兼容适配验收标准:
目标:
任务:
memory_conflict_resolver.pyactiveoutdatedcontradictedtentative交付物:
验收标准:
目标:
任务:
交付物:
验收标准:
推荐严格按以下顺序做:
原因:
新增测试文件建议:
scripts/data_modules/tests/
├── test_scratchpad_schema.py
├── test_scratchpad_manager.py
├── test_memory_orchestrator.py
└── test_memory_conflict_resolver.py
重点测试:
建议扩展:
test_context_manager.pytest_extract_chapter_context.pytest_state_manager_extra.py验证场景:
必须覆盖:
/webnovel-write 主流程不回归/webnovel-review 不受影响memory_scratchpad.json 时可兼容问题:
控制:
问题:
控制:
tentative 状态问题:
控制:
问题:
控制:
完成标志:
.webnovel/memory_scratchpad.json完成标志:
完成标志:
完成标志:
MemoryOrchestrator 成为主读取路径完成标志:
如果只做一个最小可落地版本,建议范围限定为:
memory_scratchpad.jsonscratchpad_schema.pyscratchpad_manager.pystate_manager.py 写后更新 scratchpadcontext_manager.py 写前读取 scratchpad这五项完成后,就已经有一版可运行的 LIGHT MVP。
当前项目不需要重构重来,而应该走一条“补层”的路线:
state/index/rag/workflowscratchpadmemory orchestrator 把三层记忆统一起来这是对当前工程最稳、最符合现状、也最容易逐步验收的改造方案。