Whizi訊息傳送不出去,或是回覆一直沒出現

快速解答

Whizi訊息傳送不出去,通常是以下五種原因之一:另一則回覆還在生成中、你重複傳送了同一則訊息、你超過了每分鐘或每小時的傳送上限、訊息本身沒有通過驗證,或是你的登入權杖(session token)已經過期。Whizi會在錯誤訊息中直接說明原因,而且被速率限制拒絕的請求不會消耗你的用量。

簡短的答案

Whizi訊息傳送不出去,通常是以下五種原因之一:另一則回覆還在生成中、你重複傳送了相同的文字、你超過了每分鐘或每小時的速率限制、訊息本身沒有通過驗證,或是你的登入權杖(session token)已經過期。Whizi會在錯誤訊息中直接說明原因,因此你看到的錯誤字串就能決定該怎麼處理。

你會看到的訊息代碼原因該怎麼做
Generation already in progress. Please stop it or wait for it to finish.409你的帳號還有另一則回覆正在生成停止它,或是等它完成
Duplicate message ignored. Please wait for the current response to finish.409相同的文字(和圖片)最近已經傳送到這個對話過等待目前正在進行的回覆完成
Too many requests. Please wait and try again.429每分鐘的請求上限拒絕了這次請求稍等一下再重新傳送
Hourly message limit reached. Please try again later.429每小時的聊天上限拒絕了這次請求稍等一下再重新傳送
A non-empty message is required.400訊息是空白的,或只包含空格輸入一些內容
This message is {count} characters, over the 100,000 character limit. Attach a shorter file, or ask about one section at a time.400單一則訊息超過了100,000個字元拆成幾則,或一次只問一個部分
The model is temporarily rate-limited. Please retry shortly.429模型供應商在連線時回傳429重試,或改用其他模型
Failed to send message.無,屬於網站彈出訊息傳送失敗,且後端沒有提供任何訊息檢查你的網路連線後重新傳送
Something went wrong. Please retry.500後端發生任何未處理的錯誤重新傳送,若一再發生請回報
Invalid or expired session token.401權杖驗證失敗重新整理頁面並再次登入

速率限制造成的拒絕會被復原(unwound),因此被拒絕的請求永遠不會從你的用量中扣除訊息。

按下Enter鍵卻沒有任何反應

如果按下Enter完全沒有反應,代表還有一則回覆正在生成中。輸入框在回覆進行時會刻意忽略Enter鍵,所以這不是按鍵沒被偵測到。Shift加Enter仍然可以插入換行。

Whizi每個帳號同一時間只能生成一則回覆,這是由每個使用者專屬的鎖(lock)強制執行的,所以同一個帳號的兩台裝置永遠不能同時生成。第二次嘗試會被拒絕,並顯示Generation already in progress. Please stop it or wait for it to finish.,HTTP 409,代碼為generation_in_progress。當生成協調器(generation coordinator)在連線時回報衝突,也會回傳相同的字串。

傳送兩次完全相同的文字,會回傳Duplicate message ignored. Please wait for the current response to finish.,HTTP 409,代碼為duplicate_message。當相同的訊息文字(與圖片)最近已經傳送到這個對話時,就會觸發這個情況,這通常是連點兩下,或是不耐煩地又按了一次Enter所造成的。

這兩種情況的解決方法都一樣:停止正在進行的回覆,或是等它完成。停止的處理是在伺服器端完成的:協調器會取消對供應商的讀取,儲存已經收到的文字,釋放鎖,並退還未送達的這一輪用量。如果鎖不知為何被留下來,它也會自行復原:一旦持有者被判定為孤兒或停滯,鎖就會變成可被搶走的狀態,而過期的鎖也會依排程被清除。

如果停止動作留下了空白,助理的對話泡泡會顯示Generation stopped.,這是在生成被停止、且沒有擷取到任何部分文字時所儲存的文字。Generation stopped, but it could not be saved.則代表停止動作成功,但儲存部分回覆的動作失敗了。

訊息在任何模型看到之前就被拒絕

以下是在任何內容送達模型之前,就因驗證失敗而產生的HTTP 400拒絕,完全沒有內容被送到上游。

訊息代碼觸發條件
A non-empty message is required.empty_messagecontent是空白的,或只包含空格
A model is required.invalid_modelmodel欄位空白或缺少
That model is not available for text chat.unsupported_model這個模型ID在型錄中無法對應到任何文字模型
This message is {count} characters, over the 100,000 character limit. Attach a shorter file, or ask about one section at a time.message_too_long單一則訊息超過了100,000個字元
That system prompt is missing or over the 32,000 character limit.invalid_system_prompt系統提示詞(system prompt)缺少,或超過32,000個字元
That image reference is not valid.invalid_image_url圖片參照不是字串,或長度超過2,048個字元
This conversation has {count} messages, over the 100 message limit.too_many_messages應用程式的聊天路由拒絕了一份在單一請求中超過100則訊息的對話紀錄

