我做了两个工具,一个 7MB 的壳,一个会记住的壳

前言

你和 ChatGPT 聊了两个小时,终于把一个问题理清楚了。

关掉窗口,满意地去睡觉。

有一天突然想起找回来。滚动历史列表,全是自动生成的模糊标题。

搜关键词,答非所问。

半小时后,你放弃了------那段灵光,就这样消失在几百条对话的海里。

这不是最糟的。

更糟的是:账号被封了(点名 A 社)------ 那些沉淀了你大量的对话,永远消失了。

我是多 AI 重度用户。

ChatGPT、Claude、Gemini、DeepSeek,同时开好几个,重要问题会交叉验证。

这个工作流有个越来越明显的摩擦:对话数据散落在各家公司的服务器上,我没有副本,没有索引,没有导出。

为了解决这个问题,我做了两个工具。

第一个叫 anyChat,是一个 7MB 的多 AI 聚合壳------把所有 AI 网页装进一个窗口里,键盘切换,干净利落。它解决的是"切换"的问题。

第二个叫 AmberKeeper,是一个会"记住"的壳------在你正常聊天的同时,静默地把每一轮对话落到你自己的电脑上。它解决的是"留住"的问题。

它们不是替代关系,是互补的。

一、anyChat:7MB 的壳

anyChat 是我在 2025 年做的第一个工具,基于 Tauri 2 + React 19,macOS 安装包只有 7MB

当时频繁使用各家模型,同时配合 claude code 之类的 agent 工具回答一些简单的问题。

为什么做这个

在浏览器里同时用多个 AI 不是很方便:

一堆标签页都开着,来回切换不方便:GPT 作为常规使用,gemini 生图,国内一些模型翻译和 OCR 还有其他等等

我需要一个独立的、干净的入口,把所有 AI 聚在一起,低干扰。

为什么是 Tauri

当时也考虑过 Electron,但 Electron 必须打包一个完整的 Chromium 内核,安装包 80-150MB,启动也慢。

我这时的想法是方便使用、追求轻量、低内存占用,不满足这些条件,那就和在浏览器中使用也没区别了。

Tauri 的思路不同------它用操作系统自带的 WebView(macOS 上是 WKWebView,Windows 上是 WebView2),只打包前端代码和一个小的 Rust 宿主程序,结果就是 7MB。代价是:你没有"自己的浏览器内核",只能依赖系统 WebView 的能力。但对这个需求来说,完全够用。

iframe 为什么不行

直觉上,嵌入 AI 网页用 iframe 不就行了?

不行。

各家 AI 站点都设置了 X-Frame-Options: SAMEORIGIN 或 CSP 安全策略,iframe 嵌入会被浏览器直接拒绝。

正确的方式是原生多 WebView:在主窗口内创建多个独立的 WebView 实例,每个加载一个 AI 站点,通过显示/隐藏来模拟标签页。每个实例有独立的 session,登录态互不干扰。

它的边界

anyChat 现在支持 12 个内建 AI 服务,用户也可以自定义添加。我自己用了将近半年,日常多 AI 切换完全满足。

但它有一个做不到的事情:它记不住你的对话。聊天结束,对话就留在那家公司的服务器上了。

这个"记不住",用了几个月之后,从痒变成了痛。

二、从壳到记忆:痛点的演变

痛点具体有四个:

散落

ChatGPT 的历史在 ChatGPT,Claude 的历史在 Claude。想找一个话题之前和哪个 AI 聊过,只能逐个去翻。

脆弱

OpenAI 封号不是新鲜事,几百小时的对话史一夜清零。产品停服、被收购、下线------你的数据怎么办?

不可带走

各家对数据导出的支持参差不齐,即便有也是一次性手动操作,不是持续备份。

沉没的价值

和 AI 的深聊不是消遣,是你真实的思考过程------你提出的问题、推翻的假设、最终的结论。这些东西是你的,但你拿不走。

我想到的解法:在聊天的同时,把每一轮对话实时、静默、自动地落到本地。用户体验不变,照常在官方网页聊,但数据同步沉淀在自己的电脑上。

然后我去 anyChat 里试了试。

三、Tauri 上能做到吗?

试过,放弃了。

Tauri 的系统 WebView 没有 Electron 那样的请求拦截 API,也没有 Chrome DevTools Protocol(CDP)这种调试器级别的能力,你能做的只有在页面里注入 JavaScript。

我试过注入 fetch hook 拦截网络请求,但 AI 站点的 CSP 和同源策略处处设防。方案越做越复杂------注入脚本、本地 HTTP 中继、自定义协议接收器------每一段都是临时补丁,整体维护成本极高。而且各家 AI 站点的前端一改,采集逻辑就可能失效。

结论很清晰:Tauri 缺一个稳定的"响应体级请求拦截"能力。 系统 WebView 没有提供这个原语,靠注入 JS 补不了。

要么接受这个边界,要么换工具。

我选了换工具。

anyChat 回归了它本来的定位------一个轻量、干净的多 AI 切换壳。

四、AmberKeeper:会记住的壳

AmberKeeper 是独立于 anyChat 的 Electron 应用。

