news 2026/9/3 22:33:38

Webnovel Writer 数据层设计揭秘:state.json、index.db 与 vectors.db 三库分工全解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Webnovel Writer 数据层设计揭秘:state.json、index.db 与 vectors.db 三库分工全解析

Webnovel Writer 数据层设计揭秘:state.json、index.db 与 vectors.db 三库分工全解析

【免费下载链接】webnovel-writer基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200 万字量级 连载创作。项目地址: https://gitcode.com/GitHub_Trending/we/webnovel-writer

Webnovel Writer 是一款基于 Claude Code 的长篇网文辅助创作系统,用 state.json、index.db、vectors.db 三层存储分工协作,解决 AI 写作中的遗忘与幻觉问题,支持 200 万字量级连载。

为什么长篇网文 AI 写作要先解决「记忆」问题

写 200 万字网文,最大的敌人不是灵感,而是记忆。写到第 300 章时,AI 很容易把主角的境界写错、把伏笔忘了回收、甚至编出没设定过的新设定。

Webnovel Writer 的思路很直接:把故事的全部事实拆成三层存储,各司其职——

存储角色一句话定位
state.json仪表盘<5KB 精简状态:进度、主角快照、节奏追踪
index.db结构化主库SQLite:实体、别名、关系、状态变化
vectors.db语义检索引擎向量 + BM25 混合检索,按需找回旧场景

三者都位于项目的.webnovel/目录下,完整目录约定见 system-data-flow.md,架构总览见 overview.md。

state.json:小于 5KB 的「仪表盘」

早期版本里,实体、关系、状态变化全都塞在 state.json 里,结果 20 章之后文件爆炸,token 成本飙升。于是团队做了一个关键架构决策:把大数据迁出,state.json 只留「最常读、体积小」的状态

现在它只保留这些高频字段:

  • progress:当前章节、总字数、卷进度
  • protagonist_state:主角境界、位置、金手指快照
  • strand_tracker:主线/感情线/世界观线的节奏追踪
  • chapter_meta:每章的钩子类型、开场模式,避免连续重复套路
  • disambiguation_pending:待人工确认的消歧记录

完整字段说明见 state-schema.md。它被刻意压到5KB 以内,Context Agent 每章都可以全量读入,几乎零成本。

index.db:SQLite 主存储,实体关系全在这里

index.db承担了原本 state.json 里最膨胀的几块数据,核心表结构如下:

存什么解决的痛点
entities角色/地点/物品/势力/招式,含当前状态 JSON主角境界、位置不再散落在各章
aliases别名一对多映射(如「天云宗」→地点+势力)同名实体自动消歧
state_changes字段变更流水:旧值→新值+章节号任何变化都可审计回溯
relationships实体间关系图谱人物关系网不丢失
chapters/scenes/appearances章节元数据与出场记录快速查询「谁在第几章出场」

此外还有追读力债务、审查指标等运营型表(v5.3/v5.4 引入)。表结构文档见 index-schema.md。

它的读接口由 index_manager.py 统一管理,写入则走 sql_state_manager.py 的增量写入。SQLite 让按需查询成为可能——不需要把几千个实体全塞进上下文,一句 SQL 就能只取核心角色。

老项目可以通过一条命令完成迁移,自动备份旧 state.json 再精简:

python webnovel-writer/scripts/webnovel.py migrate --backup

实现见 migrate_state_to_sqlite.py。

vectors.db:向量 + BM25 混合检索,把 200 万字「装回」上下文

结构化数据解决「是什么」,但「第 47 章那场雨夜戏是怎么写的」这类问题,需要语义检索。

vectors.db由 rag_adapter.py 管理,内部有两张关键表:

  • vectors 表:章节切块(chunk)+ 向量嵌入,支持语义相似度搜索
  • bm25_index 表:倒排索引,支持关键词精确匹配

查询时走混合检索:向量和 BM25 并行召回,用 RRF 融合排序,再经 rerank 精排取 Top 结果。这样「语义相近」和「精确命中」各占一半,检索质量远超单一方式。

检索配置(Top-K、超时、降级策略等)集中在 config.py,API 接入方法见 rag-and-config.md。更妙的是:即使嵌入 API 不可用,BM25 索引仍能让关键词检索正常工作——这是典型的优雅降级设计。

一条单向数据链:谁在读,谁在写

三库不是各自为政,而是嵌在一条清晰的读写链里:

写作前—— Context Agent 全量读 state.json(便宜),SQL 按需查 index.db(精准),RAG 检索 vectors.db(兜底),组装出本章「创作任务书」。

写作后—— Data Agent 从正文提取 accepted 提交物,驱动投影写入器一次性更新:index.db(新实体/关系/状态变化)→ state.json(进度/主角快照)→ summaries(章节摘要)→ vectors.db(向量嵌入)。

💡 这套分工背后是明确的「真源」原则:.story-system/合同树是写后主链真源,而 state.json、index.db、vectors.db 都是它的投影/read-model——可以随时重建,永不与正文打架。

快速自检:三库健康度怎么看

用内置状态报告即可检查三者是否正常生成:

python webnovel-writer/scripts/webnovel.py status

若 state.json 意外膨胀(比如手动塞了实体数据),跑一次migrate就能收回 SQLite。日常维护命令清单见 commands.md。

小结:三库分工是「不遗忘」的工程底座

  • state.json:小到能全量读,负责「现在到哪了」
  • index.db:结构化可查询,负责「设定是什么、变了没」
  • vectors.db:语义可检索,负责「以前写过类似的吗」

三者配合,让 AI 在 200 万字连载里既不遗忘、也不幻觉——这正是 Webnovel Writer 数据层设计的精髓。

【免费下载链接】webnovel-writer基于 Claude Code 的长篇网文辅助创作系统,解决 AI 写作中的「遗忘」和「幻觉」问题,支持 200 万字量级 连载创作。项目地址: https://gitcode.com/GitHub_Trending/we/webnovel-writer

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/3 22:32:08

MCBE紫色UI材质包实操指南:从安装到避坑全解析

第一次把 KingViolet UI 这类 MCBE 紫色 UI 材质装进游戏时&#xff0c;我的第一反应是&#xff1a;主菜单终于不是那套灰蓝色了。但真正用了几天之后&#xff0c;我意识到一个问题——这类资源包真正考验人的&#xff0c;并不是它好不好看&#xff0c;而是你有没有搞懂 MCBE 的…

作者头像 李华
网站建设 2026/9/3 22:28:56

ArcGIS Engine空间插值实战:IDW与克里金代码实现及避坑指南

简介&#xff1a;面向GIS初学者的ArcGIS AE/AO空间插值代码与数据包&#xff0c;以C#语言演示IDW、克里金、样条等常用插值方法在ArcObjects环境下的编程实现&#xff0c;帮助读者解决栅格表面预测与数据空白填补问题&#xff0c;适合正在学习ArcGIS二次开发或空间分析的人员。…

作者头像 李华
网站建设 2026/9/3 22:28:13

JSON结构化输出实战:用Spring AI打造可靠的简历解析助手

很多同学在接触大模型应用开发时&#xff0c;都会遇到一个绕不开的话题&#xff1a;结构化输出。尤其是最近 AI 简历助手、AI 文档解析、Agent 工具调用这类应用越来越火&#xff0c;大家会发现&#xff0c;同样是让大模型干活&#xff0c;有的人做出来的功能稳定可靠&#xff…

作者头像 李华