LiteLLM:LLMの銀河を統合し、シームレスな開発を実現

プロジェクト概要

LiteLLMは、100を超える大規模言語モデル(LLM)APIとの連携を簡素化するために設計されたPython SDKおよびプロキシサーバー(LLMゲートウェイ)です。Bedrock、Azure、OpenAI、VertexAI、Cohere、Anthropic、Sagemaker、HuggingFace、Replicate、Groqなど、様々なLLMプロバイダーをOpenAIに似た統一されたフォーマットで利用できます。

LiteLLMは、以下のような複雑な問題を解決します。 - プロバイダー固有の「補完」「埋め込み」「画像生成」エンドポイントへの入力変換。 - 異なるLLM間での出力フォーマットの統一。 - ルーター機能を使った複数のデプロイメント(例: Azure/OpenAI)間でのリトライおよびフォールバックロジックの実装。 - LiteLLMプロキシサーバーによるプロジェクト、APIキー、モデルごとの予算およびレート制限の適用。

使用方法

LiteLLMはpipでインストールできます。

pip install litellm

基本的なチャット補完

from litellm import completion
import os

# APIキーの環境変数を設定
os.environ["OPENAI_API_KEY"] = "your-openai-key"
os.environ["ANTHROPIC_API_KEY"] = "your-anthropic-key"

messages = [{ "content": "Hello, how are you?","role": "user"}]

# OpenAIの呼び出し
response = completion(model="openai/gpt-4o", messages=messages)

# Anthropicの呼び出し
response = completion(model="anthropic/claude-3-sonnet-20240229", messages=messages)
print(response)

非同期呼び出し

from litellm import acompletion
import asyncio

async def test_get_response():
    user_message = "Hello, how are you?"
    messages = [{"content": user_message, "role": "user"}]
    response = await acompletion(model="openai/gpt-4o", messages=messages)
    return response

response = asyncio.run(test_get_response())
print(response)

ストリーミングレスポンス

from litellm import completion

response = completion(model="openai/gpt-4o", messages=messages, stream=True)
for part in response:
    print(part.choices[0].delta.content or "")

ロギングと可観測性

LiteLLMは、コールバックを通じて様々なロギングおよび可観測性ツール(Lunary、MLflow、Langfuse、DynamoDB、S3、Helicone、Promptlayer、Traceloop、Athina、Slack)をサポートしています。

from litellm import completion
import os
import litellm

# ロギングツールとAPIキーの環境変数を設定
os.environ["LUNARY_PUBLIC_KEY"] = "your-lunary-public-key"
os.environ["HELICONE_API_KEY"] = "your-helicone-auth-key"
os.environ["LANGFUSE_PUBLIC_KEY"] = "" # 実際のキーを使用
os.environ["LANGFUSE_SECRET_KEY"] = "" # 実際のキーを使用
os.environ["ATHINA_API_KEY"] = "your-athina-api-key"
os.environ["OPENAI_API_KEY"] = "your-openai-key"

# コールバックを設定
litellm.success_callback = ["lunary", "mlflow", "langfuse", "athina", "helicone"]

response = completion(model="openai/gpt-4o", messages=[{"role": "user", "content": "Hi 👋 - i'm openai"}])

LiteLLMプロキシサーバー

LiteLLMプロキシサーバーを実行する方法:

  1. プロキシの依存関係を含めてインストールします。
    pip install 'litellm[proxy]'
    
  2. プロキシを起動します。
    litellm --model huggingface/bigcode/starcoder
    # INFO: Proxy running on http://0.0.0.0:4000
    
  3. OpenAI SDKを使用してプロキシにリクエストを送信します。
    import openai # openai v1.0.0+
    client = openai.OpenAI(api_key="anything",base_url="http://0.0.0.0:4000") # プロキシをbase_urlに設定
    response = client.chat.completions.create(model="gpt-3.5-turbo", messages = [
        {
            "role": "user",
            "content": "this is a test request, write a short poem"
        }
    ])
    print(response)
    