這個100,000字元的上限,計算的是整則訊息,包括從附件中擷取出來的任何文字。若想知道當附件擷取出的文字超過訊息額度時,Whizi會怎麼處理,請參閱檔案上傳失敗

速率限制,以及一種與速度無關的拒絕

上面表格中的兩個429速率限制字串,代碼都是rate_limit_reached。被拒絕的請求會被復原,所以429絕對不會從你的用量中扣除訊息:等時間窗口過去後再重新傳送即可。時間窗口的數字,以及背後的方案額度,請參閱速率限制用量用盡

同一個系列中還有一種拒絕,其實跟速度完全無關:Account sharing limit reached. Please use your own Whizi account.,HTTP 403,代碼為account_sharing_limit,當同一個帳號在過去24小時內出現超過3組不同的裝置或工作階段金鑰時就會觸發。等個一分鐘並不會讓它消失。

回覆開始了,但接著停止或完全沒有顯示出來

一旦連線建立之後,失敗可能來自模型供應商,也可能來自負責傳輸串流的機制。錯誤字串會依失敗發生的位置而有所不同。

訊息來源
The model is temporarily rate-limited. Please retry shortly.HTTP 429 provider_rate_limited,當供應商在連線時回傳429
The model provider rejected the request.當供應商回傳的錯誤內容無法解析,或解析後訊息是空的時使用
The model provider returned an empty stream.HTTP 502,上游回應OK,但沒有回傳任何內容
The model provider returned an error.串流中的錯誤事件,當供應商送出的錯誤影格本身沒有附帶訊息時
The model stream was interrupted.串流中的錯誤事件,用於其他任何串流中途發生的失敗
Generation failed mid-stream.在已經送出部分位元組之後,生成以失敗告終
Generation failed to start.協調器啟動失敗時的內部備用文字,本身不帶任何訊息
The generation stream is unavailable.當協調器無法交回一個可以接續的串流時觸發
Generation aborted before it started.當客戶端在上游連線完成之前中斷連線時,以AbortError形式觸發
Something went wrong. Please retry.HTTP 500 internal_error,任何未處理的後端錯誤的內容
Sorry, there was an error generating the response.當串流結束時沒有最終訊息,也沒有累積任何內容,就會寫入助理的對話泡泡

除了429以外的任何上游失敗,都會是HTTP 502的provider_error,內容為供應商的訊息,並截斷至300個字元。在串流中途的路徑上,並沒有內建的錯誤事件:連線就是直接中斷。

其中有一個字串其實是一筆紀錄,而不是要顯示給你看的訊息。Generation aborted before it started.會在客戶端於上游連線完成之前就中斷連線時,以AbortError的形式被觸發,這條路由對這種情況的回應是HTTP 408加上空的內容主體,所以這個字串是伺服器記錄下來的內容,而不是瀏覽器印出來的訊息。在網路追蹤紀錄中,generate路由上出現空的408,代表這個請求在任何模型被觸及之前就已經消失了。

以上所有情況底下還有一個萬用的後備機制:任何後端無法辨識的狀況,最終都會變成HTTP 500的internal_error,內容為Something went wrong. Please retry.。HTTP 500並不會指出原因。重新傳送一次,如果一再發生,再聯絡支援團隊。

該怎麼做:重新傳送,如果一再發生,就在同一個對話中換一個模型。這些錯誤來自Whizi上游,並不是你的帳號或設定出了問題。

有一件事你不需要做,就是讓分頁保持開啟。生成是在每個對話各自獨立的Durable Object中執行的,所以在串流中途關閉分頁並不會中止回覆,回覆依然會被儲存下來。重新開啟的分頁或第二台裝置,都可以重新接上一個正在進行中的生成。The generation stream is unavailable.會在協調器無法交回一個可以接續的串流時被觸發。與其等待串流,不如重新載入對話,讀取已經儲存下來的內容。

在並排比較檢視畫面中,每一側的字串又不太一樣:當生成回應不是OK、又沒有可讀取的錯誤時,會顯示The model did not respond. Please try again.;當背後的聊天無法建立時,會顯示Could not start a comparison chat.;而最後的備用選項是Something went wrong.。最後這一個是簡短版本,後面沒有附上要求重試的句子,這就是你分辨它跟500錯誤的Something went wrong. Please retry.內容的方法。

你的登入工作階段過期了

驗證失敗看起來很像傳送失敗,因為它們都是在傳送時才顯現出來。Authentication required.是HTTP 401的unauthorized,在請求沒有攜帶bearer權杖時觸發。Invalid or expired session token.則是相同的狀態碼與代碼,只要權杖驗證因為任何原因失敗,例如權杖過期、簽章錯誤、發行者錯誤,都會出現這個訊息。

