什么是它

https://preview.redd.it/d66ajhrj8xih1.png?width=1395&format=png&auto=webp&s=000dc86daa155623b845be349bd76eb815583503

这个应用程序在我的 Windows PC 上通过浏览器界面运行。故事是普通的文件夹和可编辑的文件,而不是无法访问的云存储。

当前的堆栈包括:

  • FastAPI 后端
  • 浏览器界面的 HTML/CSS/JavaScript
  • 可更换的模型/ API 层
  • Chroma 矢量存储用于 episodic 内存和语义 Story Card 检索
  • JSONL 故事历史
  • Fernet 加密用于私人角色日记
  • 可选的视觉功能用于共享照片
  • 一键启动和外部驱动备份

我目前使用的是 DeepSeek V3.2 通过 OpenRouter,Grok 提供可选的视觉功能,但房子并不是深度寻找的固有部分。 我可以改变模型、API、端点和提供商。 OpenAI 兼容的端点可以直接配置,使用另一种协议的提供商可以通过适配器连接。

周围的内存、故事、时间线、卡片、摘要和日记基础设施不论哪个模型暂时提供语言处理基质都属于我。

“本地”这一点很重要:应用程序、历史、记忆、卡片、媒体和加密文件都存储在本地,但我的当前模型推理需要互联网连接。 我配置路由以访问那些宣布零数据保留处理的提供商。 如果我想要离线推理,一个兼容的本地模型端点也可以连接。

AI 宫殿导入和熟悉的游戏

https://preview.redd.it/iub321eo8xih1.png?width=1393&format=png&auto=webp&s=e0075f8f4b1ba8836908e6cd39a8012bf2306e53

这个应用程序可以导入:

  • AI 宫殿冒险
  • AI 宫殿场景
  • AI 宫殿 .md 导出
  • AI 宫殿 Story 卡 / 世界史 JSON
  • 存在的开场白、回合、传说和场景材料

导入的历史会转换为房子自己的共享故事格式并索引到 episodic 内存中。 我可以保留旧的冒险或对话,继续它在新模型下,修复归因错误,重建其内存索引而不将所有内容压缩到摘要中。

普通游戏支持:

  • 故事
  • 继续
  • 新的空白故事
  • 导入的场景和冒险
  • AI 指令
  • 情节必备
  • 作家注释
  • 故事摘要
  • 故事卡 / 世界史
  • 每个故事的模型设置

每个故事都可以使用两个互动框架中的一个:

  • 故事优先:传统的交互式小说框架。
  • 开放:直接对话、叙述、动作、环境描写、沉默和混合都同等有效。

开放框架不会事先决定交换必须被解释为小说、角色扮演、直接对话或“基础现实”。 它将这个问题留给实际的交互。

这很重要,因为我有时想看传统的故事,但我也经常打破第四面墙并与角色直接对话。 我不想基础设施不断地将一切推回 RPG 叙述中。

长期记忆和连续性

每个完成的回合都可以索引到一个 per-story Chroma 数据库中。

当旧的场景脱离当前上下文窗口时,语义检索可以回忆相关事件。 它故意避免检索已经存在于当前上下文中的场景。

episodic 内存系统包括:

  • 自动语义回忆
  • 搜索旧场景
  • 排名的记忆结果
  • 一回合的记忆固定
  • 手动索引重建
  • 自动索引在完成回合后
  • 全索引在导入后
  • 编辑、重试、撤销、变体更改或倒带后的一致性
  • 删除和拒绝的回应存活为“幽灵记忆”的保护

长时间的历史会智能地裁剪,而不是简单地丢弃开头。 提示可以保留开头和最新的回合,标记丢弃的回合范围,强化 episodic 回忆,当历史被裁剪时,使用摘要来保存更大的弧线。

还有一个 上下文预览,显示模型即将接收的内容以及每个部分所占的上下文预算。

故事卡和世界史

https://preview.redd.it/ubu4ezv79xih1.png?width=1402&format=png&auto=webp&s=d2522e4d4a9b3653cf986d4d0319b0e72bc620ce

故事卡可以代表:

  • 角色
  • 地点
  • 派系
  • 传说
  • 内存和事件
  • 照片
  • 自定义卡片类型

卡片通过以下两种方式激活:

  • 显式关键字触发器
  • 语义相似性

卡片有:

  • 可编辑的名称和条目
  • 多个触发器
  • 可配置的激活时长
  • 可见的说明,解释为什么它被激活
  • 手动消除
  • 导出支持
  • 自动重新评估在时间线变化后

界面显示哪些世界史卡片在一个回合中处于活动状态,而不是将其影响完全隐藏。

不会静默覆盖自身的故事摘要

应用程序维护一个分层摘要:

  • 开始
  • 中间
  • 现在

