Skip to content

diernn/WebAI-Vault

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

46 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

WebAI Vault

WebAI Vault logo

English README

仓库地址: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 备份。

1. 安装油猴

安装 Tampermonkey、Violentmonkey 或同类 Userscript 管理器。下面以 Tampermonkey 为例。

安装完成后,在浏览器扩展管理页确认 Tampermonkey 已启用。

2. 导入导出脚本并开启执行权限

  1. 打开 Tampermonkey 管理面板。
  2. 新建脚本。
  3. 删除默认模板内容。
  4. 粘贴 scripts/chatgpt-exporter-enhanced.js 的完整内容。
  5. 保存脚本。

脚本当前声明的匹配范围:

https://chatgpt.com/*
https://chat.openai.com/*

油猴或浏览器默认可能不会给脚本执行权限,需要检查两层设置:

  • 浏览器扩展权限:进入 Tampermonkey 的扩展详情页,将“站点访问权限”设置为允许访问 chatgpt.comchat.openai.com,或允许访问所有网站。
  • Userscript 权限:确认脚本处于启用状态,且脚本头部保留 @grant GM_xmlhttpRequest@grant GM_setValue@grant GM_getValue@connect *

如果脚本没有执行权限,刷新 ChatGPT 页面后不会出现导出入口。

如果要适配其他 AI 网页,需要新增对应平台的 Userscript 适配器,复用导出包结构和本地阅读器聚合逻辑。

导出脚本在 ChatGPT 网页中提供导出、云存储配置和云端备份历史入口:

ChatGPT 网页导出插件界面

3. 打开 AI 对话网页并配置云端通信

  1. 打开 https://chatgpt.com/
  2. 刷新页面。
  3. 页面右下角出现 WebAI Vault / Export Conversations 导出入口。
  4. 打开导出弹窗里的“云存储配置(OSS / COS)”。
  5. 填写云服务商、AccessKey ID、AccessKey Secret、Bucket、Region、Endpoint 和存储路径前缀。
  6. 点击“测试连接”。

测试连接通过后,说明浏览器脚本可以和 OSS/COS 通信。若测试失败,优先检查:

  • Bucket、Region、Endpoint 是否匹配。
  • AK/SK 是否有目标路径写入权限。
  • OSS/COS CORS 是否允许 PUTGETOPTIONS
  • CORS 是否允许 AuthorizationContent-Type,OSS 还需要允许 Date

4. 测试单页面导出

正式批量备份前,先打开任意一个具体对话页面,执行当前对话导出测试。

推荐先测试“当前对话云端图片版 JSON 导出”:

  • 成功后,浏览器会下载一份当前对话 JSON。
  • 如果该会话包含生图或附件,脚本会尝试把图片/附件上传到 OSS/COS,并把云端资源 URL 写回 JSON。
  • 控制台会输出资源发现、下载、上传的调试信息。

如果单页面导出失败,先不要跑全量备份。应先根据控制台错误修复登录态、云端配置、CORS 或资源下载权限。

5. 批量导出并放入本地数据目录

单页面导出测试通过后,再执行个人空间或团队空间导出。

手动导出会下载一个 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 放入目录仍然可用,主要用于离线场景或云端配置不可用时的兜底。

6. 启动本地阅读器

在项目根目录执行:

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 秒内重复刷新会复用同步缓存,避免每次刷新都扫描云端。
  • 云端同步失败不会阻塞本地阅读,页面会显示提示,并继续读取已有本地数据。

7. 打开网页并开始使用

打开本地阅读器后:

  1. 选择平台 / 帐号本地库。
  2. 搜索或打开历史会话。
  3. 查看 Markdown、代码块、联网引用、生图结果和附件资源。
  4. 在系统设置中配置 OpenAI-compatible 模型服务。
  5. 使用快捷提示词对当前会话执行总结、改写、文章生成等二次处理。
  6. 继续对话,本地新增内容会写回本地帐号库,并在后续聚合云端备份时保留。

导出与备份模型

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_urlasset_pointer_linkwatermarked_asset_pointer 等资源地址

资源处理策略:

  • 能拿到二进制时,写入 metadata.local_export
  • 云存储可用时,优先把图片和附件上传到 OSS/COS,并记录 cloud_image_urlasset_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"

面向其他 AI 网页的扩展方式

新增平台时建议保持三层边界:

  1. 网页适配器

    • 负责登录态复用、接口遍历、会话详情抓取、资源下载。
    • 输出 WebAI Vault 兼容的导出 JSON 包。
  2. 身份解析器

    • 从文件名或 manifest 中解析 platformaccountworkspaceId
    • 决定多个备份文件如何归并到同一个本地帐号库。
  3. 会话解析器

    • 把平台私有消息结构转换为阅读器可展示的消息、媒体、引用和时间字段。
    • 保留原始 JSON,避免破坏后续重新解析能力。

当前 ChatGPT 适配器可以作为第一份参考实现。

常见问题

阅读器没有读取到数据

确认导出 JSON 位于:

data/backup/ai/chatgpt-export/

然后重启本地服务:

node "html/server.js"

云端历史显示图片上传 0 张

先看历史统计:

图片:发现 N 张,抓取 M 张,上传 K 张
  • 发现 > 0,抓取 = 0:脚本识别到图片指针,但没有拿到图片二进制。查看 JSON 中的 metadata.local_export.fetch_errors
  • 抓取 > 0,上传 = 0:通常是 OSS/COS 上传失败,检查 CORS、权限、Bucket、Region、Endpoint。
  • 发现 = 0:当前导出的会话里没有可识别的图片或附件资源。

COS 报 SignatureDoesNotMatch

检查:

  • Bucket 和 Region 是否匹配。
  • Endpoint 是否包含 bucket。
  • AK/SK 是否有目标前缀权限。
  • CORS 是否允许 AuthorizationContent-Type

COS 签名使用 XML API 的 HMAC-SHA1 规则;如果仍失败,优先检查配置而不是改签名代码。

Markdown 没有实时渲染

确认系统设置里的响应模式为:

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 网页、本地多帐号阅读、云端备份、图片/附件资源保存和本地续聊合并的独立系统。

License

当前 Userscript 头部声明为 MIT。正式开源前建议在仓库根目录补充 LICENSE 文件。

About

Export and read multi-account AI web conversations locally.面向 AI 网页的多帐号导出、本地化归档与阅读系统。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors