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 匯入聊天紀錄
  • 不適合:只想保存某一則對話、直接拿可讀文件交付

操作步驟

  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 等主要是 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 ,同時記得定期做一次官方資料匯出。