仓库地址:https://github.com/diernn/WebAI-Vault/
WebAI Vault 是一个面向 AI 网页产品的会话导出、本地化归档与多帐号阅读系统。
当前版本优先实现 ChatGPT 网页端适配,但项目边界不是“ChatGPT 导出器”。核心目标是把不同 AI 网页产品中的会话、图片、附件和后续本地补充内容,整理成可长期保存、可搜索、可阅读、可继续处理的本地知识资产。后续可以通过新增网页适配器支持 Claude、Gemini、DeepSeek、Kimi、通用 OpenAI-compatible 聊天记录等来源。
AI 平台里的会话不是天然属于本地数据。帐号风控、误封、平台策略调整、产品下线、接口变更、模型侧历史清理,都可能让用户突然失去访问历史记录、图片生成结果和附件的能力。WebAI Vault 的目标是把这些高价值数据从平台托管状态转为本地可控、云端可备份、跨帐号可阅读的长期资产。
对个人用户和团队来说,当前最可落地的保护方式是:在 AI 网页端复用已有登录态抓取数据,定期生成结构化备份,并同步到自己控制的本地目录或 OSS/COS 云存储。这样即使平台帐号出现异常,已有数据仍然可检索、可阅读、可迁移、可继续二次处理。
- ChatGPT 网页端会话导出:个人空间、团队空间、项目内会话、项目外会话。
- 本地 JSON 导出包:每个导出包保留原始会话 JSON、Markdown 文本和资源索引。
- 云端备份:支持阿里云 OSS、腾讯云 COS,使用 Userscript 端 Web Crypto 签名和
GM_xmlhttpRequest上传。 - 自动备份:按每日次数上限计算间隔,例如每日 3 次即每 8 小时检查一次。
- 备份范围:支持全量备份和增量备份;增量按最近 24 小时内更新的会话筛选。
- 版本化文件名:手动备份和自动备份共用同一命名规则和递增版本序号。
- 云端备份历史:记录备份类型、空间、帐号、批次、路径、云服务商和图片资源统计。
- 图片与附件资源处理:识别 ChatGPT
image_asset_pointer、文件指针和附件下载链接,尽量抓取二进制资源。 - 云端图片保存:可将已抓取的图片资源上传到 OSS/COS,并把云端 URL 写回导出 JSON 的 metadata。
- 资源去重:基于 SHA-256 hash 对重复资源去重,避免同一图片或附件重复上传。
- 本地帐号库:从多个备份文件中按平台和帐号聚合会话,而不是按历史备份文件逐个阅读。
- 会话合并:相同会话会按更新时间合并,同时保留用户在本地阅读器中追加的对话节点。
- 本地阅读器:浏览、搜索、阅读、续聊、执行快捷提示词、渲染 Markdown、展示图片资源。
- OpenAI-compatible 模型代理:本地服务代理
/chat/completions,支持 SSE 流式和 JSON 一次性响应。 - 云端图片签名访问:阅读器可基于本地云存储配置为 OSS/COS 图片 URL 生成临时读取签名。
.
├── data/
│ ├── backup/ai/chatgpt-export/ # 原始导出 JSON 备份目录
│ └── localized/ # 聚合后的本地帐号库和系统设置
├── html/
│ ├── index.html # 本地阅读器页面
│ ├── server.js # 本地 API、帐号库构建、LLM 代理、云端 URL 签名
│ ├── css/app.css # 阅读器样式
│ ├── js/ # 前端模块
│ ├── promts/ # 快捷提示词模板
│ └── tests/ # 阅读器测试
└── scripts/
├── chatgpt-exporter-enhanced.js # ChatGPT Userscript 导出适配器
└── chatgpt-exporter-enhanced.test.js
第一次使用建议按下面顺序操作。不要先启动阅读器找数据;本地阅读器只读取已经导出的 JSON 备份。
安装 Tampermonkey、Violentmonkey 或同类 Userscript 管理器。下面以 Tampermonkey 为例。
安装完成后,在浏览器扩展管理页确认 Tampermonkey 已启用。
- 打开 Tampermonkey 管理面板。
- 新建脚本。
- 删除默认模板内容。
- 粘贴
scripts/chatgpt-exporter-enhanced.js的完整内容。 - 保存脚本。
脚本当前声明的匹配范围:
https://chatgpt.com/*
https://chat.openai.com/*
油猴或浏览器默认可能不会给脚本执行权限,需要检查两层设置:
- 浏览器扩展权限:进入 Tampermonkey 的扩展详情页,将“站点访问权限”设置为允许访问
chatgpt.com、chat.openai.com,或允许访问所有网站。 - Userscript 权限:确认脚本处于启用状态,且脚本头部保留
@grant GM_xmlhttpRequest、@grant GM_setValue、@grant GM_getValue、@connect *。
如果脚本没有执行权限,刷新 ChatGPT 页面后不会出现导出入口。
如果要适配其他 AI 网页,需要新增对应平台的 Userscript 适配器,复用导出包结构和本地阅读器聚合逻辑。
导出脚本在 ChatGPT 网页中提供导出、云存储配置和云端备份历史入口:
- 打开
https://chatgpt.com/。 - 刷新页面。
- 页面右下角出现 WebAI Vault / Export Conversations 导出入口。
- 打开导出弹窗里的“云存储配置(OSS / COS)”。
- 填写云服务商、AccessKey ID、AccessKey Secret、Bucket、Region、Endpoint 和存储路径前缀。
- 点击“测试连接”。
测试连接通过后,说明浏览器脚本可以和 OSS/COS 通信。若测试失败,优先检查:
- Bucket、Region、Endpoint 是否匹配。
- AK/SK 是否有目标路径写入权限。
- OSS/COS CORS 是否允许
PUT、GET、OPTIONS。 - CORS 是否允许
Authorization、Content-Type,OSS 还需要允许Date。
正式批量备份前,先打开任意一个具体对话页面,执行当前对话导出测试。
推荐先测试“当前对话云端图片版 JSON 导出”:
- 成功后,浏览器会下载一份当前对话 JSON。
- 如果该会话包含生图或附件,脚本会尝试把图片/附件上传到 OSS/COS,并把云端资源 URL 写回 JSON。
- 控制台会输出资源发现、下载、上传的调试信息。
如果单页面导出失败,先不要跑全量备份。应先根据控制台错误修复登录态、云端配置、CORS 或资源下载权限。
单页面导出测试通过后,再执行个人空间或团队空间导出。
手动导出会下载一个 JSON 文件,文件名类似:
06-01-chatgpt_personal_backup_user_at_example.com-4.json
将下载得到的 JSON 放到本地阅读器的数据目录:
data/backup/ai/chatgpt-export/
如果目录不存在,先创建:
New-Item -ItemType Directory -Force "data/backup/ai/chatgpt-export"说明:
- 手动备份会下载本地 JSON,并在云端配置完整时同步上传云端。
- 自动备份只上传云端,不在 ChatGPT 网页端下载本地文件。
- 本地阅读器已支持云端自动同步:只要在阅读器“系统设置 → 云存储配置”中填好 OSS/COS,打开或刷新阅读器时会自动拉取云端 JSON 到
data/backup/ai/chatgpt-export/并整合帐号库。 - 手动把 JSON 放入目录仍然可用,主要用于离线场景或云端配置不可用时的兜底。
在项目根目录执行:
node "html/server.js"默认访问:
http://localhost:8787
修改端口:
$env:PORT=8788
node "html/server.js"如果端口已占用,说明可能已有阅读器服务在运行。可以直接访问当前端口,或换端口启动新实例。
启动后,本地服务会在读取帐号列表时尝试执行一次云端同步:
- 使用“系统设置 → 云存储配置”中当前启用的 OSS/COS 配置。
- 默认扫描云端
backup/ai/chatgpt-export/前缀下的.json备份。 - 云端 JSON 会下载到本地
data/backup/ai/chatgpt-export/,并复用现有帐号库聚合逻辑自动整合。 - 本地已存在且大小一致的 JSON 会跳过,避免重复下载。
- 60 秒内重复刷新会复用同步缓存,避免每次刷新都扫描云端。
- 云端同步失败不会阻塞本地阅读,页面会显示提示,并继续读取已有本地数据。
打开本地阅读器后:
- 选择平台 / 帐号本地库。
- 搜索或打开历史会话。
- 查看 Markdown、代码块、联网引用、生图结果和附件资源。
- 在系统设置中配置 OpenAI-compatible 模型服务。
- 使用快捷提示词对当前会话执行总结、改写、文章生成等二次处理。
- 继续对话,本地新增内容会写回本地帐号库,并在后续聚合云端备份时保留。
WebAI Vault 区分三类数据:
- 原始导出包:位于
data/backup/ai/chatgpt-export/,保存从网页端导出的 JSON 包。 - 本地帐号库:位于
data/localized/{platform}/{account}.json,由阅读器服务从多个导出包聚合生成。 - 云端资源:位于 OSS/COS,保存 JSON 备份包和可选的图片/附件资源。
手动备份与自动备份的区别:
- 手动备份会下载一份本地 JSON 文件;如果云存储配置完整,会同时同步一份云端备份。
- 自动备份只上传云端,不下载本地文件。
- 本地阅读器会把云端 JSON 自动同步回本地原始导出目录,再参与帐号库聚合。
- 自动备份按
24 / dailyLimit小时滚动检查,不会在同一小时内连续补传多份。 - 手动和自动使用同一文件命名规则与版本序号,避免本地文件和云端对象命名不一致。
云端 JSON 路径格式:
backup/ai/chatgpt-export/{year}/{MM-DD}-{backup-name}-{version}.json
示例:
backup/ai/chatgpt-export/2026/06-01-chatgpt_personal_backup_user_at_example.com-4.json
图片和附件资源会保存到同一备份目录下的 assets/ 子目录,例如:
backup/ai/chatgpt-export/2026/assets/images/{hash}-{name}.png
backup/ai/chatgpt-export/2026/assets/files/{hash}-{name}.pdf
实际路径以导出脚本写入的 metadata.local_export 为准。
云存储配置里可选择:
- 增量备份:默认选项。只导出最近 24 小时内更新过的会话。
- 全量备份:导出当前帐号/空间下可遍历到的全部会话。
更新时间以 ChatGPT 列表接口中的最后更新时间为准。若某个平台后续接入时没有稳定更新时间,需要由该平台适配器补齐等价字段。
导出脚本会尝试识别并保存:
- ChatGPT 生图结果中的
image_asset_pointer - 消息 metadata 中的附件
- 可下载文件链接
download_url、asset_pointer_link、watermarked_asset_pointer等资源地址
资源处理策略:
- 能拿到二进制时,写入
metadata.local_export。 - 云存储可用时,优先把图片和附件上传到 OSS/COS,并记录
cloud_image_url或asset_url。 - 本地嵌入模式会把资源保存为导出包内的
.data-url.txt。 - 同一资源重复出现时,按 SHA-256 hash 去重。
- 抓取失败时,会记录
fetch_errors,用于定位是权限、接口、网络还是资源已失效。
限制:
sediment://...、file-service://...这类指针本身不是可直接访问 URL。- 如果 ChatGPT 当前接口没有返回可下载地址,或者登录态无权访问资源,旧 JSON 无法还原真实图片。
- 云端历史中的“发现 / 抓取 / 上传”统计用于判断资源处理卡在哪一步。
阅读器启动后会扫描:
data/backup/ai/chatgpt-export/**/*.json
然后按导出文件名解析平台、帐号和 workspace,并生成本地帐号库。阅读器展示的是聚合后的帐号库,而不是单个历史备份文件。
主要功能:
- 按平台和帐号选择会话库。
- 搜索会话标题和预览内容。
- 展示用户、助手、工具图片消息。
- Markdown 渲染:标题、列表、表格、引用、分割线、代码块。
- 过滤不可见系统消息和思考占位文本。
- 右侧会话快捷导航。
- 记住上次阅读位置。
- 代码块一键复制。
- 展示本地导出图片、云端图片和图片指针占位。
- 基于当前会话继续对话,并把新增内容写回本地帐号库。
单张生图会以媒体卡片形式展示,优先使用本地导出资源或已签名的云端图片 URL:
多张生图会按网格展示;输入框上方的快捷提示词按钮可对当前会话执行总结、改写、文章生成等二次处理:
本地续聊写回策略:
- 新增消息会标记为本地阅读器来源。
- 后续重新聚合云端备份时,不会覆盖本地追加的聊天节点。
- 如果云端会话标题或更新时间更新,会合并云端较新的基础信息,同时保留本地新增内容。
点击阅读器右上角系统设置,可配置:
- 模型响应模式:SSE 流式或 JSON 一次性。
- Base URL:OpenAI-compatible API 地址。
- API Key。
- Model。
- 云存储读取配置:OSS/COS、AK/SK、Bucket、Region、Endpoint、签名有效期。
- 快捷提示词模板。
说明:
- 浏览器前端不会直接请求第三方模型。
- 所有模型请求由
html/server.js代理,降低 CORS 和密钥暴露问题。 - 只要模型服务兼容
/chat/completions,理论上都可以接入。 - 系统设置保存到
data/localized/system-settings.json。
快捷提示词目录:
html/promts/
当前内置:
summary.md:一键总结wechat_article.md:公众号文章编写
新增模板:
html/promts/my_prompt.md
刷新页面后,模板会出现在输入框上方的快捷按钮区域。执行快捷提示词时,阅读器会把当前会话上下文和提示词一起发送给模型,并把模型回复写回当前本地帐号库。
导出脚本端用于上传,阅读器端用于签名读取。两端都需要配置同一套 OSS/COS 信息。
OSS CORS 建议允许:
Origin: *
Methods: PUT, GET, OPTIONS
Headers: Authorization, Content-Type, Date
COS CORS 建议允许:
Origin: *
Methods: PUT, GET, OPTIONS
Headers: Authorization, Content-Type
最小权限建议:
- 导出脚本:目标前缀下的
PutObject。 - 阅读器:目标前缀下的读取签名能力。
如对外开源,建议明确提示用户不要把 AK/SK 提交到仓库。
导出脚本测试:
node "scripts/chatgpt-exporter-enhanced.test.js"
node --check "scripts/chatgpt-exporter-enhanced.js"阅读器测试:
node "html/tests/server.test.js"
node "html/tests/markdown.test.js"
node "html/tests/modal.test.js"
node "html/tests/thread-nav.test.js"
node --check "html/server.js"
node --check "html/js/app.js"
node --check "html/js/api.js"
node --check "html/js/chat.js"
node --check "html/js/markdown.js"
node --check "html/js/modal.js"
node --check "html/js/settings.js"
node --check "html/js/state.js"新增平台时建议保持三层边界:
-
网页适配器
- 负责登录态复用、接口遍历、会话详情抓取、资源下载。
- 输出 WebAI Vault 兼容的导出 JSON 包。
-
身份解析器
- 从文件名或 manifest 中解析
platform、account、workspaceId。 - 决定多个备份文件如何归并到同一个本地帐号库。
- 从文件名或 manifest 中解析
-
会话解析器
- 把平台私有消息结构转换为阅读器可展示的消息、媒体、引用和时间字段。
- 保留原始 JSON,避免破坏后续重新解析能力。
当前 ChatGPT 适配器可以作为第一份参考实现。
确认导出 JSON 位于:
data/backup/ai/chatgpt-export/
然后重启本地服务:
node "html/server.js"先看历史统计:
图片:发现 N 张,抓取 M 张,上传 K 张
发现 > 0,抓取 = 0:脚本识别到图片指针,但没有拿到图片二进制。查看 JSON 中的metadata.local_export.fetch_errors。抓取 > 0,上传 = 0:通常是 OSS/COS 上传失败,检查 CORS、权限、Bucket、Region、Endpoint。发现 = 0:当前导出的会话里没有可识别的图片或附件资源。
检查:
- Bucket 和 Region 是否匹配。
- Endpoint 是否包含 bucket。
- AK/SK 是否有目标前缀权限。
- CORS 是否允许
Authorization和Content-Type。
COS 签名使用 XML API 的 HMAC-SHA1 规则;如果仍失败,优先检查配置而不是改签名代码。
确认系统设置里的响应模式为:
SSE 流式
如果模型服务不支持 OpenAI-compatible SSE,可切换为 JSON 一次性。
不会直接覆盖。阅读器合并同一会话时会保留 local_html_reader 来源的本地追加节点。
- 当前网页导出适配器只正式覆盖 ChatGPT。
- ChatGPT 私有接口可能变动,资源下载候选地址需要持续维护。
- 旧备份里如果只有不可访问资源指针,无法离线恢复真实图片或附件。
- 本地阅读器当前是 Node 原生 HTTP 服务,不包含用户认证;默认用于个人本机环境。
html/promts/目录名沿用现有拼写,后续如改名需要同步代码引用。
- 移除或清理真实个人导出数据。
- 在
.gitignore中保持data/backup/、data/localized/不入库。 - 提供脱敏示例数据或最小 fixture。
- 补充贡献指南,明确新平台适配器的数据契约。
WebAI Vault 的 ChatGPT 网页导出适配器早期参考了 huhusmang/ChatGPT-Exporter 的 Userscript 注入和 ChatGPT 会话导出思路。当前项目已重构为面向多 AI 网页、本地多帐号阅读、云端备份、图片/附件资源保存和本地续聊合并的独立系统。
当前 Userscript 头部声明为 MIT。正式开源前建议在仓库根目录补充 LICENSE 文件。