在網站端,你有可能反而會看到Failed to retrieve session token.,這是網站在取得聊天清單、載入對話、刪除、重新命名或上傳呼叫之前,權杖取得失敗且沒有回傳任何內容時所拋出的訊息。比較檢視畫面則有自己的措辭:Your session expired. Please refresh and try again.

解決方法是重新整理頁面,如果重新整理後仍然無法恢復工作階段,就再次登入。帳號上不會遺失任何東西,也沒有任何訊息被送出。

這不是失敗,而是一種限制

用量拒絕與方案等級拒絕都不算是傳送失敗。請求本身格式正確,是Whizi刻意拒絕了它,所以輸入框本身沒有什麼需要修正的:用量拒絕的內容請參閱用量用盡,而顯示為鎖定的模型則請參閱疑難排解

被內容篩選拒絕的提示詞,同樣不算是傳送失敗。篩選會在任何用量被保留、以及供應商被呼叫之前執行,所以被拒絕的提示詞不會消耗任何用量,拒絕會以HTTP 400的形式出現,原因則會顯示在聊天中。

編輯已送出的訊息,反而失敗了

編輯提示詞後重新傳送,是重新執行一輪對話的方法,因為Whizi沒有重新生成的按鈕。這個流程本身有兩種失敗情況。

That message is no longer part of this conversation. Reload and try again.是HTTP 404的replace_anchor_not_found,在編輯指定的訊息ID已經不在對話中時回傳。請重新載入對話。這代表客戶端手上的訊息ID,伺服器已經沒有了。

Conversation not found.是HTTP 404的not_found,在對話ID不存在,或不屬於呼叫者時回傳。這個訊息不只出現在generate路由,也會出現在讀取、刪除、重新命名、訊息附加、版本切換與分享等路由上。

操作清單
  • 按Enter沒反應,代表還有回覆在生成中,不是按鍵沒被偵測到
  • 每個帳號同一時間只能有一則回覆在生成,涵蓋你所有的裝置
  • 重複傳送會被刻意忽略,並顯示409與對應的說明訊息
  • 聊天有每分鐘與每小時的上限,任何方案都無法解除
  • 被速率限制拒絕的請求,不會消耗你的用量
  • 單一則訊息的上限是100,000個字元
  • 供應商錯誤要靠重新傳送或換一個模型來解決,而不是靠調整設定
  • 在回覆途中關閉分頁,並不會中止回覆
  • 驗證錯誤要靠重新整理並再次登入來解決

常見問題

「Generation already in progress. Please stop it or wait for it to finish.」是什麼意思?

停止正在進行的回覆,或是等它完成後再重新傳送。這個拒絕是HTTP 409,代碼為generation_in_progress,當同一個帳號的另一台裝置正在生成時,也會出現這個訊息。停止動作是在伺服器端處理的:部分回覆會被儲存下來,鎖會被釋放,未送達的這一輪用量也會被退還。

我的回覆講到一半就停了,我會被扣用量嗎?

串流中途發生的失敗,會在沒有任何內建錯誤事件的情況下中斷連線,而中斷之前收到的文字都會被保留。如果你自己停止了一次生成,伺服器會取消對供應商的讀取、儲存部分回覆,並退還未送達的這一輪用量。如果供應商反覆發生失敗,就在同一個對話中換一個模型,因為這個錯誤來自Whizi上游。如果你收到的是HTTP 500,內容為「Something went wrong. Please retry.」,那是未處理後端錯誤的通用內容,而不是模型本身的問題,所以重新傳送一次就好,如果持續發生再回報。

關閉分頁會取消我的回覆嗎?

不會,只有在一開始很短暫的一段時間內是例外。如果客戶端在上游連線完成之前就中斷連線,伺服器會記錄「Generation aborted before it started.」,並回應HTTP 408加上空的內容主體,這就是為什麼這個請求看起來像是完全沒有回傳任何東西。過了這個時間點之後,回覆就不會再依賴客戶端了,因為生成是在每個對話各自獨立的Durable Object中執行的,答案依然會被儲存下來。「The generation stream is unavailable.」會在協調器無法交回一個可以接續的串流時被觸發,重新載入對話就能看到已經儲存的內容。

Whizi說我的訊息超過100,000個字元的上限,該怎麼辦?

單一則訊息的上限是100,000個字元,拒絕會是HTTP 400,代碼為message_too_long。這個字數計算的是整則訊息,包括從附件擷取出來的文字。你可以一次只問一個部分,或是附上比較短的檔案。當附件擷取出的文字超過訊息額度時,Whizi會直接截斷內容而不是拒絕,並提醒你只有前面一部分被送出。