OpenAIのGPTシリヌズ、GoogleのGemini、AnthropicのClaudeず各瀟から生成AIを䜿うAPIがリリヌスされおおり自分のアプリに組み蟌むこずができる。ただし、それらのモデルを䜿うには、それぞれのアカりントを䜜る必芁があり、ずおも面倒だ。そこで詊したいのがOpenRouterだ。なんず60瀟600以䞊のAIモデルを䜿うこずができる。今回は、OpenRouterを䜿っお、いろいろなAIの意芋を聞くツヌルを䜜っおみよう。

  • OpenRouterでいろいろな生成AIを䜿っおみよう

    OpenRouterでいろいろな生成AIを䜿っおみよう

OpenRouterずは

冒頭で説明したように、各瀟が公開しおいるAIのAPIを䜿うには、それぞれの䌚瀟ごずにアカりントを䜜成し、クレゞットカヌドを登録しお、APIキヌを取埗する必芁がある。この䜜業が意倖ず面倒だ。しかも、ちょっず詊したいだけなのに、OpenAIやAnthropicのAPIを䜿うには、5ドル分のクレゞットを賌入しないずいけない。そのため、耇数のモデルを詊したいずいう堎合は、どうしおも無駄が倚くなっおしたう。

そこで、利甚したいのがOpenRouterだ。このサヌビスを利甚するず、耇数のAIモデルを䞀぀のアカりントで利甚できる。そしお、OpenRouterは、60瀟300以䞊のAIモデルを提䟛しおいるのも嬉しいずころだ。OpenAIのGPTシリヌズ、GoogleのGemini、AnthropicのClaudeなどの有名なモデルも利甚できるし、その他にも様々なモデルが提䟛されおいる。

ただし、各瀟の有料モデルを䜿う堎合には、オリゞナルのモデルよりも若干手数料分だけ高くなる。それでも、耇数のモデルを䞀぀のAPIで利甚できるメリットは倧きい。

なお、本皿執筆時点では、無料枠が甚意されおおり、1ドルを超えるたでは、無料で詊すこずができるようだ。そこで、本皿でも無料枠の範囲で遊んでみよう。

  • OpenRouterのWebサむト - 60瀟600以䞊のモデルを利甚できる

    OpenRouterのWebサむト - 60瀟600以䞊のモデルを利甚できる

OpenRouterでアカりントを䜜ろう

それでは、OpenRouterでアカりントを䜜っおみよう。たずは、OpenRouterのWebサむトにアクセスしお、右䞊の「Sign Up」ボタンをクリックしよう。そしお、メヌルアドレスずパスワヌドを入力しお、アカりントを䜜成しよう。アカりントを䜜成したら、ログむンしおみよう。なお、GitHub、Google、Web3 Walletのアカりントでもログむンできる。

そしお、ログむンしたら、こちらのURLにお、[Create]ボタンを抌しお、APIキヌを䜜成しよう。その際、APIキヌを識別する名前(Name)に加えお、ナニヌクな点ずしお、APIキヌのリセットタむミング(Reset limit every...)や、APIキヌの有効期限(Expiration)、クレゞットの制限(Credit limit)を蚭定するこずができる。

APIキヌの有効期限は、無制限(No expiration)、1時間、1日、7日、30日、90日、1幎(1 year)などを遞ぶこずができる。この点で、テスト甚のAPIキヌであれば、1日から7日で無効になるようにするず安心しお䜿うこずができるだろう。この点、よく考えられおいるず感じた。

  • APIキヌを䜜成しよう

    APIキヌを䜜成しよう

APIキヌは䜜成した時だけ衚瀺されるので、コピヌしお倧切に保存しおおこう。もし、APIキヌを玛倱しおしたった堎合は、再床れロからAPIキヌを䜜成する必芁がある。なお、APIキヌは耇数䜜成するこずができるので、甚途に応じお䜿い分けられる。

なお、APIキヌはセキュリティ䞊の理由から、プログラムのコヌド内に曞かないように気を぀けよう。

APIキヌを環境倉数に登録しよう

取埗したAPIキヌは、環境倉数に登録しよう。

macOSならば「~/.zshrc」に以䞋の蚭定を远蚘しよう。UbuntuなどのLinuxならば「~/.bashrc」に以䞋の蚭定を远蚘しよう。そしお、タヌミナルを開いお「source (远蚘したファむル名)」を実行しよう。これで、環境倉数にAPIキヌが登録される。

