ChatGPT 聊天记录怎么导出?JSON / PDF / Markdown 完整教程

ChatGPT 没有单条对话下载按钮。本文详解官方数据导出流程,并对比浏览器扩展与 JSON 转换工具,教你把会话完整保存为 JSON、PDF 或 Markdown。

1. ChatGPT 能导出聊天记录吗?

ChatGPT 没有「单条对话一键下载」按钮,但保存会话的需求非常普遍——学习笔记归档、工作交付、代码备份、知识库搭建、账号级防丢备份,都离不开导出。

导出格式很多:PDF 适合交付,Markdown 适合笔记,JSON 则适合程序化处理——用 Python、jq 或数据库分析对话、提取代码块、构建微调数据集、接入 RAG 管道,JSON 都是最佳起点。

本文对比 3 种实用方案,并重点说明 AI Exporter 的 JSON 导出为什么比官方 conversations.json 更好用。

2. 先看结论:3 种方法怎么选

  • 官方数据导出(设置 → 数据控制 → 导出数据)是 ChatGPT 唯一官方全量备份方式,但 conversations.json 是树形 mapping 结构,解析成本高,不能直接当 PDF 或 Word 交付。
  • AI Exporter 的 JSON 导出输出扁平消息数组,每条消息自带 rolemodelmodelIdcreated_at 和结构化 contents,适合脚本分析、迁移和二次开发。
  • 推荐组合:官方导出做定期全量备份;日常单条或精选对话用 AI Exporter 导出 JSON 或 PDF / Markdown;需要把几百条历史一次性转成可读文档时,再用官方 JSON + 转换工具。

3. 方法一:ChatGPT 官方数据导出(全量备份首选)

OpenAI 提供的唯一官方批量导出方式。

