AI連携の万能ツール!BerriAI/litellmでLLM活用を劇的に効率化
若手刑事(以下、若手)
はい、ベテランさん! なんだか難しそうな顔してますね。一体どんなヤマなんですか?
ベテラン
ヤマっていうか、最新のツールだな。最近、捜査資料の解析とか、事情聴取のログ分析とか、AIを使う機会が増えてきただろ?
若手
ええ、AIの導入には積極的ですもんね、署長も。でも、AIって言っても、会社ごとに使うやつが違うから、その都度設定を変えたり、コードを書き直したりするのが結構面倒で…。
ベテラン
そう、そこなんだ! 今回の話は、その「面倒」を解決してくれるかもしれない、すごいヤツなんだ。名付けて…「AI連携の万能ツール」!
若手
おお、なんかワクワクしますね! 具体的にどんなところが万能なんですか?
ベテランこのツールはな、いわゆる「LLM(大規模言語モデル)のゲートウェイ」なんだ。若手、お前、いつもChatGPTとかClaudeとか、色々なAIサービスを使ってるだろ?
若手
はい! 文章の要約や、アイデア出しにめちゃくちゃ助かってます!
ベテラン
だがな、サービスごとにAPIの形式が違ったり、認証方法が異なったりして、いちいちコードを書き換えるのが手間だったはずだ。この「AI連携の万能ツール」は、そのあたりの問題を一気に解決してくれるんだ。
若手
へえ! つまり、一つのやり方で色んなAIを使えるってことですか?
ベテラン
その通り! まるで、どんな鍵でも開けられるマスターキーみたいなもんだな。具体的には、OpenAIのAPI形式に統一して、100種類以上のLLMにアクセスできるようになるんだ。例えば、AWSのBedrockやAzure OpenAI、GoogleのVertex AI、Cohere、Anthropic、Sagemaker、HuggingFace、Replicate、Groqなんかも全部対応してる。
ベテランまず一番のメリットは、「開発の効率化」だ。
APIの統一インターフェース
各LLMプロバイダのAPIを個別に学ぶ必要がなくなる。OpenAI形式で一度書けば、他のLLMでもそのまま使えるから、学習コストも開発時間も大幅に削減できる。
ベンダーロックインの回避
特定のLLMプロバイダに依存することなく、必要に応じて簡単に別のLLMに切り替えられる。例えば、あるLLMの料金が高騰したり、性能が落ちたりしても、すぐに別のLLMに乗り換えられるから、システムの柔軟性が格段に上がる。
コスト最適化
複数のLLMを比較検討しやすくなるから、最も費用対効果の高いLLMを選んで利用できる。
A/Bテストの実施
異なるLLMを使って同じタスクを実行し、パフォーマンスを比較するといったA/Bテストも容易になる。どのLLMが自分のユースケースに最適か、客観的に評価できるわけだ。
フォールバック機構
あるLLMがダウンしたり、エラーを返したりした場合に、自動的に別のLLMに切り替えるといった「フェイルオーバー」の仕組みを簡単に構築できる。システムの信頼性が向上するんだ。
若手
おお、それはすごい! いつも「もしChatGPTが使えなくなったらどうしよう」って思ってましたけど、これなら安心ですね!
ベテラン
そうだろ? 次に、このツールの導入方法について説明するぞ。
ベテラン
導入は非常に簡単だ。Pythonのパッケージとして提供されているから、pipコマンドでインストールするだけだ。
若手
pip installですね! それは得意です!
ベテラン
よし。まずはPythonの実行環境があることを確認してくれ。
ステップ1
インストール
pip install litellm
ベテラン
これでPythonのSDKとして使えるようになる。もしProxy Serverとして使いたい場合は、追加でuvicornもインストールしておくといい。
pip install litellm uvicorn
ベテラン
あとは、使用したいLLMのAPIキーを設定する必要がある。環境変数に設定するのが一般的だが、コード内で直接設定することも可能だ。
例えば、OpenAIのAPIキーを使うなら、こんな感じだな。
export OPENAI_API_KEY="sk-your-openai-api-key"
若手
なるほど、APIキーの設定はいつも通りですね!
ベテラン
じゃあ、実際にどうやって使うのか、簡単な例を見せてやるぞ。今回は、OpenAIのGPT-3.5-turboを使って、文章を生成する例だ。
若手
お願いします!
import litellm
# 環境変数にAPIキーが設定されていない場合、ここで設定することも可能
# import os
# os.environ["OPENAI_API_KEY"] = "sk-your-openai-api-key"
try:
response = litellm.completion(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "こんにちは!自己紹介してください。"}
]
)
print(response.choices[0].message.content)
except Exception as e:
print(f"エラーが発生しました: {e}")
若手
おお! いつも使ってるOpenAIのAPIとほとんど同じコードで書けますね! import openaiがimport litellmになっただけだ!
ベテラン
その通り! これが「統一インターフェース」の威力だ。じゃあ、今度はモデルをAnthropicのClaudeに切り替えてみよう。通常なら、AnthropicのSDKをインストールして、コードを書き直す必要があるが…
import litellm
import os
# 環境変数にAnthropicのAPIキーを設定しておく
# export ANTHROPIC_API_KEY="sk-your-anthropic-api-key"
try:
response = litellm.completion(
model="claude-3-opus-20240229", # モデル名をClaudeのモデルに変更
messages=[
{"role": "user", "content": "こんにちは!自己紹介してください。"}
]
)
print(response.choices[0].message.content)
except Exception as e:
print(f"エラーが発生しました: {e}")
若手
ええっ!? モデル名を変えるだけで、もうClaudeに繋がってるんですか!? コードの変更、ほとんどないじゃないですか! これは革命的ですね!
ベテラン
そうだろ? これがこのツールの真骨頂なんだ。もしAWSのBedrockを使いたければ、modelをBedrockのモデルIDに、例えば"bedrock/anthropic.claude-v2"のように変更するだけだ。
ベテラン
さらに、このツールはProxy Serverとしても利用できるんだ。これは、Pythonアプリケーションの外から、HTTPリクエストを通じてLLMにアクセスしたい場合に便利だ。例えば、WebアプリケーションからLLMを使いたい場合とかだな。
若手
Proxy Server! なんだか難しそうですね…。
ベテラン
心配いらない。これも起動はコマンド一つで簡単だ。
ステップ1
サーバーを起動
ターミナルで以下のコマンドを実行する。
litellm --port 8000
ベテラン
これで、ローカルのポート8000でProxy Serverが起動する。
ステップ2
クライアントからProxy Server経由でLLMを呼び出す
別のターミナルや、Webアプリケーションのバックエンドなどから、HTTPリクエストを送る。例えば、curlコマンドを使うとこうなる。
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-3.5-turbo",
"messages": [
{"role": "user", "content": "Proxy Server経由でこんにちは!"}
]
}'
若手
なるほど! Webアプリからも使えるようになるんですね! これなら、フロントエンドの開発者もLLMを使いやすくなりそう!
ベテラン
その通りだ。このProxy Serverを立てておけば、様々な言語で書かれたクライアントアプリケーションから、統一されたAPI形式でLLMを利用できる。
ベテラン
どうだ、若手? この「AI連携の万能ツール」、どれくらい役に立つか分かったか?
若手
はい、ベテランさん! もう目からウロコがポロポロ落ちまくりです! これがあれば、もうAIのベンダーに振り回されることなく、自由に、効率的に開発を進められますね! まさに、捜査現場でいうところの、どんな証拠品にも対応できる「万能鑑識キット」みたいです!
ベテラン
うまいこと言うな。これからは、もっとAIを柔軟に活用して、効率的に捜査を進められるようになるぞ。よし、早速署内に導入を検討してみるか!
若手
はい! 私も勉強して、使いこなせるように頑張ります!