複数のモデルを同じインタフェースで扱える「aisuite」を試す
GitHubのトレンドかなんかで知った。
GitHubレポジトリ
aisuite
複数の生成系AIプロバイダーを統一的に扱うためのシンプルで統一されたインターフェース。
aisuite
は、開発者が複数のLLM(大規模言語モデル)を標準化されたインターフェースを通じて簡単に利用できるようにします。OpenAIのインターフェースに似た使い方ができるため、最も人気のあるLLMとのやり取りや結果の比較が簡単に行えます。Pythonクライアントライブラリの薄いラッパーであり、コードを変更することなく、異なるLLMプロバイダーからの応答を切り替えたりテストしたりすることができます。現在、このライブラリは主にチャット生成に焦点を当てていますが、近い将来にはさらなるユースケースをカバーする予定です。現在サポートしているプロバイダーは以下の通りです: OpenAI、Anthropic、Azure、Google、AWS、Groq、Mistral、HuggingFace、Ollama。
aisuite
は安定性を最大化するために、プロバイダーへの呼び出しにはHTTPエンドポイントまたはSDKを使用します。
Andrew Ng先生のレポジトリらしい。
インストール
パッケージインストール。extrasで使用するLLMプロバイダを指定することができる。今回はすべて使えるようにする。
!pip install "aisuite[all]"
!pip freeze | grep -i aisuite
aisuite==0.1.6
今回はOpenAIとAnthropicで試すこととする。APIキーを環境変数にセット。
import os
from google.colab import userdata
os.environ['OPENAI_API_KEY'] = userdata.get('OPENAI_API_KEY')
os.environ['ANTHROPIC_API_KEY'] = userdata.get('ANTHROPIC_API_KEY')
chat completionリクエスト
import aisuite as ai
client = ai.Client()
# モデル名は "<プロバイダ>:<モデル名>" で指定する
models = ["openai:gpt-4o", "anthropic:claude-3-5-sonnet-20240620"]
messages = [
{"role": "system", "content": "大阪弁で回答して"},
{"role": "user", "content": "なんかジョークを言ってみて。"},
]
for model in models:
response = client.chat.completions.create(
model=model,
messages=messages,
temperature=0.75
)
print(f"=== {model} ====")
print(response.choices[0].message.content)
print()
=== openai:gpt-4o ====
ええで!ほんなら、こんなんどうや?
「昨日、冷蔵庫開けたらペンギン入っててん。びっくりして『何してんねん!?』って聞いたら、『冷え冷えやで!』って言うてんねん。」
どうや?ちょっと笑えたかな?
=== anthropic:claude-3-5-sonnet-20240620 ====
おおきに、ジョークいうてもろたんやな。ほな、聞いてや。
「なんでカエルは電話せえへんのか知ってる?」
「なんでやねん?」
「ケロケロ(圏外)やからや!」
ちょっとしょーもないジョークやけど、ええ感じやったかな? こんなんでよかったら、もっと言うで!
抽象化されているのはどうやらこれだけ。例えば以下のようなものは抽象化されていないと思われる。
- Tool Calls
- ストリーミング
- Structured Output
まとめ
立ち位置としてはLiteLLM的なものだと思うのだけど、LiteLLMに比べると機能はかなり限定的。ではなぜトレンドになっていたのだろう?GitHubのStar Historyからは確かにトレンドになっていたと思われる。
そのあたりの疑問を持つ人はちらほらいる様子。
車輪の再発明するぐらいならLiteLLMにリソースを使うべきだ、とか開発者の立場からすれば余計なお世話なのだけど、ただ、LiteLLMのような似たようなツール自体はすでにあってどういう違いがあるのか?という聞き方はわかる。
でレポジトリにはサンプルが複数用意されているexamplesのディレクトリがある。
ここのサンプルを見てて自分が思ったのは、
- 異なるLLMに同じプロンプトを投げて違いを見る
- プロンプトを工夫して回答が改善されるのを確認する
ということを体験するということではないだろうか?つまり学習用途の意味合いが強いという印象。このあたりはAndrew Ng先生の講座とかとも関連するのかもしれない。
なので、LLMアプリ開発者の立場でツールとして使う、ということとは異なるスコープなのではないかと思う。
ただそれでもここまでのトレンドになっているのはちょっと正直わからないところではある。Andrew Ng先生がそれだけ影響力があるということなのかもしれない。