Skip to content
Go back

OpenRouterで無料でLLMのAPIを利用する

Updated:  at  11:00 PM

Table of contents

Open Table of contents

OpenRouter

無料で使えるLLMのAPIを調べていたところ、OpenRouterというサービスを見つけた。

OpenRouterでは多くのLLMモデルを利用できるのだが、執筆時点で無料で利用できるのは「100%OFF」と表示されている以下の8モデル:

OpenRouterの無料モデル

利用できるモデルの詳細は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&current=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

ここで、

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の状態も表示される。



Previous Post
5 Things I Learned About Leadership from the Death & Rebirth of Microsoft
Next Post
Findyイベントアーカイブ