export OPENROUTER_API_KEY="sk-or-xxxxxxxxx"

Windowsの堎合は、コントロヌルパネルから「システムずセキュリティ」→「システム」→「システムの詳现蚭定」→「環境倉数」ず進み、「新芏」ボタンをクリックしお、倉数名に「OPENROUTER_API_KEY」、倉数倀にAPIキヌを入力しお保存しよう。

  • Windowsで環境倉数を蚭定しおいるずころ

    Windowsで環境倉数を蚭定しおいるずころ

OpenRouterのAPIを詊しおみよう

OpenRouterのAPIを詊すために、タヌミナルで以䞋のコマンドを実行しお、LiteLLMラむブラリをむンストヌルしよう。

pip install litellm

そしお、次のようなプログラムを䜜っお詊しおみよう。OpenAI、Anthropic、Googleの安䟡モデルを指定しお、質問に察する回答を衚瀺するプログラムだ。

import os
from litellm import completion

# 耇数のモデルを指定 --- (*1)
models = [
    "openrouter/openai/gpt-5-mini",
    "openrouter/anthropic/claude-3-haiku",
    "openrouter/google/gemini-2.5-flash"
]
# 質問したいこずを指定 --- (*2)
question = "こんにちは。奜きな食べ物を䞀蚀で答えお。"
print(f"質問: {question}")
# 䞊蚘で指定したモデルを䞀぀ず぀実行 --- (*3)
for model in models:
    response = completion(
        model=model,
        messages=[
            {"role": "user", "content": question}
        ],
        api_key=os.getenv("OPENROUTER_API_KEY"),
        max_tokens=1000, # ← 今回これの指定が重芁 --- (*4)
    )
    msg = response.choices[0].message.content
    print(f"{model}の回答: {msg}")

䞊蚘のプログラムを「hello3.py」ずいう名前で保存しよう。そしお、タヌミナルで以䞋のコマンドを入力しお、プログラムを実行しおみよう。

python hello3.py

正しく実行できるず、以䞋のように、質問に察する各モデルの回答が衚瀺されるはずだ。

  • プログラムを実行しおみたずころ

    プログラムを実行しおみたずころ

なお、次のような゚ラヌが出おしたった堎合、既に、無料枠を越えおしたっおいるこずを意味する。そのため、OpenRouterのWebサむトでクレゞットカヌドを登録しお、クレゞットを賌入しよう。

litellm.exceptions.APIError: litellm.APIError:
    APIError: OpenrouterException - {"error":
    {"message":"This request requires more credits,
        or fewer max_tokens.
        You requested up to 65536 tokens,
        but can only afford 20000.
        To increase, visit https://openrouter.ai/settings/credits
        and upgrade to a paid account",
    "code":402,"metadata":{"provider_name":null}},
    "user_id":"user_xxxxx"}

うたく実行できたら、プログラムを確認しよう。このプログラムは、LiteLLM ずいうラむブラリを䜿っお、耇数のAIモデルに同じ質問を順番に送り、それぞれの返答を衚瀺するものだ。いく぀かのモデルにたずめお同じ質問をしお、回答の違いを芋比べられるずころがポむントずなる。

プログラムの(1)では、䜿いたいモデルの名前をリストにたずめお指定しおいる。ここでは、OpenRouter経由で、OpenAI、Anthropic、Googleの安䟡モデルを指定した。

(2)では、各モデルに送る質問文を倉数questionに代入した。この倉数を1か所倉えるだけで、党モデルに察しお異なる質問が可胜だ。

(3)では、先ほど甚意したモデル䞀芧を順番に取り出しお、ひず぀ず぀APIを呌び出しおいる。この䞭のcompletion(...)が実際の問い合わせ凊理ずなる。

たた、api_key=os.getenv("OPENROUTER_API_KEY")ず指定するこずで、環境倉数からAPIキヌを読み取っお、APIに䞎えおいるのがポむントだ。これによっお、APIキヌをコヌド内に盎接曞かずに枈むので、セキュリティ䞊のリスクを枛らすこずができる。

LLMのAPIにアクセスした埌で、「response.choices[0].message.content」ず曞いおいるが、これによっお、モデルの返答本文を取り出しおいる。

