DeepSeek 对话记录一键导出:零依赖 Tampermonkey 脚本(支持 JSON/Markdown/ZIP)

chat.deepseek.com你自己账号 的对话历史一键导出为 JSON / Markdown / ZIP,零外联、零持久化、纯本地运行,开箱即用的 Tampermonkey 单文件脚本。

背景

DeepSeek 网页版的「历史对话」只能在浏览器里滚动查看,没有官方导出按钮。一旦账号异常、被风控、或者网页改版,这些对话就再也找不回来了。

更现实的问题是:很多人会把 DeepSeek 当成第二大脑------长文写作、技术方案、学习笔记、代码片段------但这些内容的唯一副本只存在云端。这种状态对长期使用 AI 的人来说,既不安心也不可持续。

于是就有了这个脚本。目标很朴素:

  • 能拿回自己的数据------只读 API,只动自己的账号
  • 跑在本地------不上传任何第三方服务器,Token 仅存在内存
  • 零依赖------单文件 JS,不需要 Python / Node / 浏览器扩展之外的任何东西
  • 格式可选------JSON 留底、Markdown 给人和 LLM 读、ZIP 打包分门别类

核心特性

维度 说明
🔒 零外联 所有请求走页面原生 fetch(自动带 Cookie),不引入任何第三方服务
💾 零持久化 Bearer Token 只存在内存里,关 tab 即失
🚫 不绕 PoW 只调用只读接口(/users/current · /chat_session/fetch_page · /chat/history_messages)
🐢 礼貌限速 每 5 个会话停 800ms,防止触发风控
📊 进度实时 右下角浮窗 + 模态面板,单调递增进度条
📦 多格式导出 JSON 完整结构 / Markdown 易读排版(保留思考过程、工具调用)/ 每会话独立 ZIP 打包
🔄 全量拉取 用 keyset cursor 翻到底,20000 会话硬上限
单会话秒出 从 URL 拿当前会话 ID,跳过列表查询,适合测试
🧪 测试 ZIP 前 5 个会话打包,几秒出结果,验证格式无误再跑全量
🧭 路由自适应 监听 SPA 路由变化,按钮自动启用 / 禁用

快速开始

第 1 步:安装 Tampermonkey

浏览器扩展商店搜索 Tampermonkey(Chrome · Edge · Firefox 都支持)。

第 2 步:安装脚本

打开 GitHub 仓库根目录的 deepseek-exporter.user.js → 全选复制 → Tampermonkey 控制面板「实用工具」→「从剪贴板导入」。

或者直接 Tampermonkey 新建一个脚本,把文件内容粘贴保存即可。

第 3 步:启动导出

  1. 打开 https://chat.deepseek.com/
  2. 在左栏点开 1~2 个对话 (让浏览器发出带 Authorization 头的 fetch,脚本会被动捕获 Token)
  3. 点击右下角 📥 浮窗 → 选你要的格式 → 等待下载

💡 首次推荐流程 :打开任一对话 → 点 ⚡ 当前 Markdown → 几秒后下载 → 打开看字段是否识别正确 → 验证 OK 再跑全量。

使用说明

浮窗面板上一共 8 个按钮,按"范围 × 格式"两两组合,没有学习成本:

按钮 范围 格式 用途
全量合并 1 个 JSON 全量 JSON 把所有会话合并到单文件,结构最完整
全量合并 1 个 Markdown 全量 Markdown 所有会话合并到单文件,人类可读
📦 全量逐个 ZIP (JSON) 全量 ZIP 每会话独立 .json + manifest.json 打包
📦 全量逐个 ZIP (Markdown) 全量 ZIP 每会话独立 .md + manifest.json 打包
⚡ 当前 1 个 JSON 当前会话 JSON 跳过列表查询,秒出结果
⚡ 当前 1 个 Markdown 当前会话 Markdown 同上,Markdown 格式
🧪 测试 ZIP (前 5 个 JSON) 前 5 ZIP 几秒出结果,验证 ZIP 格式
🧪 测试 ZIP (前 5 个 MD) 前 5 ZIP 同上,Markdown 格式

ZIP 文件结构

解压 deepseek-all-YYYYMMDD-HHMM-per-session.zip 后:

text 复制代码
deepseek-all-20260707-1300-per-session.zip
├── manifest.json                          ← 导出元信息(用户、时间、范围)
├── 001-标题1--fa5d16f5.md
├── 002-标题2--35313c17.md
└── ...

文件名规则:编号-标题消毒后--会话ID前8位.{json|md},可以直接拖进任何笔记软件。

工作原理

整体架构非常薄,总共四步:

text 复制代码
┌────────────┐   ① hook fetch      ┌──────────────────┐
│  页面原生  │ ◀────────────────── │  Tampermonkey    │
│   fetch    │ ── 捕获 Bearer ────▶│     脚本         │
└─────┬──────┘                     └────────┬─────────┘
      │                                     │
      │ ② 用捕获的 Token 调只读 API          │
      ▼                                     │
