Whizi聊天匯入錯誤:為什麼ChatGPT或Claude匯入會被拒絕

快速解答

Whizi的匯入會在兩個環節之一失敗,訊息本身就會告訴你是哪一個:讀取你匯出檔案的瀏覽器解析器,或是把對話傳送到伺服器的上傳過程。Whizi實際讀取的檔案,是ChatGPT或Claude匯出檔裡的conversations.json。重新執行一次匯入絕對不會讓對話重複,所以先重試就對了。

簡短答案

如果Whizi拒絕了你的匯入,先檢查你選的檔案:Whizi唯一會讀取的檔案,是ChatGPT或Claude匯出檔裡的conversations.json,所以請先解壓縮匯出檔,選那個檔案,而不是整個zip本身。除此之外,匯入失敗只會發生在兩個環節之一,訊息的用字就會告訴你是哪一個:讀取你匯出檔案的瀏覽器解析器,或是接收解析器產生之對話的匯入端點。檔案錯誤談的是你選的檔案,上傳錯誤談的是網路或登入狀態。中間沒有任何模糊地帶,因為每一則訊息都是綁定單一條件的固定字串。

在重試任何動作之前,第二件該知道的事:重新執行一次匯入絕對不會讓對話重複。每一段匯入的對話都是以帳號、來源和來源id為鍵值,所以不管是把同一份匯出檔匯入兩次、在連線中斷後恢復,還是連按兩次「匯入」,最後都只會落地同一批對話,只有一次。

你看到什麼失敗在哪個環節該怎麼做
關於匯出格式或conversations.json的訊息讀取你的檔案時,還沒有任何內容上傳從匯出檔裡選一個不同的檔案,見下方表格
關於你的登入狀態或連線的訊息上傳過程中途重新登入或重新連線,然後再跑一次匯入
一個無法匯入的對話數量有些批次每次重試都失敗再跑一次匯入,它只會補上缺少的部分
沒有訊息,但花了很久速率限制,設計本來就是這樣稍等,匯入程式會自己重試

讀取匯出檔時發生的錯誤

這些錯誤來自瀏覽器,發生在任何一個位元組離開你的機器之前。匯出檔本身從來不會被上傳:瀏覽器會解析它,只送出標準化後的對話,所以這裡出現的錯誤,代表檔案根本還沒走到能被送出的地步。

訊息觸發條件解法
That file is not a ChatGPT or Claude export. Look for conversations.json inside the export zip.解析器無法辨識任一種匯出格式,或zip解出的內容無法辨識打開匯出檔的壓縮檔,明確選取conversations.json這個檔案
There is no conversations.json inside that zip. Unzip it and pick the file directly.你選的zip裡沒有對應的項目自己解壓縮,找到conversations.json,選那個檔案
That file is not valid JSON, so there was nothing to read.選取的檔案無法解析為JSON從ChatGPT或Claude重新下載一次匯出檔,從裡面選conversations.json
That export has no conversations with text in them.匯出檔能被解析,但產生零個對話這份匯出檔確實沒有任何文字對話紀錄,Whizi這端沒有需要修正的地方
That file is too large for the browser to open. Pick the export .zip instead, which is read one file at a time.選取的原始.json檔超過瀏覽器讀取上限改選.zip檔。原始.json匯出檔最多接受300 MB;.zip路徑本身沒有上限,因為只有conversations.json這個項目會被解壓縮
Could not read that file. Please try again.讀取檔案時因其他原因失敗這確實屬於重試的情況。如果同一個檔案一直重複發生,改選匯出的.zip,它是一次讀一個項目

第一則訊息比較籠統,因為同一段字串涵蓋了兩種情況:解析器無法辨識的匯出格式,以及解出無法辨識內容的zip。這兩種情況的解法相同,都是解壓縮匯出檔,直接選conversations.json

上傳過程本身發生的錯誤

