Open4

LiteLLM

山田涼太山田涼太

はじめに

私がLLMを使う時は主にOpenAIかAnthropicのAPIを利用する。
お客様の要望でAzureのAI Foundryを採用することもある。

最近はAIエージェントに注力しているが、Google ADKでモデルを指定する際に初めてLiteLLMを使った。
LiteLLMについては異なるプロバイダーのモデル利用を統一的な記述方法で書けるものと認識しており、認識通りの使い方ができた。

一方で知人から、LiteLLMには異なるプロバイダーを統合し仮想APIキーを発行したり、ログをまとめて収集するプロキシ機能もあると聞いており全容が気になっていた。

これまで個人でPoC程度のエージェント開発しかしていなかったので必要なかったが、会社として複数プロジェクトで様々なプロバイダーのAPIを利用するようになってきたので1箇所で管理することができたら嬉しいと思い調べる。

山田涼太山田涼太

LiteLLMとは

LiteLLMはYC Winter 2023の採択プロジェクトであり、様々なLLMへ統一的なアクセス方法を提供する。

HPでは特徴として以下が挙げられている。

  1. 支出管理: キーやユーザーなどの粒度、プラットフォームごと、事細かに利用料を把握できる
  2. 予算管理とレート制限: キーやユーザー、チームごとに予算を設定できる
  3. OpenAI互換: AnthropicやGoogleなど他社のLLMをOpenAIと同様に使える
  4. LLMフォールバック: プロバイダーに障害があったとき、他者に切り替える

具体的なプロダクトには以下の2つがある。

  1. LiteLLM Proxy Server
  2. LiteLLM Python SDK

いずれもOSSであり、無料で利用できる(エンタープライズ版はセキュリティやサポートがつく)。

山田涼太山田涼太

LiteLLM Proxy Serverとは

複数のLLMにアクセスするための中央サービス(彼らはLLMゲートウェイと表現)が必要な場合に利用するもの。典型的には生成AI導入チームや機械学習プラットフォームチームが利用する。

組織内のLLMの利用のトラッキングやガードレイルの整備。
予算設定や支出管理が可能。

山田涼太山田涼太

LiteLLM Python SDKとは

Pythonコード内でLiteLLMを利用したいときに使う。典型的にはLLMプロジェクトの開発者が使う。

複数のプロバイダーに対して統一的な記法でコードを書ける。

例えばOpenAIとAnthropicのAPIへのアクセスが同じ書きになり、APIキーとモデル名だけ差し替えれば良い。

from litellm import completion
import os

## set ENV variables
os.environ["OPENAI_API_KEY"] = "your-api-key"

response = completion(
  model="openai/gpt-4o",
  messages=[{ "content": "Hello, how are you?","role": "user"}]
)
from litellm import completion
import os

## set ENV variables
os.environ["ANTHROPIC_API_KEY"] = "your-api-key"

response = completion(
  model="anthropic/claude-3-sonnet-20240229",
  messages=[{ "content": "Hello, how are you?","role": "user"}]
)

そして、レスポンスはOpenAIフォーマットに統一される。エラーもOpenAIのフォーマットにマップされるので例外処理も統一的に書ける。