すべての記事へ戻る
ガイド

OpenAI SDKでGroq GPT-OSS 120Bを使う:Base URL、料金、キャッシュ

2026年6月17日 · 21分で読めます · GPT / Claude / Gemini

クリーム色の背景に、開発者ターミナルからテラコッタ色の線が3つのラベル付き概念ノードへつながるエディトリアル風カバー

GroqのOpenAI互換エンドポイントは、本当に1行差し替えるだけです。base_urlhttps://api.groq.com/openai/v1に設定すれば、OpenAI SDKをそのまま使い続けられます。2026年6月17日時点で、Groqの料金ページではopenai/gpt-oss-120b未キャッシュ入力トークン100万あたり$0.15キャッシュ済み入力トークン100万あたり$0.075出力トークン100万あたり$0.60と記載されています(Groq Pricing)。

ここまでは便利な部分です。落とし穴は、「OpenAI互換」が「挙動も課金も完全に同一」という意味だと思い込むことです。実際には違います。GroqのモデルIDを選び、キャッシュヒットを監視し、サポートされていないOpenAIパラメータを避け、組み込みツール呼び出しは別途カウントする必要があります。

Groq GPT-OSS 120BとGPT-OSS 20Bのコンパクトな価格カード比較。未キャッシュ入力、キャッシュ済み入力、出力の列がある

実際に何を切り替えているのか

Groqのドキュメントでは、同社のAPIは「OpenAIのクライアントライブラリとほぼ互換」と説明されており、OpenAIクライアントの正確な設定例として、Groqキーを渡し、base_url="https://api.groq.com/openai/v1"を設定する方法が示されています(Groq OpenAI Compatibility)。

OpenAI Python SDKをインストールします。

pip install openai
export GROQ_API_KEY="gsk_..."

次に、Groq経由でGPT-OSS 120Bを呼び出します。

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["GROQ_API_KEY"],
    base_url="https://api.groq.com/openai/v1",
)

response = client.chat.completions.create(
    model="openai/gpt-oss-120b",
    messages=[
        {"role": "system", "content": "You are a concise senior backend engineer."},
        {"role": "user", "content": "Write a PostgreSQL index plan for a slow user_events query."},
    ],
)

print(response.choices[0].message.content)
print(response.usage)

重要な違いはmodelです。OpenAI自身のプラットフォームでは、OpenAIがホストするモデル名を使うかもしれません。Groqでは、GPT-OSSはopenai/gpt-oss-120bまたはopenai/gpt-oss-20bとして指定します。

OpenAIは2025年8月5日に、Apache 2.0のもとでオープンウェイトの推論モデルとしてgpt-oss-120bgpt-oss-20bをリリースしました(OpenAI)。OpenAIによると、gpt-oss-120bは総パラメータ数117B、トークンあたりのアクティブパラメータ5.1B、128エキスパート、トークンあたり4つのアクティブエキスパートを持ち、最大128kのコンテキスト長をネイティブサポートします(OpenAI)。Groqのモデルページでは、ホスト版openai/gpt-oss-120bのコンテキストウィンドウは131,072トークン、最大出力トークン数は65,536と記載されています(Groq model card)。

120Bと20Bの選び方

生のコストより品質が重要な場合、たとえばエージェントの計画、難しめのコーディングタスク、複雑な抽出、複数ステップの推論には120Bを使います。ルーティング、要約、分類、短いアシスタント、高ボリュームのバックグラウンドジョブなど、より安いスループットが必要な場合は20Bを使います。

GroqモデルID 記載速度 未キャッシュ入力 キャッシュ済み入力 出力
openai/gpt-oss-120b 500 TPS $0.15 / 1M $0.075 / 1M $0.60 / 1M
openai/gpt-oss-20b 1,000 TPS $0.075 / 1M $0.0375 / 1M $0.30 / 1M

これらの価格は、Groqの現在の料金表とプロンプトキャッシュ表に基づくものです(Groq Pricing)。20Bモデルの記載トークン価格は、120Bのちょうど半分です。そのため、「まず試す」ワークフローのデフォルトとして適しています。回答品質が十分でなければ、その経路を120Bに昇格させます。

