让每一本故事拥有一个会随着读者一起成长、绝不剧透、并以这个故事自己的方式呈现知识的智能百科与阅读伴侣。
系统展示的知识始终与读者当前阅读进度一致。
尚未读到的信息,对当前读者而言不存在。
不是追求最完整的百科,而是帮助读者快速找回已经读过但忘记的信息。
story build 会为人物保存记忆线索(MemoryAnchor)——读者忘记名字后最可能用来描述他的画面/行为/特征(如"一路拉着装满戏台道具的板车""平时负责做饭"),
story ask 只凭这些结构化线索就能定位人物,不需要用户记得正式名字或外号。
story build 还会为每条带章节的知识做 Evidence Grounding(关键短语接地):模型为 chapter/fromChapter/firstSeenChapter
提供一个 412 字的原文关键短语(不必逐字),程序在声明章节内定位承载它的那句话,并把该句逐字原话落定为证据
(normalize 后单句内匹配,接受"仅差 12 字/省略同句填充字";只在校验期使用,证据不入库、Reader 不可见)——
确保"读者第几章能知道什么"由原文决定,而非模型凭印象填写。校验失败会自动定位短语实际所在章节并反馈给模型修正,重试直至通过。
全量重跑(--force)前可加 --backup:构建写入前自动把 story.db 快照备份到 .story/backups/(VACUUM INTO 一致性快照,默认关闭),随时可回滚。
每个故事拥有自己的世界模型和最佳表达方式;系统适应故事,而不是要求故事适应固定模板。
把已构建的结构化知识以网页形式浏览:
story web # 默认 http://127.0.0.1:8765
story web --port 9000 # 指定端口- 页面:首页实体索引(角色/组织/地点/物品/概念)→ 实体档案(身份事实、能力、关系、高光时刻、事件、出场分布)+ 模糊搜索;
- 防剧透:网页顶部可调整「读到第几章」,未读到的角色、情节与事件不会显示——过滤在服务端数据访问层实现,与
ask同一机制; - 不含小说正文:只展示
story build产出的结构化知识(章节仅显示标题)。