- Mozilla AIチームが開発した、20以上のLLMプロバイダーを1つの関数で利用できるPythonライブラリ
- OpenAI、Anthropic、Google、Mistral、AWS Bedrock などのモデルを切り替える際は
provider_id/model_id だけを変更すればよい
- 公式プロバイダーSDKを優先的に活用して互換性の問題を最小限に抑え、プロキシ/ゲートウェイサーバーを別途インストールする必要がなく、pipでインストール後すぐに使用できる
- 開発者フレンドリーな設計で、完全なIDE型ヒント、直感的な例外処理、カスタム例外、ドキュメントとクイックガイドを提供
- 軽量ルーターによりフレームワーク非依存で、別途プロキシ/ゲートウェイサーバー不要(API Keyがあればすぐに使える)
- 既存ソリューションの問題を解決し、アクティブにメンテナンスが進められている:Mozilla の any-agent など実際の製品で利用中
- LiteLLM: 公式SDKではなく独自実装 → 互換性やバグの懸念がある
- AISuite: モジュラー構造だが管理や型付けが不十分
- フレームワーク依存型: プロジェクトごとに再び断片化する
- プロキシ専用: 別途サーバーが必要で、複雑さが増す
関連ドキュメント
3件のコメント
LLMプロバイダーごとにキーを管理しないといけないはず。
Hacker Newsのコメント
テキストAPIでは大きな互換性の問題を経験したことはなく、さまざまなAPIを標準化するには独自にインターフェースを実装する必要があるのは理解できる
特定のルーターを作るにはこのプロセスが不可欠だ
試しにライブラリとして使ってみたが、最終的にはSimonのllmに移行した。Simonに感謝したい
ストリーミングの挙動やタイムアウト処理、新機能の導入といった境界条件で違いがより表れやすい
こちらでもAPI正規化のためにインターフェースを作り直しているが、SDKを使うかどうかはどこでレイヤーを分けるかの違いにすぎない
SDKを採用するのは主に保守性の好みの問題であり、LiteLLMのアプローチに根本的な欠陥があるからではない
TogetherのSDKにはApache Arrowという60MBの依存が含まれていたことがあり、これを自分でパッチしてオプション化した
依存バージョンを強制的に固定されると、自分のプロジェクトと衝突する可能性がある
多くの依存関係を引き込むライブラリより、OpenAPI/RESTだけを使う方がよいと思っている
公式SDKを使うだけですべての互換性問題が解決するわけではなく、any_llmも結局は公式SDKとの直接的な互換性維持作業が必要になる
どちらの方式がより優れているかを明確に言うのは難しい
ユーザーの立場では、プロキシが公式SDKを使っているかどうかで実運用上の違いはない
ただし、プロキシ開発者には利点があるかもしれない
たとえば最近、LiteLLMではDeepseek Reasoningの処理で問題があり、同期/ストリーミング応答の両方でreasoning部分が欠落していたことがあった
私の経験では、LiteLLMは実際には非常に堅牢に動作する
プロバイダーはAPI変更がある場合、事前告知をきちんとしてくれるし、LiteLLMが原因で問題になったことはない
LLMに関する否定的な仮想上の欠点は、この文章でしか見かけない
プロキシ/ゲートウェイソリューションとしてOpenRouterやPortkeyの話もしていたが、実際にはOpenRouterはユーザーが自分でサーバーを立てる必要がなく、エンドポイントに直接APIコールするだけでよい
この記事ではOpenRouterをセルフホスト型プロキシと誤認している
さらにAISuiteはAndrew NGが作った製品だが、ブログは「2024年12月以降メンテナンスされていない」と書いていたものの、実際にはリリースタグがないだけで、小規模なコミュニティープロジェクトではタグ付けをあまりしないこともある
こうした点をファクトチェックせずにブログに載せるのは問題だと感じた
Mozillaブランドでなければ、詐欺やマルウェアだと誤解したかもしれない
名前もAnything-LLMとあまりに似ていて混乱する
これまでLiteLLMを使ってきたが、実際の内部実装を見ると非常に複雑で問題が多かった
例を挙げると、ここ数か月のあいだOllama項目のStructured Outputが完全に壊れたまま放置されていたし、ドキュメントもまったく整理されていなかった
Pythonを選んだ理由は、おそらく大半のSDKがPythonベースだからだろう
ただ、インタープリターなしで複数言語に移植できる形だったなら、本当に革新的だったと思う
本当に普遍的なソリューションを作るには、モデルのランタイムと言語を完全に分離する必要があり、それははるかに難しい問題だが大きな前進でもある
Mozilla側のプロジェクト(LiteLLMを含む)はすでに多様なインターフェースをサポートしているため、すぐに複数のモデルを使える点が強みだ
別途プロキシ/ゲートウェイサーバーなしで、そのまま複数のLLM Providerに接続できる。LiteLLMとの比較については経験不足でよく分からない
研究職で必要になって開発し始めた
既存プロジェクトから着想を得て、より汎用的な用途向けに作った
https://github.com/proxai/proxai
https://proxai.co/
私も最近、似たような**LLM抽象化レイヤー** を公開した
pip installで簡単に使えて、Langchain互換性を重視しているので既存システムにも容易に差し替えられる
さらに、Rate Limit超過時には仮想プロバイダー経由の自動フェイルオーバーも可能だ
Usage/Logs機能で実際のLLM使用量を可視化できるし、Cache機能によって繰り返しテスト時のコスト削減にも大いに役立っている
良い文章をありがとうございます。ちょうど今日、27回目のリファクタリングをしていたところなんですよね。
C++でやっていて、javascriptでやって、今度はまた rust で…