GPT-OSS 20Bを高速・低コスト、GPT-OSS 120Bを高性能として示し、どちらもGroq OpenAI互換エンドポイントにつながるモデルファミリーマップ

設定に置いておける小さな切り替えは次のとおりです。

import os
from openai import OpenAI

MODEL = os.getenv("GROQ_MODEL", "openai/gpt-oss-20b")

client = OpenAI(
    api_key=os.environ["GROQ_API_KEY"],
    base_url="https://api.groq.com/openai/v1",
)

def ask(prompt: str) -> str:
    response = client.chat.completions.create(
        model=MODEL,
        messages=[
            {"role": "system", "content": "Answer with practical developer steps."},
            {"role": "user", "content": prompt},
        ],
    )
    return response.choices[0].message.content

print(ask("Give me a minimal Redis rate limiter design."))

20Bで実行します。

GROQ_MODEL=openai/gpt-oss-20b python app.py

120Bで実行します。

GROQ_MODEL=openai/gpt-oss-120b python app.py

キャッシュヒットを含めてリクエスト料金を見積もる

Groqのプロンプトキャッシュは、openai/gpt-oss-20bopenai/gpt-oss-120bを含むサポート対象モデルで自動的に有効です。Groqによると、コード変更は不要で、キャッシュヒットには厳密なプレフィックス一致が使われ、キャッシュ済み部分には入力トークン50%割引が適用され、キャッシュデータは未使用のまま2時間経過すると自動的に期限切れになります(Groq Prompt Caching)。

実務上のルールは、安定したテキストを先に置くことです。

良い順序:

  1. システムプロンプト
  2. ツール定義
  3. Few-shot例
  4. 共有ドキュメントまたはスキーマ
  5. ユーザー固有の入力
  6. タイムスタンプ、ID、リクエストごとのデータ

悪い順序:20,000トークンの共有プロンプトの前に、タイムスタンプ、リクエストID、ユーザー固有フィールドを置くこと。これによりプレフィックスが壊れます。

GPT-OSS 120B用のコスト計算ヘルパーは次のとおりです。

def groq_gpt_oss_120b_cost(prompt_tokens, cached_tokens, completion_tokens):
    uncached_tokens = max(prompt_tokens - cached_tokens, 0)

    return (
        uncached_tokens / 1_000_000 * 0.15
        + cached_tokens / 1_000_000 * 0.075
        + completion_tokens / 1_000_000 * 0.60
    )

そして、Groqが返す場合にキャッシュ使用量を出力する、実行可能な呼び出し例です。

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["GROQ_API_KEY"],
    base_url="https://api.groq.com/openai/v1",
)

STATIC_POLICY = """
You are an internal code review assistant.
Always check correctness, security, performance, and migration risk.
Return JSON with keys: summary, risks, suggested_patch.
"""

def review(diff: str):
    response = client.chat.completions.create(
        model="openai/gpt-oss-120b",
        messages=[
            {"role": "system", "content": STATIC_POLICY},
            {"role": "user", "content": diff},
        ],
        response_format={"type": "json_object"},
    )

    usage = response.usage
    details = getattr(usage, "prompt_tokens_details", None)
    cached = getattr(details, "cached_tokens", 0) if details else 0

    print("prompt_tokens:", usage.prompt_tokens)
    print("cached_tokens:", cached)
    print("completion_tokens:", usage.completion_tokens)
    print("estimated_cost_usd:", groq_gpt_oss_120b_cost(
        usage.prompt_tokens,
        cached,
        usage.completion_tokens,
    ))

    return response.choices[0].message.content

Groqのキャッシュドキュメントでは、usage.prompt_tokens_detailsの下にcached_tokensが示され、キャッシュヒット率はcached_tokens / prompt_tokens × 100%と定義されています(Groq Prompt Caching)。2回目のリクエストが必ず安くなるとは考えないでください。厳密なプレフィックスが重要です。

ツール呼び出しは別にカウントする

組み込みツールを有効にする場合、トークン価格だけが請求額のすべてではありません。Groqの料金ページでは、GPT-OSS向けのBuilt-In Toolsが別料金として記載されています。Browser Searchのbasic searchは1000リクエストあたり$5、Browser Searchのvisit websiteは1000リクエストあたり$1、Code Execution Pythonは1時間あたり$0.18です(Groq Pricing)。

