爱意满满的作品展示区。
davirain
0.67D

Empty · 空:一个尊重剧情边界的 AI 阅读伴侣

  •  
  •   davirain ·
    DaviRain-Su · 7h 1m ago · 338 views

    Empty · 空:一个尊重剧情边界的 AI 阅读伴侣

    空是底,朱是点 —— 应用是空房间,AI 是页边那一笔朱批。

    你有没有过这样的经历:读到一本厚厚的英文小说,想用 AI 帮忙"回顾一下前面讲了什么",结果它一句"主角最终和某某走到了一起"——直接剧透了结局。又或者你想让 AI 翻译某一段,它却把整章情节都给你概括了。

    市面上的 AI 阅读工具,大多默认"读取整本书再总结"。对一个还没读完的读者来说,这种"全知视角"本身就是剧透。

    Empty (空) 就是想解决这件事。它是一个开源、原生 SwiftUI 的 EPUB & PDF 阅读器,内置一个"朱"——一个只在你已经读过的文本范围内工作的 AI 伴读。


    一、它到底解决了什么问题

    把 Empty 的设计目标拆开看,其实只有三句话:

    1. 不剧透。AI 不能看到你还没读到的内容——不是靠 prompt 提醒,而是在数据层就过滤掉。
    2. 本地优先。书、笔记、高亮、词汇、跨书记忆,默认全部留在你的设备上;云端 AI 是可选项。
    3. 深读而不是浅读。不止于"给我摘要",还要帮你记词汇、做闪卡、发现跨书主题,把读过的东西真正消化掉。

    这三点决定了 Empty 的很多细节:它用 utf16Offset 记录"你读到第几个字符",从而精确知道哪些内容已经被你读过;它默认走 Apple Foundation Models 的本地推理,云端是 BYOK (自带密钥)的可选模式;它在 Mac 上是一个完整的"深读工作台",在 iPhone / iPad 上是一个轻量口袋伴侣。


    二、防剧透:不是 prompt 工程的功劳

    这是 Empty 和其他 AI 阅读工具最大的区别,值得单独说清楚。

    很多产品会说"我们做了防剧透"——但仔细看实现,其实是在 prompt 里加了一句"请不要透露后面的情节"。这种做法很脆:换个模型、换个问法,就破了。

    Empty 的做法是在数据层做硬过滤。它知道:

    • 你当前这本书读到了哪个字符位置(utf16Offset 精确到字符)。
    • 你读过的章节里有哪些段落。
    • 你跨书的高亮和笔记里提到了哪些概念。

    然后所有 AI 功能——章节回顾、解释、翻译、词汇推荐、思维链接、阅读 Agent 的工具调用——都只能看到"你已经读过的那部分内容"。没读到的内容,AI 根本看不到,prompt 写崩了也漏不出来。

    这种"从源头堵住"的设计,让防剧透这件事从"模型自觉"变成了"系统保证"。


    三、朱 · AI 伴读都做了什么

    Empty 的 AI 名字叫"朱"(取自中文古典阅读里"朱批"的意象——书页空白处那一笔红色的批注)。它会做的事情不少:

    • 章节回顾:生成"Previously on…"式的剧情回顾,并标注"← 你在这里",让你随时知道在故事里的位置。
    • 段落级翻译 / 导读 / 辩论 / 引用:Mac 上是并排双语面板,iOS 上是段落透镜。预翻译并缓存,原文先渲染、绝不阻塞阅读。
    • 朱 · 阅读 Agent:一个会自主调度阅读工具的对话伴侣——搜索已读文本、回顾、解释、找关联、推荐词汇、起草闪卡。所有写操作都需要你确认;失败时回落到有依据的 Q&A 。
    • 词汇查询:一键查词,并自动安排间隔复习。
    • 思维链接:在你的高亮之间发现主题呼应,生成"链接卡片"。
    • **图书馆"继续阅读"**:在你回到某本书时,给一段无剧透回顾 + 预计剩余阅读时间。

    这些功能背后,AI 提供商可以二选一:

    模式 说明
    本地(默认) Apple Foundation Models ,免费、私密、离线可用
    云端( BYOK ) OpenAI 兼容( DeepSeek 预设)或 Anthropic 兼容( Kimi Code 预设);密钥存 Keychain

    AI 诊断面板里可以切换提供商、跑连通性测试。


    四、原生阅读引擎:为什么 EPUB 不走 WebView

    很多 EPUB 阅读器会用一个 WebView 直接渲染 HTML ,省事但是牺牲了精度。Empty 走了一条更累的路:

    • EPUB 被解析成原生的 SwiftUI 块模型(标题、段落、引用、列表、表格、脚注、图片),不经过 WebView
    • 高亮和笔记用 UTF-16 锚定加上上下文消歧,点击高亮可以精确跳回原文位置。
    • 支持段落内词级选择跨段落全章选择
    • 阅读进度精确到字符级,下次能从段落中间继续。

    PDF 则走 PDFKit ,支持分页和高亮标注。

    好处是:所有交互都是原生的——选择、滚动、高亮、动画——没有 WebView 的"夹层"感。代价是工程量更大,但读起来是真的丝滑。


    五、不只是"读",还要"记住"

    读得多的人会知道,光读没用,得消化。Empty 在 Mac 上提供了一整套学习工具:

    • 笔记界面:高亮卡片 + Q&A / 链接 / 复习卡片,卡片内即可跑间隔复习,还能展开一个知识图谱。
    • 词汇界面:艾宾浩斯遗忘曲线( 1 → 2 → 4 → 7 → 15 → 30 天),挖空例句,下一队列预览。
    • Text-to-Speech:macOS 上可以听书。
    • ReaderMemory:跨书的阅读记忆——你高亮过的句子会被压缩成主题,下次读到相关内容时,AI 会主动把过去的高亮"召回"给你。

    .empty-notes 包可以导出 / 导入你的所有阅读笔记(高亮、笔记、词汇、卡片、记忆、书目元数据)。书内容本身不会被导出——这是 Empty 的隐私底线:备份只碰笔记,不碰书。


    六、平台与开源

    Empty 支持 macOS 、iOS 、iPadOS 、visionOS。Mac 是完整的四栏工作台(图书馆 / 阅读 / 笔记 / 词汇),iOS / iPad 是口袋伴侣(图书馆 / 阅读 / 卡片 + 朱 AI )。

    整个项目 MIT 协议开源,237 个单元测试在 CI 上全绿。架构上遵循"本地深读优先、备份只碰笔记"的原则。

    git clone https://github.com/DaviRain-Su/empty.git
    cd Empty
    open Empty.xcodeproj
    

    选个目标平台,Cmd + R 运行,导入 .epub.pdf 即可开始。最新 macOS .dmg 可以在 Releases 页面下载(当前未签名,首次打开在"系统设置 → 隐私与安全性"中允许即可)。


    七、写给谁

    • 喜欢深度阅读,又想用 AI 辅助但怕剧透的人。
    • 用 Apple 生态,想要一个原生本地优先离线可用的阅读器的人。
    • 在读外语书,想要段落级翻译 + 词汇间隔复习的人。
    • 想要跨书记忆主题发现的人。
    • 想把书读成笔记、把笔记读成知识的人。

    八、为什么叫"空"

    空是底,朱是点。

    应用本身是空房间——一个安静的阅读空间,没有信息流的喧嚣、没有社交分享的催促。AI 是页边那一笔朱批——在你需要的时候,在你读过的文字旁边,给你一句话、一个链接、一个提醒。

    不剧透、不越界、不喧宾夺主。这是 Empty 对所有 AI 阅读工具想提的一个反问:AI 应该做主角,还是做页边那一点朱?


    链接

    如果这个项目对你有帮助,请给一颗 ⭐️,让更多人发现它。

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2708 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 12:44 · PVG 20:44 · LAX 05:44 · JFK 08:44
    ♥ Do have faith in what you're doing.