适用场景

  • 定期账号级完整备份
  • 迁移到其他 AI 平台(如 Gemini Import chats
  • 不适合:只想保存某一条对话、直接拿可读文档交付

操作步骤

  1. 打开 chatgpt.com  并登录。
  2. 点击左下角头像 → Settings(设置)

ChatGPT 账号菜单中高亮显示 Settings 入口

  1. 进入 Data controls(数据控制)
  2. 点击 Export data(导出数据) → 确认。

ChatGPT 的 Data controls 面板中高亮显示 Export data 按钮

  1. 等待 OpenAI 邮件(通常 20–30 分钟,对话多的账号可能需要更久,官方说明 最长可达 24 小时)。
  2. 点击邮件中的下载链接(24 小时内有效,注意查垃圾箱)。
  3. 解压 ZIP,找到 conversations.json(新版可能拆成 conversations-000.json 等多个分片)。

你会获得什么

  • conversations.json — 完整对话历史,树形 mapping 结构,含时间戳和模型信息
  • chat.html — 可在浏览器中浏览的基础版本
  • 可能包含图片、附件等(DALL·E 图片、临时对话、已删除聊天可能不包含)

官方 JSON 的痛点

OpenAI 官方导出虽然也是 JSON,但结构面向内部存储,不适合直接拿来写脚本:

  1. 树形 mapping + 父子指针 — 需要反向遍历才能重建对话顺序。
  2. 编辑提示词会产生分支 — 一段对话可能有多条路径,解析更复杂。
  3. 文本深埋在 content.parts[] — 不是简单的字符串字段。
  4. 时间戳是 Unix 浮点数 — 如 1713350400.0,需要额外转换。
  5. 全量或不导 — 无法选择性导出单条消息,也不支持即时导出。
优势详情
官方且可靠由 OpenAI 提供,无需第三方
真正的批量一次性导出账号内所有对话
元数据完整含时间戳、模型信息和对话结构
无需安装直接从 ChatGPT 设置页面操作
局限性详情
全量或不导无法选择特定对话或日期范围
结构复杂树形 JSON 需要大量解析才能使用
无格式选项没有 PDF、Markdown、Word 选项
交付缓慢可能需要数分钟到数天
内容缺失临时对话、已删除聊天、部分 AI 特有内容可能缺失

小结: 官方导出适合兜底备份,不适合日常即时获取结构化数据。

4. 方法二:AI Exporter(日常导出首选)

坦诚声明:这是我们开发的产品,下面如实说明能做什么、不能做什么。

为什么推荐用 AI Exporter 导出 JSON?

对比官方 conversations.json,AI Exporter 的 JSON 是为程序化处理设计的:

维度官方 conversations.jsonAI Exporter JSON
结构树形 mapping,需大量解析扁平消息数组,直接遍历
导出范围全账号批量单条对话 / 部分消息 按需导出
速度数分钟到数天即时一键
时间戳Unix 浮点数每条消息 created_at(人类可读)
模型信息分散在 metadata 中每条 assistant 消息带 model / displayModel / modelId
内容类型新功能支持滞后contents 数组保留多种结构化类型

AI Exporter JSON 长什么样?

顶层是消息数组(不是官方那种 metadata + mapping):

json
[
  {
    "id": "msg_001",
    "chatGroupId": "group_abc",
    "role": "user",
    "model": "chatgpt",
    "displayModel": "ChatGPT",
    "contents": [
      { "type": "markdown", "content": "如何用 Python 读取 CSV 并筛选列?" }
    ],
    "created_at": "2026-04-15 14:30:45",
    "updated_at": 1713175845000
  },
  {
    "id": "msg_002",
    "chatGroupId": "group_abc",
    "role": "assistant",
    "model": "chatgpt",
    "displayModel": "ChatGPT",
    "modelId": "GPT-4o",
    "contents": [
      { "type": "markdown", "content": "你可以使用 pandas 库:\n\n```python\nimport pandas as pd\ndf = pd.read_csv('data.csv')\n```" },
      { "type": "thinking", "content": "用户需要基础的 CSV 读取示例..." },
      { "type": "sources", "sources": [{ "title": "pandas 官方文档", "url": "https://pandas.pydata.org", "domain": "pandas.pydata.org" }] }
    ],
    "created_at": "2026-04-15 14:31:22",
    "updated_at": 1713175882000
  }
]

注意这种扁平结构——一个可以直接 for 循环的数组,无需处理嵌套树或父子指针。

用户最关心的字段

消息级:

字段说明
roleuser(你的消息)或 assistant(AI 回复)
model / displayModel / modelId平台名、展示名和具体模型版本(如 GPT-4o、Claude Sonnet)
created_at / updated_at消息时间,便于排序和统计
chatGroupId同轮问答分组,方便配对 user / assistant

contents 数组(结构化内容,JSON 导出的核心价值):

type保留内容
markdown / text正文、代码块、数学公式
thinking推理 / 思维过程
sources网页搜索、Deep Research 引用来源
image / attachment图片、上传文件
html_widgetCanvas / 交互工件
shopping_card / shopping_table购物推荐卡片与对比表

JSON 导出保留全量结构化数据,不受 PDF 或 Markdown 里「是否显示时间戳」等显示配置影响。

怎么用 AI Exporter 导出 JSON

  1. Chrome 网上应用店  安装 AI Exporter(也支持 Edge、Firefox)。
  2. 打开要导出的 ChatGPT 对话。
  3. 点击扩展图标 → 选择 JSON 格式。
  4. 可选:勾选部分消息,只导出你需要的内容。
  5. 可选:开启「复制到剪贴板」,直接把 JSON 粘贴进脚本或 API 工具。

导出的 JSON 能做什么

以下示例基于 AI Exporter 的 JSON 格式。如果你用的是官方导出,需要先从 mapping 树中提取消息。

用 Python 快速统计对话:

python
import json
from collections import Counter
 
with open("ChatGPT-my-conversation.json") as f:
    messages = json.load(f)
 
roles = Counter(msg["role"] for msg in messages)
print(f"你的提问: {roles.get('user', 0)}")
print(f"AI 回复: {roles.get('assistant', 0)}")
 
responses = [m for m in messages if m["role"] == "assistant" and m["contents"]]
longest = max(responses, key=lambda m: len(str(m["contents"])))
print(f"最长回复字符数: {len(str(longest['contents']))}")

提取所有代码块:

python
import json
import re
 
with open("ChatGPT-my-conversation.json") as f:
    messages = json.load(f)
 
for msg in messages:
    if msg["role"] != "assistant":
        continue
    for item in msg.get("contents", []):
        if item.get("type") not in ("markdown", "text"):
            continue
        blocks = re.findall(r"```(\w+)?\n(.*?)```", item.get("content", ""), re.DOTALL)
        for lang, code in blocks:
            print(f"--- {lang or 'text'} ---")
            print(code)

转换为 OpenAI 微调格式(JSONL):

python
import json
 
with open("ChatGPT-my-conversation.json") as f:
    messages = json.load(f)
 
training_data = []
for i in range(0, len(messages) - 1, 2):
    user_msg, assistant_msg = messages[i], messages[i + 1]
    if user_msg["role"] != "user" or assistant_msg["role"] != "assistant":
        continue
    user_text = " ".join(c.get("content", "") for c in user_msg.get("contents", []) if c.get("content"))
    assistant_text = " ".join(c.get("content", "") for c in assistant_msg.get("contents", []) if c.get("content"))
    if user_text and assistant_text:
        training_data.append({
            "messages": [
                {"role": "user", "content": user_text},
                {"role": "assistant", "content": assistant_text},
            ]
        })
 
with open("training.jsonl", "w") as f:
    for item in training_data:
        f.write(json.dumps(item, ensure_ascii=False) + "\n")
 
print(f"已生成 {len(training_data)} 条训练样本")

AI Exporter 的其他优势

JSON 只是 AI Exporter 支持的格式之一。如果你还需要可读文档,可以在同一个扩展里切换输出:

格式最适合的场景
JSON数据分析、迁移、自动化、微调
MarkdownObsidian、博客写作、知识库
PDF分享、打印、归档 — 保留代码高亮、LaTeX、图片
Word需要二次编辑的办公文档
Notion一键同步到知识库数据库
TXT / 图片轻量存档、视觉分享

其他核心能力:

  • 选择性导出 — 整条对话、部分消息、单条回复悬浮导出
  • 格式保留 — 代码块、表格、LaTeX 公式、Canvas、图片
  • 多平台支持 — ChatGPT、Claude、Gemini、DeepSeek 等 10+ 平台
  • 本地处理 — JSON、Markdown、TXT 主要在浏览器完成,不上传服务器
  • 免费额度 — JSON、Markdown、TXT 免费;PDF、Word、Notion 有每日免费次数

多对话快速导出(多标签工作流)

虽然没有官方那种「一键导出全部对话」,但用多标签工作流可以高效处理多个对话:

  1. 在 ChatGPT 侧边栏 Cmd/Ctrl + 点击 多个对话,每个在新标签页打开。
  2. 预配置格式和下载目录(关闭浏览器「每次询问保存位置」)。
  3. 每个标签页:选择 → 导出 → 关闭标签,约两次点击。
  4. 20 个对话大约 3–5 分钟,输出格式规范、单独命名。

局限性

  • 没有官方那种「一键导出全部对话」按钮。
  • 完整账号备份仍建议配合官方导出。
  • PDF、Word、Notion 有每日免费额度(JSON、Markdown、TXT 免费)。

5. 方法三:官方导出 + 转换工具(批量可读归档)

适合技术用户,或需要把几百条历史对话一次性转成 Markdown 的场景。

适用场景

  • 全历史批量转可读文档
  • 导入 Obsidian、Logseq 建知识库
  • 不适合:只想快速保存当前这一条对话

操作步骤

  1. 先完成方法一,获取官方 ZIP 导出包。
  2. 解压,找到 conversations.json
  3. 选择转换工具:
    • 命令行npx chatgpt-to-markdown path/to/archive
    • 浏览器转换器:ChatGPT Conversations to Markdown(本地处理,不上传)
    • 桌面应用:Univik 等(支持 PDF / DOCX)
  4. 每个对话生成独立 .md 文件。

优势与局限性

优势局限性
真正批量、可读、适合一次性迁移两步流程,需一定技术门槛
开源工具多,本地处理保障隐私输出质量因工具而异,代码块 / 表格转换可能参差不齐
无选择性导出,所有对话均被转换
新增对话后需重新走完整流程

6. 三种方法对比

功能官方导出AI Exporter官方 + 转换工具
导出范围全部按需选择全部
JSON 结构树形 mapping扁平消息数组需先解析官方 JSON
输出格式JSON / HTMLJSON / PDF / MD / Word / Notion 等mainly Markdown
时间戳 / 模型名有,但难提取每条消息直接可读取决于转换工具
选择性导出是(逐条消息)
多平台仅 ChatGPTChatGPT + 10+ 平台仅 ChatGPT
技术门槛中等
导出 20 个对话数分钟至数天约 3–5 分钟等待 + 转换
适合场景兜底备份日常导出 + 结构化 JSON历史批量归档

7. 推荐工作流:组合使用

第一步:官方导出做完整备份

  • 设置 → 数据控制 → 导出数据
  • ZIP 存云盘或外部硬盘
  • 建议频率:每月一次,或删除旧对话前

第二步:AI Exporter 导出重要对话

完成重要对话后即时导出,按用途选格式:

  • 脚本分析 / 迁移 / 微调 → JSON
  • 研究报告、知识库 → Markdown
  • 客户交付 → PDF
  • 团队协作 → Notion 同步

第三步(可选):批量转换备份

需要全历史可读存档时,用方法三把官方 ZIP 批量转成 Markdown。

8. 应该导出为哪种格式?

你的目标最佳格式最佳方法
完整账号备份(安全网)JSON(官方原始)官方导出
脚本分析 / 微调 / RAGJSON(结构化)AI Exporter
知识库(Obsidian / Notion)MarkdownAI Exporter
给客户 / 同事看PDFAI Exporter
需要二次编辑WordAI Exporter
团队协作知识库NotionAI Exporter
全历史批量可读存档Markdown官方 + 转换工具

9. 常见问题

Q1:ChatGPT 能直接导出 JSON 吗?

可以,但只能通过官方批量数据导出(Settings → Data Controls → Export Data),输出的是包含所有对话、结构复杂的嵌套文件。如果需要按单个对话导出且结构清晰的 JSON,请使用 AI Exporter。

Q2:AI Exporter 的 JSON 和官方 conversations.json 有什么区别?

AI Exporter 输出扁平消息数组,每条消息包含 rolemodelmodelIdcreated_at 和结构化 contents,可以直接在循环中遍历。官方导出使用树形 mapping 结构,包含父子引用关系、深埋在 parts[] 中的内容和 Unix 浮点时间戳,需要大量解析工作。

Q3:JSON 里会保留模型名和时间戳吗?

会。每条 assistant 消息带有 modeldisplayModelmodelId(如 GPT-4o),created_at 字段记录消息时间,便于排序和按模型分组统计。

Q4:思维过程、网页搜索来源、代码块会保留吗?

会。AI Exporter 的 contents 数组分别用 thinkingsourcesmarkdown 等类型保留这些内容,比简单复制粘贴完整得多。

Q5:JSON 导出免费吗?

是的,JSON 导出在 AI Exporter 免费版本中即可使用,无需账户或订阅。

Q6:能只导出 AI 回复、不包含我的提示词吗?

可以。点击 Select 并选择 Answers 即可只选择 AI 回复,也可以手动勾选 / 取消单条消息。

Q7:导出的 JSON 能用于 OpenAI API 或微调吗?

可以。AI Exporter 使用 user / assistant 角色标签,与 API 格式一致,只需从 contents 中提取文本内容即可,参见上文微调转换示例。

Q8:AI Exporter 能批量导出所有对话吗?

没有官方那种一键全量导出,但可以用多标签工作流逐个快速导出。完整账号备份仍建议配合官方导出。

Q9:官方导出要等多久?下载链接过期了怎么办?

通常 20–30 分钟,对话多的账号可能更久。下载链接 24 小时内有效,过期后需要重新发起导出请求。

Q10:免费 ChatGPT 账号能导出吗?

可以。官方导出和 AI Exporter 均支持免费账号。

Q11:AI Exporter 和 ChatGPT Exporter 有什么区别?

两者都支持 JSON 导出,但 AI Exporter 覆盖 ChatGPT、Claude、Gemini、DeepSeek 等 10+ 平台,还支持 Word、Notion 等格式,且 contents 数组保留了思维过程、搜索来源、Canvas 等更多结构化类型。

Q12:应该多久备份一次?

建议每月做一次官方全量导出。重要对话在完成后用 AI Exporter 即时导出,不必等月度备份。

10. 总结

没有单一完美方案,组合策略最有效:

  • 官方导出 = 安全网,兜底完整备份
  • AI Exporter = 日常可用格式,尤其是最好用的结构化 JSON
  • 官方 + 转换工具 = 全历史可读归档

👉 立即开始:安装 AI Exporter ,同时记得定期做一次官方数据导出。