ByteScope

Chat Export Viewer

把 ChatGPT 或 Claude 匯出的 zip 丟進來——只有 conversations.json 也行——整份對話紀錄一次看完:跨所有訊息搜尋、在改過或重新產生的版本之間切換、看看自己什麼時候聊得最多,再把一段或全部對話存成 Markdown。全部在這個瀏覽器分頁裡完成,不上傳、不儲存。

檔案不會離開你的瀏覽器 — 全部在本機處理。

把 ChatGPT 或 Claude 匯出的 zip(或 conversations.json)拖進來,就能搜尋所有對話、切換編輯或重新生成產生的分支,還能存成 Markdown。全程不上傳。

拖入 ChatGPT 或 Claude 的匯出檔,或點一下選擇

.zip、conversations.json,或已解壓縮的資料夾

給資料夾的話,放在對話旁邊的圖片和檔案也看得到。

誠實的限制

  • ChatGPT 和 Claude 都沒有公開匯出格式,隨時可能改。這裡的讀法是依公開說明推定的,不是依正式規格。認不得的內容會標出來,不會默默略過。
  • 我們只有匯出檔裡的東西。部分工具呼叫的中間結果、已刪除的對話、別人分享給你的對話,可能不在檔案裡。
  • 圖片和檔案要給整個 zip 或資料夾才看得到;只給 conversations.json 的話,會顯示附件不在這份匯出裡。
  • 所有處理都在這個分頁的記憶體裡,關掉就沒了,我們不存也不上傳。

關於這個工具

ChatGPT 和 Claude 都可以申請匯出自己的資料,拿到的是一個 zip,裡面有一份 conversations.json——一整牆的 JSON,不是人能直接讀的東西。這一頁就是用來打開它的。把整個 zip(最好)、解壓縮出來的 conversations.json 或整個解壓縮後的資料夾丟進來,來源會自動辨識。左欄列出每一段對話的標題、最後更新時間和訊息數,可以依時間排序、依標題篩選;右欄顯示你點開的那一段,你和助理的訊息分得開,時間戳用你的本地時區,程式碼區塊用等寬字型並附「複製」。大檔案在 Web Worker 裡用串流方式一段一段讀,頁面不會卡住,進度條顯示的是真的已讀位元組數,不是猜的。

讀得懂什麼、認不得什麼

ChatGPT 和 Claude 都沒有公開匯出格式。這一頁認得的欄位是依照公開的描述推定的,他們那邊一改就可能跟著變。所以規則是:認不得的東西一律不丟。訊息裡某個片段的內容類型這一頁不認識,就顯示成「不支援的內容類型」佔位,旁邊有一顆按鈕可以看原始 JSON;頁面上方的「格式覆蓋率」小卡會把它們數出來——「共 N 則訊息,其中 M 則含有我們還不認得的內容類型」,並逐一列出類型——你看得到我們漏了什麼。已知的輔助內容,像推理過程、工具呼叫和結果、程式執行輸出、瀏覽引用,會收合或淡色顯示,不算在「認不得」裡。整份檔案根本不是這兩家的對話清單時,頁面會直接說,並顯示前 500 個字元,不會硬猜。

改過的提問、重新產生的回答

你改過提問或要求再回答一次,匯出檔會把每個版本都留著,變成同一段對話的分支。只要某則訊息有不只一個版本,它上面就會出現「版本 2/3」切換器;預設顯示匯出檔標記為目前的那條分支,沒有標記就顯示最新的。官方介面要你一則一則點箭頭,這裡每個版本都是一下就到,而且一眼看得出總共有幾個。

搜尋與統計

搜尋會在 worker 裡幫每則訊息建一份純文字索引——轉小寫、做 NFKC 正規化,直接比對子字串,所以中文、日文不用斷詞也找得到。結果依對話分組,附前後文片段,點一下就跳到那則訊息並高亮。統計頁會算出對話數和訊息數、畫出每月訊息數長條圖、列出最長的 10 段對話;匯出檔有記錄是哪個模型回答的話,也會列出你最常用的模型。這些都不會離開這個分頁:索引放在 worker 的記憶體裡,頁面關掉就跟著消失。

存成 Markdown