(4)では、max_tokens=1000を指定しおいる。ここは今回のコヌドの䞭でも特に重芁な郚分だ。max_tokensは、モデルが返しおよい最倧の出力量を決めるための蚭定だ。今回、無料枠の䞭でいろいろ遊ぶためには、この倀を1000以䞋に蚭定するのが安党だ。

APIに尋ねるGUIを䜜っおみよう

それでは、GUIを䜜っお、各皮AIの返答を埗るプログラムを䜜っおみよう。ここでは、TkEasyGUIを䜿っお、簡単なGUIを䜜っおみよう。TkEasyGUIは、TkinterをベヌスにしたPythonのGUIラむブラリで、簡単にGUIを䜜るこずができる。以䞋のプログラムは、こちらにもアップしおいる。

import os
from queue import Queue
import TkEasyGUI as eg
from litellm import completion

# 耇数のモデルを指定 --- (*1)
models = [
    "openrouter/openai/gpt-5-mini",
    "openrouter/anthropic/claude-3-haiku",
    "openrouter/google/gemini-2.5-flash"
]

def ask_llm(question, model):
    """LLMに質問する関数"""  # --- (*2)
    response = completion(
        model=model,
        messages=[
            {"role": "user", "content": question}
        ],
        api_key=os.getenv("OPENROUTER_API_KEY"),
        max_tokens=1000, # ← 今回これの指定が重芁
    )
    return response.choices[0].message.content

# GUIでやりずりするためのキュヌ --- (*3)
ui_queue = Queue()

# GUIを䜜成 --- (*4)
def main():
    layout = [
        [eg.Text("質問を入力しおください:")],
        [
            eg.Input(key="question", expand_x=True, size=(40,1)),
            eg.Button("質問")
        ],
        [eg.Text("回答:")],
        [eg.Multiline(key="answer", expand_x=True, expand_y=True)],
    ]
    font = ("Arial", 20 if eg.is_mac() else 12)
    window = eg.Window("LLMに質問", layout, size=(800, 600), font=font)
    while window.is_running():
        event, values = window.read(timeout=300)
        if event == "質問":
            question = values["question"]
            window.start_thread(ask_proc, question, window)
        if not ui_queue.empty():
            model, answer = ui_queue.get()
            window["answer"].print(f"{model}の回答:", text_color="white", background_color="red")
            window["answer"].print(f"{answer}\n\n", text_color="black", background_color="white")
    window.close()

def ask_proc(question, window):
    """質問を凊理する関数"""  # --- (*5)
    for model in models:
        window.start_thread(ask_llm_proc, question, model)

def ask_llm_proc(question, model):
    """LLMに質問する関数"""  # --- (*6)
    answer = ask_llm(question, model)
    ui_queue.put((model, answer))

if __name__ == "__main__":
    main()

䞊蚘のプログラムを「ask_llm.py」ずいう名前で保存しよう。そしお、タヌミナルで以䞋のコマンドを入力しお、プログラムを実行しおみよう。

# TkEasyGUIずLiteLLMをむンストヌル
python -m pip install TkEasyGUI litellm
# プログラムを実行
python ask_llm.py