檔案一旦解析完成,匯入程式就會分批把對話送出去。這個階段可能出兩種狀況,兩種都能恢復。

訊息觸發條件解法
Your session ended. Sign in again, then start the import.匯入過程中途,權杖取得沒有回應任何內容重新登入,然後重新開始匯入。已經完成的部分會保留,重跑時會跳過它
The import could not be finished. Check your connection and try again.匯入過程中發生其他上傳失敗檢查連線,再跑一次

第三種結果根本不是錯誤,而是一則摘要:{count} could not be imported. Run the import again to pick them up.。這是每次重試都失敗之批次的數量。訊息裡的指示就是完整的解法,簡短答案裡提到的去重鍵,也是為什麼第二次執行不會讓你多花任何代價。

匯入端點回傳的錯誤

以下是匯入路由本身產生的代碼和字串。網站會鏡射相同的上限,並在上傳前先做驗證,所以這些錯誤在有東西直接對端點發出請求,或某個批次格式錯誤時最重要。

代碼訊息觸發條件
invalid_importA JSON object body is required.匯入的內容主體不是一個物件
invalid_sourceAn import source of chatgpt or claude is required.source欄位缺漏,或不是這兩種接受的來源之一
empty_importAt least one conversation is required.conversations陣列缺漏或是空的
too_many_conversationsThis batch has {count} conversations, over the 25 per request limit.一次請求裡超過25段對話
too_many_messagesConversation {n} carries {count} messages, over the 400 per request limit. Send the rest as an append.一次請求裡,某一段對話的訊息數超過400則
invalid_importConversation {n} is not an object.conversations陣列裡的某個項目不是物件
invalid_importConversation {n} has no messages array.某段對話沒有messages陣列
invalid_importConversation {n} has an invalid append target.appendTo欄位既不是字串也不是null
invalid_messageConversation {n} message {m} is not an object.某則訊息項目不是物件
invalid_messageConversation {n} message {m} needs a role of "user" or "assistant".某則訊息的role超出這兩種角色範圍
invalid_messageConversation {n} message {m} has no text.訊息內容不是字串
request_too_largeRequest is too large.JSON內容主體超過路由的位元組上限,不管是依宣告的Content-Length,還是實際讀取到的位元組數

這些訊息背後的上限:每次請求25段對話,每段對話每次請求400則訊息,請求內容主體最多2,000,000位元組。網站的匯入程式會精準地在25和400這兩個數字切分,並把每次請求控制在1,200,000位元組以內,刻意低於2,000,000位元組的上限,為請求外殼留出空間。超過400則訊息的對話不會被拒絕,而是會被切片:剩餘的部分會以附加片段的形式,送到第一個片段建立的那個對話上。

大型匯入每次會暫停20秒

匯入對話的速率限制是每位使用者每分鐘20次請求。一份大型匯出檔會碰到這個上限,這是預期中的情況,不是故障。

碰到這個情況時你不會看到任何錯誤。匯入碰到HTTP 429不會顯示出來:客戶端會等待20秒再重試,每個批次最多重試4次。所以一份大型匯出檔在匯入過程中,每次卡住約20秒,其實正是它該有的表現,讓它繼續跑就好。

如果批次在這4次嘗試之後仍然失敗,它們就會出現在{count} could not be imported. Run the import again to pick them up.這則摘要裡,這時解法是再跑一次匯入,而不是聯絡支援。

匯入功能刻意略過的內容

有些內容是設計上就會被略過,一次成功的匯入,對照原本的內容看起來還是可能不完整。

以ChatGPT匯出檔來說,只有畫面上顯示的那個分支會被匯入。重新產生的回覆和被捨棄的草稿,不會以訊息的形式重現。非對話內容也會被略過:隱藏的推理過程、分析工具的程式碼與輸出、瀏覽用的暫存內容、自訂指令區塊,以及函式呼叫。

以Claude匯出檔來說,思考區塊、工具呼叫和附件都會被捨棄,只有文字區塊會被匯入。