主要機能

  • 統一されたAPIインターフェース: OpenAIのような1つのAPIフォーマットで100以上のLLMに接続できます。
  • プロバイダーサポート: Bedrock、Azure、OpenAI、VertexAI、Cohere、Anthropic、Sagemaker、HuggingFace、Replicate、Groqなど、主要なLLMプロバイダーをサポートしています。
  • 統一された出力: すべてのテキストレスポンスは ['choices'][0]['message']['content'] で一貫してアクセスできます。
  • ルーター(リトライ/フォールバックロジック): 複数のLLMデプロイメント間でリトライとフォールバックのメカニズムを自動的に処理します。
  • ストリーミングサポート: 統合されているすべてのモデルでストリーミングレスポンスをサポートします。
  • 非同期操作: パフォーマンス向上のための非同期API呼び出しを提供します。
  • 可観測性: コールバックを通じて様々なロギングおよび可観測性ツール(例: Lunary、MLflow、Langfuse、Helicone)と統合します。
  • LiteLLMプロキシサーバー(LLMゲートウェイ):
    • コスト追跡: プロジェクトごとの支出を監視します。
    • ロードバランシング: 複数のLLMデプロイメントにリクエストを分散します。
    • レート制限: プロジェクト、APIキー、モデルごとにレート制限を適用します。
    • キー管理: PostgreSQLデータベースと連携し、モデル、期間、メタデータに関する詳細な制御を持つプロキシキーを作成・管理します。
    • Web UI: プロキシサーバーを管理するためのユーザーインターフェース(/ui)を提供し、予算やレート制限の設定なども可能です。
  • エンタープライズ機能: 商用ユーザー向けに、カスタム統合やSLAを含む、強化されたセキュリティ、ユーザー管理、専門的なサポートを提供します。

対象ユーザー

  • 開発者およびエンジニア: さまざまなLLMプロバイダーと連携するための統一されたインターフェースを求めており、コードと管理を簡素化したい方。
  • AI/MLチーム: LLMへのアクセス管理、利用状況の監視、コスト管理、堅牢なリトライ/フォールバック戦略の実装に関心がある方。
  • LLM搭載アプリケーションを構築する組織: AIインフラのためのレート制限、予算管理、可観測性といった機能を必要としている方。
  • 研究者: 複数のLLMモデルやプロバイダーを効率的に試したい方。

プロジェクトリンク

アプリケーションシナリオ

  • マルチLLMアプリケーションの構築: コアとなるアプリケーションロジックを変更することなく、異なるLLM(例: 創造的な文章にはGPT-4、要約にはClaude)を簡単に切り替えたり組み合わせたりできます。
  • コスト最適化と予算管理: プロキシを使用して、ユーザー、プロジェクト、またはAPIキーごとに厳格なクォータやソフトな予算を設定し、予期せぬ支出を防ぎます。
  • 高可用性と信頼性の確保: ルーターを利用して、LLMプロバイダーが失敗したりレート制限に達したりした場合に、代替のLLMプロバイダーやデプロイメントへの自動フォールバックを可能にします。
  • LLMモデルのA/Bテスト: プロダクション環境でトラフィックを異なるモデルにシームレスにルーティングし、パフォーマンスとコストを比較します。
  • 集中型LLMゲートウェイ: 組織内のすべてのLLM呼び出しに対する単一のエントリーポイントを確立し、セキュリティ、ロギング、アクセス制御を簡素化します。
  • 監視と可観測性: 様々な可観測性ツールと統合することで、LLMの利用状況、パフォーマンス、コストに関する洞察を得ます。
  • LLMエージェント/オーケストレーションの開発: チャット、埋め込み、画像生成など、多様なLLM機能を扱う必要があるエージェント向けに、堅牢で柔軟なバックエンドを提供します。

この記事を共有