簡短的答案
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_message | content是空白的,或只包含空格 |
A model is required. | invalid_model | model欄位空白或缺少 |
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沒有重新生成的按鈕。這個流程本身有兩種失敗情況。
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會直接截斷內容而不是拒絕,並提醒你只有前面一部分被送出。