なぜ私は単一のAIプロバイダーに依存するのをやめたのか

コミュニティフォーラム向けにリアルタイムチャットボットを構築しました。一つのAPIを使えば十分だと思っていましたが、それは間違いでした。

3週間後、ピーク時に5xxエラーが発生しました。チャットボットが停止し、ユーザーは不満を募らせました。本番環境のアプリでは、一つのプロバイダーを信頼しきれないことに気づいたのです。

GPT-4を使用していました。うまく動いていましたが、ある時突然ダメになりました。レート制限、タイムアウト、そして完全なサービス停止に直面しました。上位ティアの料金を支払うことは、問題そのものではなく、症状を抑えているだけに感じられました。

他のプロバイダーも試しましたが、それぞれフォーマットや認証方法が異なっていました。コードはswitch-case文の塊になり、ひどい状態になりました。私には以下の機能を持つシステムが必要でした:

サードパーティのライブラリは複雑すぎて壊れやすいため、避けました。代わりに、シンプルなルーターを構築しました。

まず、すべてのプロバイダーに対して共通のインターフェースを定義しました。各プロバイダーは generate メソッドとヘルスチェックを実装します。

次に、ルータークラスを構築しました。これは特定の順序でプロバイダーを試行します。指数バックオフ(exponential backoff)とシンプルなキャッシュを使用します。最初のプロバイダーが失敗した場合、システムは待機してから次のプロバイダーを試します。

このシステムのおかげで、3度の障害時に週末を無駄にせずに済みました。主要なプロバイダーがダウンしても、アプリを稼働させ続けることができます。

これを構築する場合は、以下の点に注意してください:

プロジェクトが小さい場合は、オーバーエンジニアリングを避けてください。ストリーミングが必要な場合、このパターンはレイテンシを増加させます。規模に合わせて適切なツールを選んでください。

あなたはプロバイダーの信頼性をどのように管理していますか?一つのプロバイダーに絞りますか、それともフォールバック層を構築しますか?

Source: https://dev.to/__c1b9e06dc90a7e0a676b/why-i-stopped-relying-on-a-single-ai-provider-and-built-a-fallback-system-1pc0

Optional learning community: https://t.me/GyaanSetuAi