不夸 Electron------安装包 80-150MB,比 anyChat 大了 20 倍。接受这个代价,是因为 Electron 给了两个 Tauri 给不了的能力:

  1. WebContentsView:基于完整 Chromium 内核的多实例嵌入
  2. CDP(Chrome DevTools Protocol):调试器级别的网络拦截

CDP 才是关键

这里值得多说几句,因为这是 AmberKeeper 在技术上最核心的设计决策。

浏览器开发者工具里的网络面板,背后就是 CDP。

它能看到浏览器发出的每一个请求、收到的每一个响应------包括完整的响应体。

Electron 提供了 webContents.debugger.attach API,允许程序直接 attach 到某个页面的调试器上,监听这些事件。

关键在于:CDP 是浏览器内核层的能力,完全不受页面 CSP 的限制。 页面的 CSP 是告诉"这个页面能加载什么资源",不是告诉"调试器能看什么"。调试器有更高的权限层级。

用一个类比:CSP 相当于房间的窗帘------它能挡住外面人的视线,但挡不住持有钥匙的管理员。

CDP 就是那把钥匙。

这意味着:不需要在页面里注入任何 hook,不需要绕任何 CSP,不会随 AI 站点的前端改动而失效。只要它的 API 接口没变,采集就一直有效。

多 WebView 架构

每个 AI 对应一个独立的 WebContentsView,各自有独立的 session partition(可以理解为独立的 cookie 空间)。

ChatGPT 的登录态不会和 Claude 相互影响。

partition 的命名沿用了 anyChat 的旧格式------从 anyChat 迁移过来的用户不需要重新登录每个 AI 站点,登录态自动继承。

切换 AI 时不会销毁和重建 view,保证了快捷的即时切换。

数据落库

捕获到的对话最终落到本地 SQLite,三层结构:

  • 业务层:对话元数据 + 每条消息,基于内容哈希自动去重
  • 证据层:原始事件 payload,用于调试和回放------如果某个 AI 站点的适配有 bug,可以用历史数据在本地重跑解析
  • 诊断层:记录每次采集尝试的结果,包括失败的------这样你能知道"这段对话没被采集到,是为什么"

数据导出支持 JSON(程序处理)和 Markdown(阅读检索)两种格式。

AmberKeeper 没有云同步,也没有计划做。 这是 local-first 的刻意选择------你的对话在你自己的硬盘上,不在任何人的服务器上。

9 个 AI,9 个独立适配

AmberKeeper 内建支持 9 个 AI 站点,每个站点对应一个独立的适配包------只负责一件事:把这个 AI 的网络数据翻译成统一的对话格式。它不碰 Electron,不碰数据库,只做翻译。

好处是隔离。ChatGPT 改了接口,只更新 ChatGPT 的包,其他 8 个完全不受影响。

后续如果考虑新增其他模型 chat,也是非常方便,只需要适配该 chat 的 provider 即可。

五、两者关系与取舍

它们不是替代关系,是互补的。

anyChat AmberKeeper
定位 多 AI 聚合壳 多 AI 聚合 + 数据采集
体积 ~7MB 80-150MB
框架 Tauri Electron
数据采集 有,本地 SQLite
适合谁 只想在一个窗口切 AI 的人 想把对话留在自己手里的人

什么时候用 anyChat? 你只是想在一个窗口里切换几个 AI 网站,不需要数据采集,那 7MB 的壳就是正确选择。

什么时候用 AmberKeeper? 你和 AI 的对话里有值得沉淀的东西------思考过程、决策记录、灵感火花------你希望它们留在自己手里,那 20 倍的体积代价是值得的。

结语

Amber 是树脂的结晶。一滴松脂偶然落下,裹住一片叶子,在地底沉睡千万年,挖出来时依然晶莹剔透。

Keeper 是留存的人,守住那些本来会流走的东西。

我们和 AI 的每次深聊,本来都会随风消散。这个工具想做的,就是像松脂落下一样,静静地,把它们封住。

项目地址

AmberKeeper(Electron,本地优先,带数据采集)

anyChat(Tauri,~7MB,轻量多 AI 切换)

如果觉得有用,欢迎 Star 或在 GitHub Issues 里反馈。

相关推荐
不瘦80斤不改名1 小时前
HTML基础(一)
开发语言·前端·html
UXbot1 小时前
AI画原型工具如何帮非设计师快速生成UI界面
前端·vue.js·ui·kotlin·swift·原型模式·web app
前端若水1 小时前
原生嵌套(Nesting):以后还写 SCSS 吗?
前端·css·scss
兄弟加油,别颓废了。2 小时前
系统全功能详细操作手册,从启动到测试
前端·chrome
ZC跨境爬虫2 小时前
跟着 MDN 学 HTML day_32:(AbstractRange 抽象接口与 DOM 范围操作)
前端·javascript·ui·html·音视频
十子木2 小时前
设置把所有终端移动到最前端的快捷键
前端
陈老老老板2 小时前
Bright Data Web Scraping 实战:用 MCP + Dify 构建 eBay 商品详情采集 AI 工作流(2026)
前端·人工智能
一渊之隔2 小时前
uniapp蓝牙搜索连接展示蓝牙设备包含信号显示
前端·网络·uni-app·bluetooth
Cisyam^2 小时前
Bright Data Web Scraper 实战:构建 TikTok 与 LinkedIn Web Scraping 自动化 Skill(2026)
运维·前端·自动化