任何一段對話都可以存成 .md,也可以把整份匯出存成一個 zip,每段對話一個檔,檔名是 YYYY-MM-DD-標題.md——標題會先清理過,在 Windows 上也是合法檔名——附件放進 assets/ 資料夾並用相對路徑連結。預設只匯出你正在看的那條分支;勾選「包含所有分支」,其他版本會以 ## Branch k of n 的段落接在後面。Markdown 是純文字、不含任何 HTML,頁尾會註明它是從匯出檔轉換而來、未經修改,並附上原始檔的 SHA-256,之後可以拿來核對這份副本是不是出自那個匯出檔。

它看不到的東西

檢視器只知道匯出檔裡有的東西。已刪除的對話、別人分享給你的對話、某些工具呼叫的中間結果,通常都不在檔案裡,所以這裡也不會有。圖片和檔案附件只有在你給整個 zip 或解壓縮後的資料夾時才看得到;只給 conversations.json 的話,每個附件都會標成「附件不在這份檔案裡」。所有東西都放在這個分頁的記憶體裡,關掉就沒了——不上傳、不儲存,這一頁也沒有伺服器可以把東西送過去。ChatGPT 和 Claude 是各自所有者的商標;這是一個獨立的檢視器,用來讀它們匯出的檔案,不是官方工具。

常見問題

我的對話紀錄會被上傳到哪裡嗎?

不會。zip 的解壓縮、conversations.json 的解析,都由瀏覽器裡的 Web Worker 完成;搜尋索引、統計和 Markdown 檔也都在那裡產生。這一頁沒有伺服器可以接收任何東西,也不會寫進任何儲存空間,分頁一關就全部丟掉。打開幾年份的紀錄,跟用文字編輯器打開一樣私密——只是好讀得多。

要丟哪個檔案?zip 還是 conversations.json?

zip 最好:你下載到的就是它,而且只有這樣這一頁才看得到你的圖片和檔案附件——它們就放在 zip 裡 conversations.json 的旁邊。丟解壓縮後的整個資料夾效果一樣。只丟 conversations.json 也可以讀、搜尋、匯出文字,但每個附件都會標成「附件不在這份檔案裡」。

為什麼有訊息顯示「不支援的內容類型」?

因為那個片段用的內容類型這一頁不認識。ChatGPT 和 Claude 從來沒有公開匯出格式;這一頁認得的是依公開描述推定的,他們那邊任何一次改動都可能讓它過時。與其默默丟掉,這一頁選擇把它標出來,按鈕後面放著原始 JSON,而且每一個這樣的片段都會算進上方的「格式覆蓋率」小卡,你才知道漏了什麼。推理過程、工具呼叫這類輔助內容是認得的,會收合顯示——那不是這個標籤的意思。

我的圖片和附件在哪裡?

在 zip 裡,就在 conversations.json 旁邊——所以這一頁才會要整個 zip 或解壓縮後的資料夾。媒體檔只在你點開用到它的對話時才解壓縮,大的匯出檔不需要整包解開。如果你只丟了 conversations.json,裝圖片的那個檔案根本不在,每個附件就會這樣告訴你。

訊息上的「版本 2/3」是什麼意思?

代表對話在那裡分岔了:你改過提問或重新產生過回答,匯出檔把三個版本都留著。切換器預設顯示匯出檔標記為目前的那條分支——沒有標記就顯示最新的——你可以一個個切過去看。後面接的回覆會跟著你選的版本一起換,因為每條分支都是各走各的。

可以一次把全部對話匯出成 Markdown 嗎?

可以。「全部匯出」會產生一個 zip,每段對話一個 .md,用日期和標題命名,另有一個 assets/ 資料夾放匯出檔裡的附件,用相對路徑連結。每段對話預設只寫目前顯示的那條分支;勾選「包含所有分支」,其他版本會以 ## Branch k of n 的段落接在後面。每個檔案結尾都有一行註明未經修改,並附上原始匯出檔的 SHA-256。

匯出檔很大也能開嗎?

設計上就是為這個做的。conversations.json 在 Web Worker 裡以串流方式解析:每段對話一讀完就正規化、做成摘要,原始物件隨即釋放,所以記憶體用量跟著最大的那一段對話走,而不是跟著整個檔案走,主執行緒也從來不用把整份檔案抱在手上。進度條顯示已讀位元組/總位元組。一台機器實際能開多大,還是要看瀏覽器給一個分頁多少記憶體,所以這裡不承諾任何上限。