Table of contents
Open Table of contents
OpenRouter
無料で使えるLLMのAPIを調べていたところ、OpenRouterというサービスを見つけた。
OpenRouterでは多くのLLMモデルを利用できるのだが、執筆時点で無料で利用できるのは「100%OFF」と表示されている以下の8モデル:
利用できるモデルの詳細はSupported Modelsを参照。
日本語が得意なモデルは?
WebUI上から複数モデルとChatすることができるので、無料モデルがどれくらい日本語を理解できるのか見てみた。
ざっとみただけだが、OpenChat3.5はなかなか良さそう。 その他のモデルは少々厳しいか?
OpenRouterのAPIを利用する
APIを利用するには、OpenRouterのアカウントを作成し、APIキーを取得するだけ。クレジットカードの登録も不要。
OpenAIのAPIと互換性があるので、Pythonであればpip install openai
で利用開始できる。Quick Startにサンプルコードものっている。
今回は個人的に気に入っている、LLMというCLIツールを使ってAPIを利用してみる。LLM
は名前の通り、LLMをターミナルから利用できるCLIツール。(分かりやすいがややこしい。)
LLM
では色々なPluginが存在しているのだが、OpenRouterのAPIを利用するためのPluginもあり、サクッと試すにはおすすめ。
cliの利用準備:
pip install llm
llm install llm-openrouter
llm keys set openrouter
# プロンプトで発行したAPIキーを入力
これで準備は完了。以下のように利用できる:
llm -m openrouter/openchat/openchat-7b "PythonでCSVファイルを読み込むコードを書いて"
-m
は利用するモデルの指定で、openrouter/openchat/openchat-7b
は先ほどのOpenChat3.5。
以下LLMからの回答:
PythonでCSVファイルを読み込むには、
csv
モジュールを使用します。以下に例を示します。
import csv
# CSVファイルのパス
csv_file_path = 'example.csv'
# CSVファイルを読み込む
with open(csv_file_path, mode='r', encoding='utf-8') as csvfile:
# CSVファイルを読み込む
csv_reader = csv.reader(csvfile)
# ファイル内の行を順に読み込む
for row in csv_reader:
print(row)
この例では、
example.csv
という名前のCSVファイルを読み込み、その内容を順に表示しています。csv.reader
を使用して、CSVファイルの行を順に読み込むことができます。csvfile
は、with
文の中で自動的に閉じられるため、ファイルが適切にクローズされることが保証されます。
無料にしてはなかなか良さそうだ。
コマンドの出力をパイプして渡す
だが、これだけだとGPT3.5使えば良い話なので、コマンド結果をパイプしながら作成し、LLM
に渡してみる。
無料で使える天気予報APIをcurlで叩き、東京駅周辺の天気情報をJSON形式で受け取り、LLMに渡して要約してもらった:
# 東京駅の緯度軽度
LON=139.76
LAT=35.68
# JSON形式で天気予報を取得し、jqで整形してからLLMに渡す
curl "https://api.open-meteo.com/v1/forecast?latitude=${LAT}&longitude=${LON}1¤t=temperature_2m,wind_speed_10m&hourly=temperature_2m,relative_humidity_2m,wind_speed_10m" \\
| jq \\
| llm -m openrouter/openchat/openchat-7b \\
-s "あなたは優秀な日本語アシスタントです。天気予報のAPIからのレスポンスをJSON形式で渡すので、内容を要約してください" \\
-o max_tokens 1000
ここで、
-s
はシステムプロンプトの指定。-o
はモデルのオプションの指定。max_tokens
は生成するトークンの最大数を指定。
LLM
で利用できるオプションはllm models --options
で表示できる。(参考)
以下LLMからの回答:
天気予報APIから受けたデータを要約しました。現在の気温は10.9℃で、最高気温は21.8℃であり、最低気温は1.8℃です。湿度は95%で、風速は11.8km/hです。この週の天気予報は、多くの時間で雨が降り、気温は低い予定です。1月20日~26日の間、最高気温は11℃、最低気温は1℃です。湿度は高く、風速は中程度です。
日本語として違和感のない文章で要約してくれている。
まとめ
OpenAIのAPIは有料だが、OpenRouterのAPIは無料で利用できる。ChatGPT程の精度はないが、無料の範囲でそれなりに日本語も扱えるモデルも揃っているので、十分に遊べる。
今回はCLIから利用したが、openaiのAPIを使ってPythonなりJavascriptで実装してみるのも良さそうだ。
追記(2025/03/18): OpenRouterから無料でGeminiが使えるようになった
久々に見ていたら、GeminiやGemmaなど、googleのモデルもOpenRouterで無料で利用できるようになっていた。(GeminiのAPI自体は、OpenRouterを使わずとも、Googleアカウントがあればクレカ登録不要で利用はできる)
llm-openrouterのPluginも進化していて、v0.4では無料のモデルを一覧で表示できるようになった。
Googleの無料モデルは、執筆時点で以下:
❯ llm openrouter models --free | grep google
- id: google/gemma-3-1b-it:free
- id: google/gemma-3-4b-it:free
- id: google/gemma-3-12b-it:free
- id: google/gemma-3-27b-it:free
- id: google/gemini-2.0-flash-lite-preview-02-05:free
- id: google/gemini-2.0-pro-exp-02-05:free
- id: google/gemini-2.0-flash-thinking-exp:free
- id: google/gemini-2.0-flash-thinking-exp-1219:free
- id: google/gemini-2.0-flash-exp:free
- id: google/gemini-exp-1206:free
- id: google/learnlm-1.5-pro-experimental:free
- id: google/gemma-2-9b-it:free
レートリミットの制限はあるが、もはやOpenChat3.5
とは比べ物にならない精度が期待できる。
❯ llm -m 'openrouter/google/gemini-2.0-flash-lite-preview-02-05:free' こ んにちは。あなたは日本語が得意ですか?
INFO: HTTP Request: POST https://openrouter.ai/api/v1/chat/completions "HTTP/1.1 200 OK"
はい、日本語は得意です。日本語の読み書き、会話、理解はできます。 質問や何かお手伝いできることがあれば、遠慮なくお尋ねください。
1年前はOpenChat3.5が精度が高いと感じていたが、今はGoogleのGeminiが無料で使えるので、もはやOpenChat3.5は使う理由がないかもしれない。1年でここまで進むとは、驚きだ。
ちなみにllm-geminiというGeminiAPI専用のPluginもあるので、Geminiを使う場合はこちらを使うと良い。JSON形式での出力や、音声、動画ファイルの入力などにも対応していて、とても使いやすい。
さらに、llm openrouter key
でAPIキーの使用状況も確認できる:
❯ llm openrouter key
INFO: HTTP Request: GET https://openrouter.ai/api/v1/auth/key "HTTP/1.1 200 OK"
{
"label": "sk-or-v1-a3b...0a8",
"limit": null,
"usage": 6.1435e-05,
"is_provisioning_key": false,
"limit_remaining": null,
"is_free_tier": true,
"rate_limit": {
"requests": 10,
"interval": "10s"
}
}
rate limitの状態や、free_tierの状態も表示される。