これはエージェント設計に影響します。ユーザーメッセージごとに検索を1回呼ぶサポートボットは、プロンプトトークンだけを使う要約器とはコスト構造が異なります。キャッシュは繰り返し使うツールスキーマには役立ちますが、外部ツール呼び出しを無料にするわけではありません。

また、OpenAIコードをコピー&ペーストする前に互換性を確認してください。GroqのOpenAI互換ドキュメントでは、400を返す可能性のある未サポートフィールドとして、logprobslogit_biastop_logprobsmessages[].name、および1以外のn値が挙げられています(Groq OpenAI Compatibility)。Groqはまた、temperature=01e-8に変換されると説明しています。

安全な最小リクエストは次のようになります。

response = client.chat.completions.create(
    model="openai/gpt-oss-120b",
    temperature=0.2,
    messages=[
        {"role": "system", "content": "Be precise. If unsure, say so."},
        {"role": "user", "content": "Explain this stack trace and suggest a fix: ..."},
    ],
)

アプリ全体を1コミットで移行するのは避けましょう。プロバイダー設定は環境変数の背後に置きます。

LLM_BASE_URL=https://api.groq.com/openai/v1
LLM_API_KEY=$GROQ_API_KEY
LLM_MODEL=openai/gpt-oss-120b

そしてSDKへ接続します。

client = OpenAI(
    api_key=os.environ["LLM_API_KEY"],
    base_url=os.environ["LLM_BASE_URL"],
)

response = client.chat.completions.create(
    model=os.environ["LLM_MODEL"],
    messages=[{"role": "user", "content": "Summarize this incident report."}],
)

実用的なマルチプロバイダーの逃げ道

本番環境へ組み込むなら、プロバイダー前提をコードベース全体にハードコードしないでください。base_urlapi_keymodelは設定に置きます。そうすればGroqを簡単にテストでき、プロバイダールーティングも退屈な作業になります。

Claude、GPT、Gemini向けにOpenAI互換エンドポイントを1つにしたいチームには、onehopが簡単な選択肢です。base URLをhttps://api.onehop.ai/v1に変更します。OpenAI/Anthropic互換で、ファーストパーティより安く、新規アカウントにはカード不要で$10分が無料付与されます。

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["ONEHOP_API_KEY"],
    base_url="https://api.onehop.ai/v1",
)

response = client.chat.completions.create(
    model=os.environ["ONEHOP_MODEL"],
    messages=[
        {"role": "user", "content": "Compare this API design against common REST mistakes."}
    ],
)

print(response.choices[0].message.content)

高速なGPT-OSS推論とGroqのツール/キャッシュスタックを明確に使いたい場合はGroqを使います。クライアントコードを書き換えずに、Claude、GPT、Gemini、その他のホスト済みモデルを横断する単一の統合面が欲しい場合はonehopを使います。onehopでClaudeやその他のモデルを呼び出すことも、$10分の無料クレジットに登録することもできます。

本番投入チェックリスト

リリース前に、このチェックリストを実行してください。

  • モデルIDを固定する:品質重視ならopenai/gpt-oss-120b、低コスト重視ならopenai/gpt-oss-20b
  • Groqがキャッシュ済みプレフィックスを再利用できるよう、安定したプロンプトセクションを先に置く。
  • すべてのリクエストでprompt_tokenscached_tokenscompletion_tokensをログに記録する。
  • Browser Search、Visit Website、Code Execution用に別会計を追加する。
  • Groqへトラフィックをルーティングする前に、未サポートのOpenAIパラメータを削除する。
  • ビジネスロジックに触れずにGroq、ファーストパーティAPI、onehopをテストできるよう、base_urlを設定可能にしておく。

移行全体は1行で済むかもしれません。しかし信頼できる移行には、base URL、モデルID、コストテレメトリという3行と会計処理が必要です。そこから始めて、アプリ内の各経路について、120Bの品質が出力トークン支出に見合うかを判断してください。より幅広いモデルアクセスで同じbase URLパターンを使いたい場合は、onehopでClaudeやその他のモデルを呼び出し$10分の無料クレジットに登録してください。