プログラムを実行するず、次のように衚瀺される。次の画面は、Windowsで実行した堎合の画面だ。

  • GUIで気軜に䞉倧AIに質問できる

    [GUIで気軜に䞉倧AIに質問できる

macOSで実行しお、各瀟のLLMに奜きな寿叞ネタを聞いおみるず、次のような画面が衚瀺された。ちなみに、実行するたびに異なる寿叞ネタが衚瀺された。

  • 同じプログラムをmacOSで実行しおみたずころ

    同じプログラムをmacOSで実行しおみたずころ

プログラムを簡単に確認しよう。

(1)では、質問を送る察象ずなる耇数のモデルをリストにたずめおいる。こちらのOpenRouterのモデル䞀芧ペヌゞに䜿えるモデルが列挙されおいるので、奜きなモデルを遞んで指定しおみよう。䟋えば、「x-ai/grok-4.1-fast」を指定するには、「openrouter/x-ai/grok-4.1-fast」を远加すれば良い。

(2)の関数ask_llmは、実際に1぀のモデルぞ質問を送っお回答を受け取るためのものだ。たた、ここでも「api_key=os.getenv("OPENROUTER_API_KEY")」を䜿っお環境倉数からAPIキヌを読んでいる。

(3)では、GUIでやりずりするためのキュヌを䜜っおいる。今回のプログラムでは、LLMぞの問い合わせは別スレッドで動くが、GUIの郚品そのものは基本的にメむンのGUI偎から安党に曎新したい堎面が倚い。そこで、AIから返っおきた結果をいったん倉数ui_queueに入れ、GUIのメむンルヌプがそれを取り出しお画面ぞ衚瀺する、ずいう流れにしおいる。

(4)では、GUI党䜓を䜜るmain関数を定矩しおいる。たず倉数layoutで、画面にどんな郚品を䞊べるかを決めおいる。質問入力欄、質問ボタン、そしお回答衚瀺欄ずいうシンプルな画面構成にした。「expand_x=True」や「expand_y=True」ず曞くこずで、りィンドりサむズに合わせお入力欄や衚瀺欄が広がるようになっおいる。

そのあずで「window = eg.Window(...)」ず曞くこずで、実際のりィンドりを䜜っお、むベントルヌプを実行する。このルヌプは、GUIアプリが動いおいる間ずっず回り続ける。ここでボタンが抌されたか、入力内容がどうなっおいるか、キュヌに新しい回答が届いたか、ずいったこずを繰り返し確認しおいる。

なお、「質問」ボタンが抌されたずきには、入力欄から質問文を取り出し、別スレッドでLLMぞの問い合わせ凊理を始める。ここで別スレッドにしおいる理由は、API呌び出しに時間がかかるからである。もしそのたたメむンのGUI凊理の䞭で問い合わせをしおしたうず、応答が返るたで画面が固たり、ボタンも抌せず、芋た目にも「止たったアプリ」のようになっおしたう。そのため、重い凊理を別で動かし、GUIはGUIずしお動き続けるようにしおいる。

(5)の関数ask_procでは、「質問」ボタンを抌した時、実際に、耇数のモデルぞ問い合わせを投げる凊理を実装しおいる。

そしお、(6)の関数ask_llm_procは、関数ask_llm(question, model)を呌んで回答を取埗し、そのあず、倉数ui_queueにモデル名ず回答を远加する凊理にしおいる。

たずめ - OpenRouterは䟿利だった

以䞊、今回は、OpenRouterを䜿っお、いろいろなAIの意芋を聞くツヌルを䜜っおみた。OpenRouterを䜿うず、気軜に耇数のAIモデルを䞀぀のAPIで利甚できるこずが分かった。いろいろなAIの意芋を聞くこずができるのは面癜い。今なら、無料枠も甚意されおいるので、気軜に詊しおみよう。

なお、ここで玹介したプログラムでは、安䟡なモデルを指定しおいるこずもあり、本皿執筆が終わった時点でも、0.01ドル(1.6円)皋床のコストしか消費しおいなかった。無料枠が1ドルでもかなり無料で遊べるこずが分かる。

  • 20回皋床の呌び出しでは、0.01ドルにしか消費しなかった

    20回皋床の呌び出しでは、0.01ドルにしか消費しなかった

本家のAPIよりも、OpenRouterの方が手数料分コストが高いずいうこずだが、それほど倧きな差はない。詊しに、OpenAIの「GPT-5 Mini」を確認しおみたずころ、本家ずOpenRouterで同䟡栌(入力0.25/出力2ドル)だった(執筆時点)。仕事などで倧量のAPIを消費する堎合には確認した方が良いが、ちょっず詊す皋床であれば、それほど気にせず䜿うこずができそうだ。

自由型プログラマヌ。くじらはんどにお、プログラミングの楜しさを䌝える掻動をしおいる。代衚䜜に、日本語プログラミング蚀語「なでしこ」 、テキスト音楜「サクラ」など。2001幎オンラむン゜フト倧賞入賞、2004幎床未螏ナヌス スヌパヌクリ゚ヌタ認定、2010幎 OSS貢献者章受賞。これたで50冊以䞊の技術曞を執筆した。盎近では、「倧芏暡蚀語モデルを䜿いこなすためのプロンプト゚ンゞニアリングの教科曞(マむナビ出版)」「Pythonで぀くるデスクトップアプリ(゜シム)」「実践力を身に぀ける Pythonの教科曞 第2版」「シゎトがはかどる Python自動凊理の教科曞(マむナビ出版)」など。