「Something went wrong」——ChatGPTを使っていれば誰でも一度は見る、あの素っ気ない一文だ。以前このテーマを書いたときは原因と対処法を並べる形にしたが、半年ほど経って改めて見直すと、あの一文自体がほとんど何も語っていないことに気づく。フロントエンドが「予期しないエラーを捕捉した」ときの汎用キャッチ文であって、実際に起きていることは毎回まったく別物だ。今回は原因の切り分け方から書き直す。
ChatGPTのWeb UIはReactで組まれたSPAで、APIとのやり取りはストリーミング(Server-Sent Events)で行われる。サーバー側で429(レート超過)が返ろうが524(オリジンタイムアウト)が返ろうが、ストリームが途中で切れようが、フロントエンドの例外ハンドラは大半のケースをひとまとめにして「Something went wrong」に丸め込む。つまりこのメッセージは診断名ではなく、診断を放棄した結果の表示だ。
原因を絞り込みたいなら、まずブラウザの開発者ツール(F12)でNetworkタブを開き、conversation宛のリクエストが何を返しているかを見るのが一番早い。
ここまで見てから対処に進むと、当てずっぽうの再試行で時間を溶かさずに済む。
Chromeの「このページを翻訳」やGoogle翻訳の拡張機能は、レンダリング後のDOMを書き換える。ChatGPTのようなReactアプリはDOMの状態を自分で管理しているため、外部から要素が差し替えられると仮想DOMとの整合性が崩れ、React自体が例外を投げて画面が壊れることがある。これは日本語UIで英語ページを開いたときに特に起きやすい。翻訳機能をそのページだけオフにするだけで直ることが多い。
uBlock Originや類似の拡張機能が、ChatGPTのテレメトリ・分析用リクエストを誤ってブロックすることがある。実害のない通信のはずが、フロントエンドのエラーハンドリングがそれを「必須リクエストの失敗」として扱い、画面全体をエラー状態に倒すケースがある。シークレットウィンドウ(拡張機能無効)で再現しなければ、これが原因だ。
社内プロキシがTLSを中間で復号・再暗号化する構成(SSLインスペクション)を敷いていると、SSEのストリーミング接続がプロキシによってバッファリングされ、生成中の応答が正しく届かない。エラーは会話の最初ではなく、長めの応答を生成させた途中で発生しやすいのが特徴だ。自宅回線やスマホのテザリングで同じ操作をして再現しなければ、ネットワーク経路側の問題を疑う。
ログインセッションが裏側で失効しているのに、UIはまだログイン済みの表示のままというケースがある。この状態で送信すると、認証エラーが「Something went wrong」に丸め込まれて出る。一度明示的にログアウトしてから再ログインすると直ることがある。
Web版だけで再現し、公式アプリでは問題なければ、原因はほぼ確実にブラウザ環境(拡張機能・翻訳・プロキシ)側にある。逆にアプリでも再現するなら、アカウント側かサーバー側の問題を疑う番だ。
上記を試しても再現するなら、症状(発生時刻・入力内容の概要・Networkタブで見えたステータスコード)を添えてhelp.openai.comから問い合わせるのが早い。ステータスコードなしで「エラーが出ます」とだけ伝えるより、切り分けの結果を添えたほうが対応は速くなる。
「Something went wrong」は原因ではなく、フロントエンドがエラーを分類しきれなかった結果の表示にすぎない。まずNetworkタブでHTTPステータスを確認し、翻訳機能・拡張機能・プロキシというブラウザ環境側の要因を切り分けてから、サーバー障害を疑う順番にすると迷いが減る。Web版だけで起きるのか、アプリでも起きるのかという一点が、最初の分岐として一番効く。