「雑談」でAPIの予算を浪費させないために
GPT-4やClaude 3.5 Sonnetの運用には多額のコストがかかります。月末のAPI請求書を見て、何気ない些細な質問のために支払った金額に驚くこともあるでしょう。実際、ユーザーは金融管理アプリであっても、「こんにちは」や「あなたは誰?」、あるいは「サッカーの結果は?」といった質問を頻繁に入力します。
このようなリクエストごとに、システムプロンプトや履歴のために数千のインプットトークンが消費されます。すべてを高価なLLMに送るのではなく、静的に処理するか、より安価なモデルを使用することができます。Semantic Routerは、これを自動的に実行するためのミドルウェア層として機能します。
このツールはVector Embeddingsを使用して、ユーザーの意図(Intent)を数ミリ秒で分析します。私はこれを1日10,000リクエストのカスタマーサポートチャットボットに適用しました。結果は驚くべきもので、APIコストは45%削減され、平均レスポンス速度は2秒から0.5秒へと短縮されました。
環境構築
このライブラリを実行するにはPython 3.9以上が必要です。まず、コアパッケージと、embeddingsを処理するためのOpenAIドライバーをインストールします。コストを最大限に抑えたい場合は、後にOpenAIをローカルモデルに置き換えることも可能です。
pip install -qU semantic-router openai
次に、APIキーを設定します。本番環境では、セキュリティのために.envファイルを使用することをお勧めします。
export OPENAI_API_KEY="sk-xxx"
インテリジェントなルート(Routes)の設定
Semantic Routerの核心はRouteです。各Routeは、関連するサンプル発話(utterances)のグループを伴う意図を表します。Routerは意味的な類似性を計算し、リクエストをどこへ送るかを決定します。
以下は、一般的な3つのグループ(挨拶、技術サポート、料金確認)の設定例です。
from semantic_router import Route
# 雑談グループ
chitchat = Route(
name="chitchat",
utterances=["こんにちは", "管理者さんこんにちは", "あなたは誰ですか", "誰かいますか", "おはよう"],
)
# 技術サポートグループ
tech_support = Route(
name="technical",
utterances=["ログインエラー", "アップロードボタンが表示されない", "パスワードを忘れた", "APIエラー500"],
)
# コンバージョン(料金確認)グループ
pricing = Route(
name="pricing",
utterances=["料金はいくらですか", "Pro版の購入方法は", "キャンペーンはありますか", "年間維持費について"],
)
運用にはRouteLayerが必要です。これはOpenAIのtext-embedding-3-smallモデルに基づいたルーティングの「頭脳」となります。
from semantic_router.layer import RouteLayer
from semantic_router.encoders import OpenAIEncoder
encoder = OpenAIEncoder()
rl = RouteLayer(encoder=encoder, routes=[chitchat, tech_support, pricing])
運用と結果の処理
ユーザーからクエリを受け取ると、RouteLayerは一致するルート名を返します。定義されたグループ外の質問の場合はNoneを返します。このアプローチにより、メインのLLMに到達する前にノイズを除去できます。
def handle_request(query):
guide = rl(query)
if guide.name == "chitchat":
return "こんにちは!私は仮想アシスタントです。何かお手伝いできることはありますか?"
if guide.name == "pricing":
return "料金表についてはこちらをご覧ください:itfromzero.com/pricing"
# どのルートにも一致しない場合、ここで初めてGPT-4を呼び出す
return call_expensive_llm(query)
実運用における3つの重要なポイント
- Score Threshold(スコア閾値)の調整: デフォルトでRouterには信頼度閾値があります。誤認識が多い場合は、RouteLayerの
score_thresholdパラメータを調整して厳格さを高めてください。 - ローカルエンコーダーの優先利用:
HuggingFaceEncoderとall-MiniLM-L6-v2モデルの使用を検討してください。これはRAM上で直接動作するため、インターネットに依存せず、完全に無料で意図分類を行えます。 - ログによる最適化:
Noneが返された質問をログに記録しましょう。これはutterancesに追加するための貴重なデータソースとなり、Routerの精度を向上させるのに役立ちます。
Semantic Routerは単なるコスト削減ツールではありません。AIアプリケーションをよりプロフェッショナルにし、レスポンスを高速化するための保護レイヤーです。AIエージェントを構築しているなら、最初の認識レイヤーとして今すぐ統合することをお勧めします。

