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