コストやレイテンシを悪化させずに、製品にLLMを組み込む方法
AIのデモを作るのは簡単です。APIキーを取得し、プロンプトを書き、チームに見せるだけです。
そして、それをリリースします。トラフィックが押し寄せます。コストは爆発的に増え、レイテンシは急上昇します。
デモから実際の製品へと移行するには、コストとレイテンシのエンジニアリングが必要です。その方法を以下に示します。
出力を制御する
ほとんどのAPIはトークン単位で課金されます。出力トークンは入力トークンよりもコストが高くなります。
プロンプトの調整に時間をかける一方で、モデルに長々と喋らせてしまう人がいます。これは間違いです。
お金と時間を節約するには、出力を制約してください:
- JSON形式で出力するよう求める。
- 1文で回答するよう要求する。
max_tokensの制限を設定する。- モデルに簡潔に答えるよう指示する。
短い回答の方が、高速で安価です。
不要な呼び出しを止める
最善の節約方法は、モデルを全く呼び出さないことです。
- キャッシングを利用する: よくある質問への回答を保存します。質問が全く同じではなくても、意味が似ている場合にはセマンティックキャッシュが役立ちます。
- ルーティングを利用する: 単純なタスクに最高性能のモデルを使用しないでください。分類には小型で安価なモデルを使用し、高価なモデルは複雑な作業のために取っておきましょう。
ユーザーエクスペリエンスを向上させる
回答に時間がかかる場合は、速く感じさせる工夫をしましょう。
- トークンをストリーミングする: 生成された単語を逐次表示します。これにより、体感的な待ち時間を短縮できます。
- 進捗を表示する: タスクが複数のステップに分かれている場合は、何が起きているかをユーザーに伝えます。何も表示されないスピナーではなく、「ドキュメントを検索中...」といったテキストを使用してください。
「テール」レイテンシを管理する
どうしても遅くなるリクエストはあります。それによって製品が使い物にならなくならないようにしましょう。
- タイムアウトを設定する: リクエストが停止した場合の挙動を決めておきます。フォールバック(代替手段)や、より小型のモデルを使用するようにします。
- リトライを利用する: 軽微なエラーに対してはリトライを追加しますが、回数には上限を設けてください。
- サーキットブレーカーを利用する: プロバイダーがダウンした場合は、長い待ち時間を避けるために、直ちにリクエストの送信を停止します。
データを追跡する
計測できないものは改善できません。すべてのリクエストに対して、以下の3つの数値をログに記録してください:
- 入力トークン数
- 出力トークン数
- 総レイテンシ
ユーザーが目的を達成した際のコスト(cost per successful user outcome)に注目してください。失敗する安価な機能よりも、確実に動作する機能の方が価値があります。
LLMを魔法のように扱うのはやめましょう。管理すべき「低速で高価な依存関係」として扱うのです。
Optional learning community: https://t.me/GyaanSetuAi
