Models APIでモデル一覧と機能を取得する

Claude API エンジニアリング 6分で読めます

コンテキストウィンドウの長さや出力上限、対応している機能をコードの中にハードコードすると、モデルが増えたり仕様が変わったりするたびにコードを直すことになります。Claude API の Models API を使うと、これらを実行時に API から取得できます。

Models APIとは

Models API は、利用可能なモデルの一覧と、そのモデルのメタデータを返す読み取り専用のエンドポイントです。ベータヘッダは不要で、通常の API キー(または ant auth login で作成したプロファイル)だけで呼べます。

用途は大きく2つあります。ひとつは「今このアカウントで何が使えるか」を画面に出すこと。モデル選択のドロップダウンを手書きの配列で持つと、新しいモデルが出るたびに更新が必要になります。もうひとつは「そのモデルの上限と機能を知る」ことです。入力をどこで切るか、出力の max_tokens に何を渡してよいかを、モデルごとの表を自前で持たずに決められます。

エンドポイントは次の2つです。

モデル一覧を取得する

SDK には一覧用のメソッドが用意されています。ページングは SDK が自動で処理するので、返ってきたものをそのまま反復できます。

from anthropic import Anthropic

client = Anthropic()

for model in client.models.list():
    print(model.id, "|", model.display_name)

TypeScript も同じ形です。

import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic();

for await (const model of client.models.list()) {
  console.log(model.id, "|", model.display_name);
}

raw HTTP で呼ぶ場合は次のようになります。

curl https://api.anthropic.com/v1/models \
  -H "x-api-key: $ANTHROPIC_API_KEY" \
  -H "anthropic-version: 2023-06-01"

個別のモデルを取得する

モデル ID が分かっているときは retrieve で1件だけ取得します。設定ファイルに書かれたモデル ID が本当に有効かを起動時に確かめる、といった使い方に向きます。

model = client.models.retrieve("claude-opus-5")

print(model.display_name)
print(model.max_input_tokens)   # コンテキストウィンドウ
print(model.max_tokens)         # 出力の上限
print(model.capabilities)       # 対応機能

存在しないモデル ID を渡すと NotFoundError(HTTP 404)になります。文字列一致でエラーを判定せず、SDK の例外クラスで受けてください。

import anthropic

try:
    model = client.models.retrieve(configured_model_id)
except anthropic.NotFoundError:
    raise SystemExit(f"設定されたモデル ID が無効です: {configured_model_id}")

レスポンスのフィールド

モデルオブジェクトが持つ主なフィールドは次のとおりです。

context_window というフィールドはありません

コンテキストウィンドウを表すのは max_input_tokens です。context_window という名前で参照しているコードは Noneundefined を読むことになり、その値で入力を切ると意図しない挙動になります。

max_input_tokensmax_tokenscapabilities の3つは 2026年3月に追加されたフィールドです。それ以前から動いている SDK のバージョンでは返らないことがあるため、依存する場合は SDK を更新してください。

実行時にモデルを選ぶ

「ある機能に対応しているモデルだけを候補にする」という選び方が、Models API のいちばん実用的な使い道です。対応表をコードに持たずに済みます。

def models_supporting(feature: str):
    return [
        m for m in client.models.list()
        if feature in (m.capabilities or [])
    ]

for m in models_supporting("vision"):
    print(m.id)

入力を切る位置も、モデルの実際の上限から決められます。次の例は、送る前にトークン数を数えて、そのモデルのコンテキストウィンドウに収まるかを確かめるものです。

model = client.models.retrieve(MODEL_ID)

counted = client.messages.count_tokens(
    model=MODEL_ID,
    messages=messages,
)

if counted.input_tokens > model.max_input_tokens:
    raise ValueError(
        f"入力が {counted.input_tokens} トークンで、"
        f"{MODEL_ID} の上限 {model.max_input_tokens} を超えています"
    )

トークン数の数え方そのものはClaudeを呼ぶ前にトークン数を数えるで扱っています。tiktoken などの他社トークナイザは Claude のトークン数と一致しないため、上限の判定には使えません。

注意点

一覧はアカウントで見え方が変わります。返るのは「そのクレデンシャルで利用できるモデル」です。ワークスペースや契約によって内容が違うため、自分の環境で見えたモデル ID がすべての環境で使えるとは限りません。

料金は返りません。Models API が返すのは上限と機能であって、単価ではありません。コストの計算には公式の料金ページの値を使ってください。

毎リクエスト呼ぶ必要はありません。モデルのメタデータは頻繁には変わりません。アプリケーションの起動時に一度取得してキャッシュし、必要に応じて更新するのが妥当です。推論のリクエストパスの中で毎回呼ぶと、余計な往復が増えるだけです。

プラットフォームによって使えるかどうかが異なります。Amazon Bedrock や Google Vertex AI 経由で Claude を使っている場合、Models API の可用性はプラットフォーム側の対応に従います。またモデル ID の表記も異なります(Bedrock は anthropic. 接頭辞が付き、Vertex はバージョン区切りに @ を使います)。

本記事は Anthropic 公式ドキュメントの非公式日本語訳・解説です。最新の仕様は公式ドキュメントで確認してください。