本文只描述当前仓库里已经落地、并被主写作链路实际消费的长期记忆架构。
这里不再保留历史改造计划,也不把理想态蓝图混进来。判断标准只有一个:当前代码里是否真实存在、是否已经接入主链路。
当前长期记忆的真实实现是:
.webnovel/memory_scratchpad.json 作为长期语义记忆缓存index.db、summaries/、state.json 作为近期状态和历史证据层MemoryOrchestrator 组装 working / episodic / semantic 三层结果ContextManager、extract_chapter_context.py 和 MemoryContractAdapter 对外消费它已经是一条可运行的数据链,但还不是完全独立的记忆子系统。
scripts/data_modules/memory/schema.pyscripts/data_modules/memory/store.pyscripts/data_modules/memory/writer.pyscripts/data_modules/memory/orchestrator.pyscripts/data_modules/memory/bootstrap.pyscripts/data_modules/memory/compactor.pyscripts/data_modules/memory_contract_adapter.pyscripts/memory_cli.pyscripts/data_modules/context_manager.py 中的 long_term_memory 注入.webnovel/project_memory.json/webnovel-learn 产出的项目经验记忆ContextManager 里的 memory section这部分会被上下文一起读取,但不等同于 memory_scratchpad.json 这条长期记忆主链路。
章节结果 / 审查产物
│
▼
MemoryWriter
│
├── 写入 memory_scratchpad.json
├── 维护 active/outdated/contradicted/tentative
└── 触发压缩与冲突检查
state.json / index.db / summaries/ / memory_scratchpad.json
│
▼
MemoryOrchestrator
│
├── working_memory
├── episodic_memory
├── semantic_memory
└── long_term_facts / active_constraints / warnings / stats
▼
ContextManager
│
├── long_term_memory section
├── extract_chapter_context.py
└── MemoryContractAdapter / memory CLI
▼
webnovel-write / review / query / 其他消费端
当前不是单独存储,而是运行时临时拼装,主要来源于:
state.json 中的主角状态、情节线程、待消歧项这层由 MemoryOrchestrator._build_working_memory() 生成。
当前主要来自 index.db 的近期结构化证据,而不是独立的通用历史检索系统。
主要来源:
这层由 MemoryOrchestrator._build_episodic_memory() 生成,特点是偏“最近证据”,不是全量全库语义召回。
当前长期记忆的核心存储是 .webnovel/memory_scratchpad.json。
它由 ScratchpadManager 读写,按分类分桶保存:
character_statestory_factsworld_rulestimelineopen_loopsreader_promisesrelationships每条记忆项统一使用 MemoryItem 结构,核心字段包括:
idlayercategorysubjectfieldvaluepayloadstatussource_chapterevidenceupdated_at支持的状态为:
activeoutdatedcontradictedtentativeMemoryWriter写作主链在章节提交后,会把结构化结果交给 MemoryWriter.update_from_chapter_result()。
当前已实现的写入来源包括:
state_changesentities_newrelationships_newchapter_meta.hookmemory_facts其中 memory_facts 用于更深一层的结构化映射,当前支持:
timeline_eventsworld_rulesopen_loopsreader_promisesScratchpadManager 做去重与状态收敛ScratchpadManager.upsert_item() 的核心规则是:
outdated当前各分类的主键规则由 schema.py 统一定义,例如:
character_state:subject + fieldrelationship:subject + fieldworld_rule:subject + fieldopen_loop:subjectScratchpadManager.save() 会在达到阈值后调用 compactor.py。
当前压缩策略包括:
outdated 只保留最新一条story_factmemory bootstrap 会从现有 index.db 与 summaries/ 回填出一版初始长期记忆。
当前可回填的内容包括:
MemoryOrchestrator 负责统一出包MemoryOrchestrator.build_memory_pack() 是当前长期记忆的统一读取入口。
它会做四件事:
working_memoryepisodic_memorymemory_scratchpad.json 中的 active 项输出的核心字段包括:
working_memoryepisodic_memorysemantic_memorylong_term_factsactive_constraintsrecent_changeswarningsstats其中:
semantic_memory 与 long_term_facts 当前是同一批可直接注入的长期语义事实active_constraints 主要抽取 world_rule 和 open_loopwarnings 当前主要用于暴露记忆冲突semantic_memory 不是全量注入,而是先做一轮轻量过滤。
现有过滤依据:
subject / field / value 是否出现在本章章纲中然后再按预算截断。当前预算由 budget.py 和配置项共同控制。
ContextManagerContextManager 仍然是写作上下文的总装配器。
当 context_use_memory_orchestrator=true 时,它会:
MemoryOrchestrator.build_memory_pack()long_term_memory sectionreader_signal / genre_profile / writing_guidance / plot_structure 一起组装最终 context所以当前真实关系不是“记忆系统完全替代 ContextManager”,而是“记忆系统已经接入 ContextManager”。
extract_chapter_context.py写作前置上下文脚本会从 ContextManager 里抽取几个关键 section,其中已经包含:
reader_signalgenre_profilewriting_guidanceplot_structurelong_term_memory这意味着长期记忆已经进入主写作上下文,而不是停留在独立实验脚本里。
MemoryContractAdapterMemoryContractAdapter 是对外的薄适配层。
它会把现有模块包装成统一接口,提供:
commit_chapter()load_context()query_entity()query_rules()read_summary()get_open_loops()get_timeline()这层的意义是:当前记忆链路已经有稳定接口,但底层存储仍然复用现有 state / index / scratchpad / summaries。
当前长期记忆相关的 CLI 分成两类:
webnovel.py memory ...memory_cli.py常用命令包括:
memory statsmemory querymemory dumpmemory conflictsmemory bootstrapmemory updatestate.json负责运行时状态,不负责长期知识沉淀。
当前主要承载:
index.db负责结构化历史证据。
当前长期记忆在读取 episodic_memory 时,主要从这里拿:
summaries/负责章节摘要与最近写作上下文。
在长期记忆链路里,它有两个作用:
working_memory 的最近摘要来源bootstrap 时用于回填“伏笔”类开放问题memory_scratchpad.json负责长期语义记忆缓存,是当前长期记忆的主真源。
project_memory.json负责项目经验/学习沉淀,当前仍是独立旁路,不与 memory_scratchpad.json 合并。
MemoryContractAdapter 作为稳定外部接口当前仍依赖:
ContextManager 做最终装配index.db 提供近期历史证据state.json 提供运行时快照episodic_memory 偏近期,不是全量历史召回目前更像“最近结构化证据层”,不是统一的跨全书语义回忆系统。
semantic_memory 仍是 JSON scratchpad当前没有单独的长期语义向量层,也没有图数据库层。
project_memory.json 与长期记忆主链还未统一项目经验记忆和剧情长期记忆现在是两套并行数据源。
当前主要是:
还没有更重的跨章节语义裁决流程。
当前仓库里的长期记忆已经从“方案讨论”进入“可运行架构”阶段,但它的真实定位应当是:
ContextManager + state/index/summaries 生态之上因此,这份文档只保留“现状架构说明”。
历史计划文档已经移除;如果后续继续演进,应重新按当时的真实代码状态单独写新 spec。