AIストリーミングのデバッグ

AIチャットインターフェースの構築に3週間を費やしました。言葉がスムーズにストリーミングされるようにしたかったのですが、実際には接続切れや文章の途切れに見舞われました。

アプリにはFastAPIとReactを使用していました。短い回答はうまくいきましたが、長い回答は単語の途中で切れてしまい、サーバーからのデータ送信が止まってしまいました。

修正を試みました。タイムアウト時間を増やしましたが、うまくいきませんでした。リトライループを追加したところ、今度は単語が重複してしまいました。

問題はパーサーにありました。AI APIはデータの行を送信しますが、私のコードは接続を早すぎるタイミングで閉じてしまっていました。終了信号を待っていなかったのです。

解決策は以下の通りです:

  • aiter_lines の代わりに aiter_bytes を使用する。
  • 行バッファを手動で管理する。
  • 停止するために [DONE] 信号を探す。

その後、今度はUIがフリーズしました。サーバーが1秒間に50個のチャンクを送信したため、Reactの処理が追いつかなかったのです。データの流量を制限するために、サーバー側にわずかな遅延を追加しました。

教訓:

  • まずストリーミングの仕様を確認すること。
  • 空行が終了を意味すると決めつけないこと。
  • SSEのパースにはライブラリを使用すること。
  • チャンク数と遅延を追跡すること。

ストリーミングは厄介です。独特の癖があります。ストリーミングが綺麗に終了することを決して当てにしないでください。

あなたが経験した最も奇妙なストリーミングのバグは何ですか?

Source: https://dev.to/__c1b9e06dc90a7e0a676b/debugging-ai-streaming-a-tale-of-chunks-and-timeouts-1p6m Optional learning community: https://t.me/GyaanSetuAi