┌──────────────────────────────────┐        │
│  chat.deepseek.com/api/v0/*      │        │
│   - /users/current               │        │
│   - /chat_session/fetch_page     │        │
│   - /chat/history_messages       │        │
└────────┬─────────────────────────┘        │
         │                                  │
         │ ③ 返回 JSON                      │
         ▼                                  ▼
   ┌──────────────────┐         ┌──────────────────────┐
   │ 内存组装数据     │ ──────▶ │ GM_download / <a>    │
   │  生成 ZIP / MD   │         │ 触发浏览器下载       │
   └──────────────────┘         └──────────────────────┘

几个值得一提的实现细节

Token 捕获 :unsafeWindow.fetch 钩子 + XMLHttpRequest.setRequestHeader 兜底,从 Authorization: Bearer ... 被动取出 Token。不弹窗、不要求用户复制粘贴,打开对话就自动捕获。

会话分页 :用上一页最后一项 (pinned, updated_at, id) 作 keyset cursor 构造下一页请求,5 个独立终止条件:

js 复制代码
// (a) 本页 < page_size        ─── 已经是最后一页
// (b) bz.has_more === false   ─── 服务器明确告诉结束
// (c) 全部重复 (added==0)     ─── 游标失效自保
// (d) 页数 > 200              ─── 20000 兜底,防止死循环
// (e) limit > 0 && out.length >= limit   ─── 测试模式到顶就停

ZIP 打包 :内联 STORE-only zip 写入器 + CRC32,零依赖,不引入 JSZip。设置 General Purpose Bit Flag 的 EFS 位(bit 11)标记文件名 UTF-8,WinRAR / Windows Explorer / macOS Archive Utility 全部按 UTF-8 解析,中文不乱码。

下载兼容 :Blob → data: URL → GM_download,失败回退到原生 <a download>,两边都试过才认输。

超时控制 :每次 API 调用 15s AbortController 超时 + console 探针,卡死时能在控制台看到 [DS-Exporter] → / ✓ / ✗ 日志,定位到具体哪个接口、哪条消息。

安全与合规

⚠️ 本工具仅用于备份你自己账号的数据 。任何滥用------批量抓取他人账号、绕过 DeepSeek 鉴权、向第三方分发抓取的数据------都违反 DeepSeek ToS 与《数据安全法》第 21/27 条,与作者无关

数据流承诺

  • ✅ Token 仅在内存存在,永远不会 写入 localStorage / IndexedDB / Cookie
  • ✅ 脚本仅在 chat.deepseek.com 上激活(@match 强制)
  • ✅ 不发起任何跨域请求,所有外发流量都是发回 chat.deepseek.com 的只读接口
  • ✅ 开源 MIT,代码可审计

已知 schema 不稳

⚠️ DeepSeek 的 /api/v0/* 接口目前没有公开稳定性承诺。如果 schema 改了,脚本会失效。提 issue 时附上控制台的 [DS-Exporter] → / ✓ / ✗ 日志,方便定位。

已知限制

  • 20000 会话数硬上限(超过会被分页护栏截断,继续翻页可能拿到重复数据)
  • 上传文件只导出 file_info ,原始文件二进制需要单独走 /file/fetch_uploaded_files
  • history_messages 全量回带(cacheControl: REPLACE),不支持断点续传;网络中断需重新开始
  • 限速影响大账号:单次导出 5 个会话后停 800ms,>5000 会话会跑数分钟
  • ZIP 是 STORE-only(不压缩),体积比 7z / zip 压缩模式大约 2-3 倍;如需压缩可用 WinRAR / 7-Zip 二次处理

写在最后

这个脚本的核心思路其实是**"借用浏览器自己的 fetch"**------既不用破解鉴权,也用不到任何第三方服务,只在内存里临时组装一下数据,然后交给 GM_download 触发下载。所有逻辑加起来不到 1100 行 JS,绝大多数都是 UI 进度条和错误处理。

如果你也是 DeepSeek 重度用户,强烈建议现在就导出一次,放进自己的笔记库或者 Git 私有仓。别等到账号异常、网页改版、或者哪天 DeepSeek 改了 ToS 再后悔。

仓库地址:https://github.com/YiShan-X/deepseek-exporter · MIT License · 欢迎提 Issue 和 PR。

相关推荐
我才是银古14 小时前
OpenCode × DeepSeek 配置方案再进化:审查体系、深度工作流与持续精进
deepseek·vibecoding·opencode
sjg2001041419 小时前
JSON对象参数转URL参数
json
techdashen1 天前
Uber 如何用原生 gRPC 加速 OpenSearch:从 REST/JSON 瓶颈到搜索与写入性能优化
性能优化·json
wtsolutions1 天前
Excel-to-JSON本地化Excel插件发布 - 在Excel中安全离线转换数据
安全·json·excel
我才是银古1 天前
OpenCode × DeepSeek 配置方案继续迭代:从能用到好用
编程开发·deepseek·ai平台·vibecoding·opencode
忧郁的紫菜2 天前
WCF+JSON+实体对象与WebService+DataSet效率大比拼
数据库·oracle·json
PixelBai2 天前
JSON转XML使用教程:从入门到精通
xml·json
知兀2 天前
【构建后的文件目录】vite构建项目的基本文件;React文件
json
我才是银古3 天前
OpenCode × DeepSeek 配置方案迭代记:砍砍补补,越来越好用
deepseek·opencode