檔案裡沒有可讀文字的對話,會被計算並回報為略過,而不是被默默丟棄,所以略過的數量是一項資訊,不是失敗。

沒有可用標題的對話會變成Imported chat,超過120個字元的標題會被截短。超過內容長度上限的匯入訊息,會被截斷而不是被拒絕,所以一則過大的訊息不會讓你損失那段對話的其他內容。

最後是時間戳記:日期早於2015年1月1日,或日期在未來的匯入訊息,其時間戳記會被捨棄,該筆紀錄會退回使用匯入當下的時間。如果一段對話落地的日期,是你執行匯入的日期,而不是它原本的日期,就是碰到了這條規則。

為什麼重新執行匯入很安全

簡短答案裡提到的去重鍵,還有一個備援機制。當某份匯出檔沒有提供穩定的對話id時,這個鍵就會變成對話紀錄本身的雜湊值,所以重新執行時,還是能對上原本那些對話,而不會多出第二份副本。

有一個結果值得知道:刪除一段匯入的對話,再把同一份匯出檔匯入一次,會讓那段對話回來,而不是回報成重複。如果你是刻意刪除某段匯入的對話,除非你希望它回來,否則不要再重跑那份匯出檔。

操作清單
  • 從匯出檔裡選conversations.json,而不是匯出的zip本身
  • 原始.json匯出檔最多接受300 MB,超過就改用.zip
  • 登入狀態和連線錯誤代表要重新登入或重新連線,然後再跑一次
  • 出現無法匯入的數量,代表要再跑一次匯入
  • 刪除一段匯入的對話後再匯入,會讓它回來
  • 大型匯入每次暫停20秒是速率限制,不是故障
  • ChatGPT重新產生的分支,以及Claude的思考區塊和附件,都是設計上被略過的

常見問題

Whizi說我的ChatGPT匯出檔不是ChatGPT匯出檔,為什麼?

這則訊息是That file is not a ChatGPT or Claude export. Look for conversations.json inside the export zip.,它會在解析器無法從你選的檔案裡辨識出任一種格式,或zip解出無法辨識的內容時出現。Whizi實際讀取的檔案是conversations.json,所以請解壓縮匯出檔,直接選那個檔案。如果你選的是zip,卻收到There is no conversations.json inside that zip. Unzip it and pick the file directly.,代表這個zip裡完全沒有對應的項目,匯出檔需要重新下載。

我的匯入跑到一半就停了。再跑一次會讓我的對話重複嗎?

不會。重新執行正是設計來應對連線中斷、登入狀態結束或批次失敗的做法:第二次執行只會落地同一批對話一次,並且只補上缺少的部分。不需要先做任何清理步驟。

為什麼只匯入了我部分的對話?

會出現兩種不同的數量,只有一種代表失敗。{count} could not be imported. Run the import again to pick them up.計算的是每次重試都失敗的批次數量,解法是再跑一次匯入。另一種是略過的數量,它回報的是檔案裡沒有可讀文字的對話,而不是出錯的對話。

匯入已經卡在那裡一陣子了,是壞掉了嗎?

觀察它會不會繼續動,而不是看它已經跑了多久。大約20秒的暫停,接著繼續有進度,就是速率限制在運作,因為客戶端會等待20秒後重試,而不是顯示任何東西給你看。真正結束的匯入會有明確表示,不是顯示這頁上的某則錯誤字串,就是出現{count} could not be imported. Run the import again to pick them up.這則摘要。沒有動靜但偶爾有進度,代表就讓它繼續跑。

我的ChatGPT或Claude匯出檔會被上傳到Whizi嗎?

不會。匯出檔本身從來不會送達伺服器。你的瀏覽器會讀取它、解析它,只送出標準化後的對話,這也是為什麼這頁上每一種格式錯誤,都發生在任何東西被送出之前。完整的資料處理細節,寫在Whizi如何處理你的資料裡。