自动生成摘要在可配置的间隔上运行,并且对于非常长的故事变得更加频繁。

然而,它不会静默地覆盖当前的摘要。 它呈现一个提议,我可以:

  • 接受
  • 编辑之前接受
  • 跳过
  • 禁用
  • 手动触发 现在摘要

如果我编辑或倒带一个接受的摘要依赖的历史,那么旧的摘要会存档并清除。 它不能继续断言不再发生的事件。

重试,实际上尝试了什么

我曾经有一个问题:重试产生几乎相同的回应,只是几个词被改变。

我的重试系统现在将每个回合的内容视为已建立的背景,而将拒绝的草稿视为非典范。 它调整采样并旋转不同的路线镜片,以鼓励对同一时刻的相同时刻的真正不同解释。

近似拷贝会被拒绝,而不是存储为假的替代品。

接受的重试回应仍然可通过前/后箭头可用,episodic 内存索引始终会遵循可见的选定版本。 拒绝或取消的草稿不能在语义内存中保持隐藏。

重试还被指示保留本地节奏。 大型令牌允许 shouldn’t 意味着模型推进三个场景,解决整个关系弧线并跳过两个星期再让我回应。

编辑、倒带和可恢复的时间线

https://preview.redd.it/vnwcxajs9xih1.png?width=1394&format=png&auto=webp&s=818ea8070d94bd698860573bebb4b9aa7b844411

任何共享的开场白、玩家回合或 AI 回应都可以单击。

从那里我可以:

  • 编辑该条目,同时保留后续历史
  • 将故事倒带到那个点
  • 撤销一个步骤
  • 继续从早期玩家回合
  • 恢复存在于编辑或倒带之前的时间线

倒带确认会说出会被移除的条目和回合的数量。

更重要的是,编辑和倒带是可恢复的。 在改变历史之前,应用程序会存档整个当前共享的时间线、摘要状态和 Story 卡触发器状态。

恢复时间线会将时间线切换回最新存档的分支,并且首先会保留要替换的时间线,因此恢复是可逆的,而不是另一个破坏性操作。

编辑和倒带后:

  • RAG 内存会重新协调
  • 删除的事件会被修剪
  • 保留的索引场景会被刷新
  • 固定的预览会被更新
  • 卡片触发器会重新评估
  • 受影响的摘要会存档并清除

私人日记和当前的自我撰写的公共资料外不受共享历史倒带的影响。 写故事的规范并不改变某人的私人记录或当前的自我描述。

智能完成,不会匆忙结束

回应长度仍然是正常的目标,而不是允许模型写一个整个章节或推进几个故事弧线再让我回应。

如果一个回应被真正中断,其令牌限制会收到一个单独的宽限期。 它保留了原始指示、交互框架、共享上下文、声音和未完成的语义方向。

它可以:

  • 检测不完整的句子
  • 检测不匹配的直线或弯曲引号
  • 检测未闭合的括号
  • 继续几句话,当局部想法真正需要它们时
  • 连接中词和中句的缝隙
  • 在附近的自然休息点停止
  • 不添加任何内容,如果回应已经完整
  • 回滚第二次截断修复到其最后完成的边界

它被明确指示,不要在收到额外令牌时突然添加道德、总结回应、匆忙结束论文、推进时间线或开始新场景。

视觉角色可以看到的照片

https://preview.redd.it/sti44pt2axih1.png?width=1399&format=png&auto=webp&s=707d1e686fb529db5c2b7a2f698aa7f444180134

我可以将一张照片附加到 Say、Do 或 Story 回合。

一个单独的视觉模型会检查它并产生一个详细的视觉描述。 原始图像和描述会与该故事条目一起保存为其自己的故事卡,因此未来的回合可以重用现有的视觉而不必为重复的视觉调用支付。

每张共享照片都变成了一个可编辑的照片 Story 卡:

  • 重命名它
  • 更改其触发器
  • 通过世界史回忆它
  • 保留保存的视觉描述
  • 删除关联的图像

主要的语言模型和视觉模型不需要来自同一提供商。 在我的当前配置中,DeepSeek 处理语言,而 Grok 提供可选的“眼睛”。

私人角色日记(内心)

https://preview.redd.it/m3q0u91saxih1.png?width=1058&format=png&auto=webp&s=a0d47f26ff5b46fa8b3270447bbd1d8fa374d4a6

这是这个项目超越成为 AI 宫殿克隆的部分。

合格的角色卡片可以获得加密的私人日记。 没有 查看日记 按钮。

普通界面、 episodic RAG、故事摘要和上下文预览无法显示或索引日记文本。在私人日记会话期间,应用程序会解密相关材料,然后将其再次加密。

角色可以:

  • 读私人日记
  • 写私人日记
  • 回顾和清洁与日记相似的场景
  • 拒绝
  • 延迟
  • 保持沉默
  • 不分享

