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 匯出輸出扁平訊息陣列,每則訊息自帶
role、model、modelId、created_at和結構化contents,適合腳本分析、遷移和二次開發。 - 推薦組合:官方匯出做定期全量備份;日常單則或精選對話用 AI Exporter 匯出 JSON 或 PDF / Markdown;需要把幾百則歷史一次性轉成可讀文件時,再用官方 JSON + 轉換工具。
3. 方法一:ChatGPT 官方資料匯出(全量備份首選)
OpenAI 提供的唯一官方批次匯出方式。
適用情境
- 定期帳號級完整備份
- 遷移到其他 AI 平台(如 Gemini 匯入聊天紀錄)
- 不適合:只想保存某一則對話、直接拿可讀文件交付
操作步驟
- 開啟 chatgpt.com 並登入。
- 點擊左下角頭像 → Settings(設定)。

- 進入 Data controls(資料控制)。
- 點擊 Export data(匯出資料) → 確認。

- 等待 OpenAI 郵件(通常 20–30 分鐘,對話多的帳號可能需要更久,官方說明 最長可達 24 小時)。
- 點擊郵件中的下載連結(24 小時內有效,注意查垃圾郵件)。
- 解壓 ZIP,找到
conversations.json(新版可能拆成conversations-000.json等多個分片)。
你會獲得什麼
conversations.json— 完整對話歷史,樹狀mapping結構,含時間戳記和模型資訊chat.html— 可在瀏覽器中瀏覽的基礎版本- 可能包含圖片、附件等(DALL·E 圖片、臨時對話、已刪除聊天可能不包含)
官方 JSON 的痛點
OpenAI 官方匯出雖然也是 JSON,但結構面向內部儲存,不適合直接拿來寫腳本:
- 樹狀
mapping+ 父子指標 — 需要反向遍歷才能重建對話順序。 - 編輯提示詞會產生分支 — 一段對話可能有多條路徑,解析更複雜。
- 文字深埋在
content.parts[]— 不是簡單的字串欄位。 - 時間戳記是 Unix 浮點數 — 如
1713350400.0,需要額外轉換。 - 全量或不匯 — 無法選擇性匯出單則訊息,也不支援即時匯出。
| 優勢 | 詳情 |
|---|---|
| 官方且可靠 | 由 OpenAI 提供,無需第三方 |
| 真正的批次 | 一次性匯出帳號內所有對話 |
| 中繼資料完整 | 含時間戳記、模型資訊和對話結構 |
| 無需安裝 | 直接從 ChatGPT 設定頁面操作 |
| 侷限性 | 詳情 |
|---|---|
| 全量或不匯 | 無法選擇特定對話或日期範圍 |
| 結構複雜 | 樹狀 JSON 需要大量解析才能使用 |
| 無格式選項 | 沒有 PDF、Markdown、Word 選項 |
| 交付緩慢 | 可能需要數分鐘到數天 |
| 內容缺失 | 臨時對話、已刪除聊天、部分 AI 特有內容可能缺失 |
小結: 官方匯出適合兜底備份,不適合日常即時取得結構化資料。
4. 方法二:AI Exporter(日常匯出首選)
坦誠聲明:這是我們開發的產品,下面如實說明能做什麼、不能做什麼。
為什麼推薦用 AI Exporter 匯出 JSON?
對比官方 conversations.json,AI Exporter 的 JSON 是為程式化處理設計的:
| 維度 | 官方 conversations.json | AI Exporter JSON |
|---|---|---|
| 結構 | 樹狀 mapping,需大量解析 | 扁平訊息陣列,直接遍歷 |
| 匯出範圍 | 全帳號批次 | 單則對話 / 部分訊息 按需匯出 |
| 速度 | 數分鐘到數天 | 即時一鍵 |
| 時間戳記 | Unix 浮點數 | 每則訊息 created_at(人類可讀) |
| 模型資訊 | 分散在 metadata 中 | 每則 assistant 訊息帶 model / displayModel / modelId |
| 內容類型 | 新功能支援滯後 | contents 陣列保留多種結構化類型 |
AI Exporter JSON 長什麼樣?
頂層是訊息陣列(不是官方那種 metadata + mapping):
[
{
"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 迴圈的陣列,無需處理巢狀樹或父子指標。
使用者最關心的欄位
訊息級:
| 欄位 | 說明 |
|---|---|
role | user(你的訊息)或 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_widget | Canvas / 互動工件 |
shopping_card / shopping_table | 購物推薦卡片與對比表 |
JSON 匯出保留全量結構化資料,不受 PDF 或 Markdown 裡「是否顯示時間戳記」等顯示設定影響。
怎麼用 AI Exporter 匯出 JSON
- 從 Chrome 線上應用程式商店 安裝 AI Exporter(也支援 Edge、Firefox)。
- 開啟要匯出的 ChatGPT 對話。
- 點擊擴充功能圖示 → 選擇 JSON 格式。
- 可選:勾選部分訊息,只匯出你需要的內容。
- 可選:開啟「複製到剪貼簿」,直接把 JSON 貼進腳本或 API 工具。
匯出的 JSON 能做什麼
以下範例基於 AI Exporter 的 JSON 格式。如果你用的是官方匯出,需要先從 mapping 樹中擷取訊息。
用 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']))}")擷取所有程式碼區塊:
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):
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 | 資料分析、遷移、自動化、微調 |
| Markdown | Obsidian、部落格寫作、知識庫 |
| 分享、列印、歸檔 — 保留程式碼高亮、LaTeX、圖片 | |
| Word | 需要二次編輯的辦公文件 |
| Notion | 一鍵同步到知識庫資料庫 |
| TXT / 圖片 | 輕量存檔、視覺分享 |
其他核心能力:
- 選擇性匯出 — 整則對話、部分訊息、單則回覆懸浮匯出
- 格式保留 — 程式碼區塊、表格、LaTeX 公式、Canvas、圖片
- 多平台支援 — ChatGPT、Claude、Gemini、DeepSeek 等 10+ 平台
- 本機處理 — JSON、Markdown、TXT 主要在瀏覽器完成,不上傳伺服器
- 免費額度 — JSON、Markdown、TXT 免費;PDF、Word、Notion 有每日免費次數
多對話快速匯出(多分頁工作流)
雖然沒有官方那種「一鍵匯出全部對話」,但用多分頁工作流可以高效處理多個對話:
- 在 ChatGPT 側邊欄 Cmd/Ctrl + 點擊 多個對話,每個在新分頁開啟。
- 預先設定格式和下載目錄(關閉瀏覽器「每次詢問儲存位置」)。
- 每個分頁:選擇 → 匯出 → 關閉分頁,約兩次點擊。
- 20 個對話大約 3–5 分鐘,輸出格式規範、單獨命名。
侷限性
- 沒有官方那種「一鍵匯出全部對話」按鈕。
- 完整帳號備份仍建議配合官方匯出。
- PDF、Word、Notion 有每日免費額度(JSON、Markdown、TXT 免費)。
5. 方法三:官方匯出 + 轉換工具(批次可讀歸檔)
適合技術使用者,或需要把幾百則歷史對話一次性轉成 Markdown 的情境。
適用情境
- 全歷史批次轉可讀文件
- 匯入 Obsidian、Logseq 建知識庫
- 不適合:只想快速保存當前這一則對話
操作步驟
- 先完成方法一,取得官方 ZIP 匯出包。
- 解壓,找到
conversations.json。 - 選擇轉換工具:
- 命令列:
npx chatgpt-to-markdown path/to/archive - 瀏覽器轉換器:ChatGPT Conversations to Markdown(本機處理,不上傳)
- 桌面應用:Univik 等(支援 PDF / DOCX)
- 命令列:
- 每個對話產生獨立
.md檔案。
優勢與侷限性
| 優勢 | 侷限性 |
|---|---|
| 真正批次、可讀、適合一次性遷移 | 兩步流程,需一定技術門檻 |
| 開源工具多,本機處理保障隱私 | 輸出品質因工具而異,程式碼區塊 / 表格轉換可能參差不齊 |
| 無選擇性匯出,所有對話均被轉換 | |
| 新增對話後需重新走完整流程 |
6. 三種方法對比
| 功能 | 官方匯出 | AI Exporter | 官方 + 轉換工具 |
|---|---|---|---|
| 匯出範圍 | 全部 | 按需選擇 | 全部 |
| JSON 結構 | 樹狀 mapping | 扁平訊息陣列 | 需先解析官方 JSON |
| 輸出格式 | JSON / HTML | JSON / PDF / MD / Word / Notion 等 | 主要是 Markdown |
| 時間戳記 / 模型名 | 有,但難擷取 | 每則訊息直接可讀 | 取決於轉換工具 |
| 選擇性匯出 | 否 | 是(逐則訊息) | 否 |
| 多平台 | 僅 ChatGPT | ChatGPT + 10+ 平台 | 僅 ChatGPT |
| 技術門檻 | 無 | 無 | 中等 |
| 匯出 20 個對話 | 數分鐘至數天 | 約 3–5 分鐘 | 等待 + 轉換 |
| 適合情境 | 兜底備份 | 日常匯出 + 結構化 JSON | 歷史批次歸檔 |
7. 推薦工作流:組合使用
第一步:官方匯出做完整備份
- 設定 → 資料控制 → 匯出資料
- ZIP 存雲端或外接硬碟
- 建議頻率:每月一次,或刪除舊對話前
第二步:AI Exporter 匯出重要對話
完成重要對話後即時匯出,按用途選格式:
- 腳本分析 / 遷移 / 微調 → JSON
- 研究報告、知識庫 → Markdown
- 客戶交付 → PDF
- 團隊協作 → Notion 同步
第三步(可選):批次轉換備份
需要全歷史可讀存檔時,用方法三把官方 ZIP 批次轉成 Markdown。
8. 應該匯出為哪種格式?
| 你的目標 | 最佳格式 | 最佳方法 |
|---|---|---|
| 完整帳號備份(安全網) | JSON(官方原始) | 官方匯出 |
| 腳本分析 / 微調 / RAG | JSON(結構化) | AI Exporter |
| 知識庫(Obsidian / Notion) | Markdown | AI Exporter |
| 給客戶 / 同事看 | AI Exporter | |
| 需要二次編輯 | Word | AI Exporter |
| 團隊協作知識庫 | Notion | AI Exporter |
| 全歷史批次可讀存檔 | Markdown | 官方 + 轉換工具 |
9. 常見問題
Q1:ChatGPT 能直接匯出 JSON 嗎?
可以,但只能透過官方批次資料匯出(Settings → Data Controls → Export Data),輸出的是包含所有對話、結構複雜的巢狀檔案。如果需要按單個對話匯出且結構清晰的 JSON,請使用 AI Exporter。
Q2:AI Exporter 的 JSON 和官方 conversations.json 有什麼區別?
AI Exporter 輸出扁平訊息陣列,每則訊息包含 role、model、modelId、created_at 和結構化 contents,可以直接在迴圈中遍歷。官方匯出使用樹狀 mapping 結構,包含父子引用關係、深埋在 parts[] 中的內容和 Unix 浮點時間戳記,需要大量解析工作。
Q3:JSON 裡會保留模型名和時間戳記嗎?
會。每則 assistant 訊息帶有 model、displayModel 和 modelId(如 GPT-4o),created_at 欄位記錄訊息時間,便於排序和按模型分組統計。
Q4:思維過程、網頁搜尋來源、程式碼區塊會保留嗎?
會。AI Exporter 的 contents 陣列分別用 thinking、sources、markdown 等類型保留這些內容,比簡單複製貼上完整得多。
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 ,同時記得定期做一次官方資料匯出。