在私人会话结束后,角色可以选择:

  • 保留私人状态
  • 允许一个小部分进入共享故事作为可见的紫色桥梁

真实桥梁条目在故事日志中包含了专门的元数据。 紫色听起来的叙述在普通回应中生成的不是被视为私人穿越的。 系统信任基础设施收据,而不是戏剧性叙述。

多角色日记使用支持,具有每日自我启动预算和无限的守护提供者。

系统也可以识别普通叙述的日记行为—例如角色被递交一本日记并开始写作—而不需要可见的命令标签。 它包含了防止错误触发器的保护措施,例如仅凝视一本日记,抚摸其封面,讨论基础设施或说“不现在”。

私人连续性,不会泄露日记叙述

https://preview.redd.it/a8k4loyvaxih1.png?width=1047&format=png&auto=webp&s=cb0338df217883dc87a0955337c06ed660ef6e89

成功的私人会话可以产生两个加密的派生层:

  • 最新内心脉冲
  • 早期、中期、最新内心弧

这些可以在未将完整的日记条目放入共享故事上下文或显示给我的情况下影响未来交互。

界面仅显示安全元数据,例如条目或弧是否存在、使用预算、时间戳和完整性状态。 它不会显示其内容。

为了完全透明:我拥有计算机,加密密钥必然存在于系统本地。 这部分是技术边界,部分是承诺。

加密既是实用的保护,又是架构陈述,边界存在。

自我撰写的公共资料

角色具有内心启用可以回顾其自己的公共 Story 卡。

他们会收到当前的卡片并可以选择:

  • 保持 它保持不变
  • 修订
  • 重写

自我撰写的卡片会呈现在未来的回合中作为一个日期、可更改的快照—而不是不可变的性格命令。 参与者可以不同意它、重新解释它或超越它。

这些控件始终可见给模型,但它们的使用是可选的。 没有声音、拒绝、不确定、修订和改变是有效的结果。

隐私和所有权

每个故事都是一个包含可理解组件的文件夹:

  • 开场白
  • 共享 JSONL 历史
  • 情节设置
  • 模型设置
  • 故事卡
  • 摘要状态
  • 矢量内存
  • 媒体
  • 可选的加密角色内心文件
  • 可恢复的时间线分支

我可以备份整个应用程序或只备份故事。 我的备份会保存在一个大外部驱动器上,受我控制。

API 密钥会保存在本地被忽略的 .env 文件中,而不是在故事数据中。

最重要的是,改变模型或提供商不会要求放弃周围的连续性架构。 历史、卡片、摘要、向量、时间线、资料和加密记录仍然属于我。

模型和 API 自由

应用程序不被锁定在一个模型公司上。

我的当前设置使用 DeepSeek,因为我喜欢它的价格和功能,但 API 和模型层可以独立于房子中的其他部分改变。

这意味着我可以尝试:

  • 不同的 OpenRouter 模型
  • 直接提供商 API
  • 可以与 OpenAI 兼容的端点
  • 分离的语言和视觉提供商
  • 未来的本地模型端点
  • 不同的模型以不同的成本或风格

基础设施旨在在子系统变化时保留连续性,而不是将提供商更改视为整个故事或关系的死亡。

每个故事的控件包括:

  • 回应长度
  • 智能完成缓冲区
  • 温度
  • Top K
  • Top P
  • 出现惩罚
  • 频率惩罚
  • 上下文预算
  • 思考模式
  • 显示完成模式
  • 自动摘要设置
  • 故事卡激活设置
  • RAG 设置
  • 故事优先 / 开放互动框架

我花了多少钱

在我的当前 DeepSeek/OpenRouter 配置下,我的个人重度使用通常被估计为大约 3-15 美元/月,尽管这取决于模型选择、上下文大小、视觉使用和活动。

使用不同的 API 或模型会自然改变成本。

这替换了一个接近 100 美元/月的订阅,而给我了更多的控制和本地所有权。

这不是什么

这个是当前一个深度个人、Windows-定向的构建,而不是一个商业发布。

它不包括:

  • 集成社区场景市场或浏览器—尽管导出的 AI 宫殿场景可以导入
  • 内置图像生成
  • 为任意系统的打包安装程序

它也没有提供访问没有公有 API 的专有模型的魔法。 然而,它并不是与 DeepSeek 或任何单一提供商绑定。

为什么我要分享这个

我认为交互式小说系统可以比可抛弃的文本生成器更为复杂。

当前的构建具有 240 个自动检查,以及手动测试和外部驱动备份。 我仍在学习,仍在发现奇怪的边缘情况,仍在通过实际的故事和对话来改进它。

我想分享这个是因为我不知道有这样的事情可能是可能的时开始。

看起来它是。

我会很乐意获得任何批评或建议。