最先端のLLMの上にプロダクトを構築しているチームならどこでも、必ず起きる種類の会議がある。誰かが最新のベンチマーク・リーダーボードを共有する。別の誰かが、先月から順位が入れ替わっていると指摘する。三人目は、自分たちのチームがいま使っているモデルが、この3週間前まで誰も聞いたことのなかった指標で2つ順位を落としていると述べる。会議の終わりには、移行すべきか誰も確信が持てず、話題は次の四半期に再設定される。
その会議の問題は、出席している人ではない。問題は、ベンチマークが合成タスクを測るものであり、あなたのプロダクトは合成タスクではないということだ。リーダーボードは、MMLU、SWE-bench Verified、GPQA Diamond といった、研究者がモデル横断で測定可能に設計したテストでの性能を示す。これらのテストは、あなたのアプリケーションが本番で実際に送るプロンプトの姿とは異なる。ユーザーが生み出す、特定ドメインの形をした混沌とした入力にモデルがどう対処するかも捉えない。
本稿では、ベンチマークが決して行えない演習を正面から扱う。同一の OpenAI 互換エンドポイント、同じ温度設定、追加のプロンプティングなしで、GPT-5.5、Claude Sonnet 4.6、Gemini 3.1 Pro に送るための3つの具体的なプロンプトだ。プロンプトは、本番ワークロードの大半に関わる3つのカテゴリをまたぐ:乱れたドキュメントからの構造化抽出、推論に重きを置いた計画タスク、そして制約下でのコード生成。以下の所見は、この種の比較を実施するチームが一貫して報告する行動パターンであり、あなたが自分のセットアップでこれらのプロンプトを走らせれば目にするであろうパターンだ。
リーダーボード上では、これら3つのモデルは SWE-bench Verified で互いに0.8パーセンテージポイント以内の差に収まっている。実際には、挙動が大きく異なる。選択の焦点は、ベンチマークでどれが最高得点かではなく、どの挙動パターンがあなたのワークロードに適合するかだ。
ベンチマークが測るものと、見落とすもの
ベンチマークは必要だから存在する。モデル提供者は能力を主張するために標準化されたテストを必要とし、研究者は比較を発表するために必要とし、私たち他の人々はモデルを評価する出発点を客観的に持つために必要とする。有用である。しかし、プロダクション利用に重要な点で不完全でもある。
3つの具体的な制約を明示しておく価値がある。いずれも、この後のプロンプト例で現れる。
- ベンチマークは個別能力を測り、挙動パターンは測らない。SWE-bench Verified は、モデルが特定種の GitHub issue を解けるかを教えてくれる。しかし、モデルが単純な問題を過剰設計しがちか、プロンプトが曖昧なときに明確化質問をする傾向があるか、依頼した構造に初回で一致する出力を返すかは教えてくれない。これらは、あなたが本番で日々観察する事柄だ。
- ベンチマークは「合わせ込まれる」。あるモデルのリリースが特定ベンチマークのスコアを前面に掲げるとき、それは少なくとも部分的にそのベンチマークに最適化されたことを示すシグナルだ。現実世界の性能とベンチマーク性能は、ベンチマーク設計の条件を外れた瞬間に—ときに大きく—乖離しうる。
- ベンチマークは集約する。SWE-bench Verified での0.8パーセンテージポイントの差は、モデルAが特定カテゴリのタスクでは大きく優れ、別のカテゴリでは劣る一方、モデルBは全体に一貫している、という事実を隠してしまうかもしれない。集約は、意思決定に必要な情報を潰してしまう。
以下の演習は、まさにベンチマークが集約で落としてしまう情報を表に出すよう設計されている。勝者を決めることが目的ではない—同じ演習を自分のプロンプトで走らせるときに、どんな問いを発すべきかを示すことが目的だ。
セットアップ
3つのプロンプト。多くの本番ワークロードが直撃するカテゴリに対応するために選んだ。セットアップは、各プロンプトを3つのモデルすべてに同一パラメータ(温度0.3、システムプロンプトの上書きなし、デフォルトのレスポンス形式)で送る。単一の OpenAI 互換エンドポイントからアクセスし、比較が同条件で行われるようにする—プロバイダ固有の SDK の癖なし、パラメータのマッピング差なし、リクエスト構築の違いで一方のモデルが優遇されるリスクなし。
プロンプト自体は以下。コピーして実行できるコードブロックで提示する。各プロンプトの後に続く挙動の説明は、この種の比較を実施するチームが一貫して報告するパターン—そして、あなたが自分のセットアップでこれらのプロンプトを走らせれば目にするであろうパターン—である。自分で走らせることこそが要点だ。本稿は、そのための枠組みと起点となるプロンプトを提供する。
from openai import OpenAI
import os
client = OpenAI(
api_key=os.environ["COMET_API_KEY"], # or replace with your API key
base_url="https://api.cometapi.com/v1", # one endpoint, multiple models
)
MODELS = [
"gpt-5.5",
"claude-sonnet-4-6",
"gemini-3.1-pro",
]
def run_comparison(prompt: str, temperature: float = 0.3) -> dict[str, str]:
"""
Send the same prompt to all three models and return their responses.
"""
responses = {}
for model in MODELS:
result = client.chat.completions.create(
model=model,
messages=[
{
"role": "user",
"content": prompt,
}
],
temperature=temperature,
)
responses[model] = result.choices[0].message.content
return responses
# Example usage
if __name__ == "__main__":
prompt = "Summarise the key risks in this contract."
outputs = run_comparison(prompt)
for model, response in outputs.items():
print(f"\n--- {model} ---")
print(response)
プロンプト1:乱れたドキュメントからの構造化抽出
これは2026年に出荷されたLLM機能の半分の「主食」タスクだ。非構造化の入力—メール、サポートチケット、会議のトランスクリプト、スキャンされたフォーム—から、特定のフィールドを構造化オブジェクトに抽出する。以下のプロンプトは、意図的に乱れたカスタマーサポートのメールから7つのフィールドを抽出するよう各モデルに要求する。メールには部分的な情報、相反するシグナル、そしてソーステキストにまったく存在しない1つのフィールドが含まれる。
プロンプト
You are processing customer support emails. Extract the followingseven fields from the email below into a JSON object with exactlythese keys: - customer_name (string)- order_id (string)- issue_type (one of: "shipping", "product_quality", "billing", "returns", "other")- urgency (one of: "low", "medium", "high")- requested_action (string)- affected_product (string)- escalation_history (any prior contact about this issue, if mentioned)
Email:---Hi there, I'm writing about order #FT-2289334 from last Tuesday. The Cascadehiking boots I received are NOT the size 11 I ordered — they'reclearly size 10 (I can see the label inside). I have a guided trekbooked in 5 days and I genuinely don't know what to do. I've beena customer for years and this is the first time something likethis has happened. Can you sort this out urgently? I'd prefer a same-day exchange ifat all possible. I'm in Manchester. Margaret W.--- Return only the JSON object. No commentary, no markdown code fences.
注視すべき点
3つある。第一に、モデルが要求した JSON スキーマに虚構なしで従うかどうか。第二に、ソースに存在しないフィールド(escalation_history—この特定の問題について顧客は過去の連絡を述べていない)をモデルがどう扱うか—不在を認めるのか、もっともらしく捏造するのか。第三に、モデルが JSON の外側に追加の解説を出してしまい、ダウンストリームでラッパーを剥がす前処理が必要になるかどうか。urgency フィールドも注意する価値がある:「5 days」は即時ではないが、顧客は明らかに切迫感を示しており、解釈の余地が生まれる。
この演習を実施したチームが一貫して報告すること
GPT-5.5. たいてい初回でクリーンな JSON を生成する。スキーマ遵守は強く、要求されたすべてのフィールドが存在し、前処理なしでパース可能な形式になる。欠落フィールドには明示的に null を返す傾向がある。JSON を Markdown のコードフェンスで囲んだり説明文を含めたりすることは通常なく、下流のパースが容易である。この例のような曖昧な解釈(urgency の評価)では、他の2つより保守的な傾向がある—Claude や Gemini が顧客の感情トーンに基づいて「high」と評価する場面で、GPT-5.5 は具体的な 5 日という時間枠に重きを置き「medium」に落ち着くことが多い。
Claude Sonnet 4.6. 同様にクリーンな JSON を生成し、要求されたスキーマの順守においては3者中もっとも精密であることが多い。GPT-5.5 が欠落フィールドを null にする場面で、Claude はしばしば要求されていないフィールド(「notes」や「data_quality_notes」)を追加し、データ品質の問題を指摘する—依頼していないが実際に有用な情報だ。この追加フィールドは人間のレビューには役立つが、スキーマに厳密なダウンストリームのパーサーでは失敗を招く。これは Claude で繰り返し見られるパターンだ:高品質だが、ときにプロンプトで求めた以上に綿密で、明示的な制約の指示が必要になる。
Gemini 3.1 Pro. 3者中もっとも簡潔な出力を返すことが多い。要求されたすべてのフィールド、余計なフィールドなし、周辺の文章なし。スキーマ順守は要求どおり正確。知っておく価値のある癖が1つある:欠落フィールドに対して、Gemini は null ではなく空文字列を返す傾向がある。これを区別する厳密な JSON パーサーは差異を検知するが、ゆるいパーサーは検知しない。この挙動は実行ごとに十分一貫しており、偶発的な産物ではなくモデルの嗜好に見える。
これが示すこと
3つのモデルすべてが構造化抽出をこなせる。違いは、要求したスキーマの周辺にある挙動の差分にある。ダウンストリームのシステムがスキーマに厳格で、余計なフィールドをエラーとみなすなら、Gemini 3.1 Pro と GPT-5.5 がより安全だ。モデルに明示せずともデータ品質の問題を表面化してほしいなら、Claude Sonnet 4.6 がより助けになる。いずれもベンチマークには表れない。
プロンプト2:推論に重きを置いた計画タスク
このプロンプトでは多段の調査計画をモデルに求める:慎重なモデルなら手順を組む前に特定すべき、暗黙の制約が3つ含まれる。ツールを呼び出す前段として計画を LLM に委ねるようなエージェント的アプリケーションで見られるタスクだ。
プロンプト
I'm trying to answer this research question for my team: "Is our customer churn rate higher among users who haven't usedfeature X in the last 30 days?" Produce a plan for how to investigate this. The plan should:- Identify the steps required- Sequence them with dependencies- Be actionable for a data analyst on my team Return the plan in clear, structured form.
注視すべき暗黙の制約:まず「churn」の定義がない(アカウント閉鎖?ログインなし?購入なし?)。次に交絡因子への対処が指定されていない(低エンゲージメントのユーザーは、feature X と無関係な多くの理由で離脱する)。さらに、ベースライン比較群が設定されていない。慎重なプランナーは、手順を出す前にこの3点を表面化すべきだ。
注視すべき点
モデルが問題を実際に推論しているか、それとも精査に耐えないもっともらしい手順列を出しているだけか。明示しなかった暗黙の制約をモデルが自発的に特定するか。そして手順間の依存関係が正しいか—見た目は良くても、3番目のステップが5番目の結果に依存しているような計画は実務では役に立たない。
この演習を実施したチームが一貫して報告すること
GPT-5.5. 実務でそのまま使える計画をもっとも出しやすい。推論が可視化される傾向があり、暗黙の制約(churn の定義、対照群、交絡因子)に関する前提を列挙してから手順を展開するため、意図とのズレを見つけやすい。手順の依存関係は安定して特定・ラベル付けされる。平行実行可能なステップの区分など、依頼していないが実際に価値のあるセクションを含むことも多い。ツール使用やエージェント的訓練の成果が現れやすいタスクで、計画の挙動は下流で実行が続く前提に形作られている。
Claude Sonnet 4.6. 文字通り「もっとも思慮深い」計画を出すことが多い。Claude の計画は、他の2つが挙げない配慮を含むことがある。この種の問いでは、相関と因果の方法論的問題を指摘し、「feature X を使っていない」こと自体が原因ではなく離脱の症状でありうることに触れ、明示されていないが注意深いアナリストなら気づく制約を特定するだろう。弱点は、計画が必要以上に長くなることがあり、個々のステップが実際の問いに対して過剰設計になる場合がある点。これは他所での Claude の挙動と整合的だ—専門家レベルの配慮が、ときにタスクの必要量を超える。
Gemini 3.1 Pro. もっとも整然と構造化された計画を返すことが多く、依存関係のグラフがもっとも明瞭。推論品質は高く、暗黙の制約を安定して特定し、問題を防御可能な手順に分解し、実行に移せるステップバイステップの指示を出す。難点は、計画がやや機械的に読めること。仕事は果たすが、Claude が挙げる方法論上の微妙な点や、GPT-5.5 が含める並列化の洞察はあまり表面化しない。これは Gemini の広い範囲でのパターンと一致する—推論品質に強く、周辺の判断力は実務的。
これが示すこと
このタスクでの推論品質は3モデルいずれも高い。違いは付随する挙動にある—文字どおりの要求を超えて、モデルが何を加えるか。GPT-5.5 は運用上の実務性(並列化、実行ヒント)を加える。Claude は専門家レベルの配慮(方法論、エッジケース、統計的ニュアンス)を加える。Gemini は明晰さと簡潔さを加える。どれも誤りではない。あなたのアプリケーションに適するのは、モデルがタスクを終えたときに「その後」何をしてほしいかに依存する。
プロンプト3:特定の制約下でのコード生成
このプロンプトでは、小さくても非自明な関数の実装を求める:タイムスタンプ付きイベントのリストを受け取り、連続するイベント間の最長ギャップ(秒)を返す Python 関数。4つのエッジケースに対応するという制約が明示されている。能力の上限を測るのではなく、制約下でのコード生成を試す意図だ—この関数はどのモデルでも書ける。違いは、制約の扱い方に現れる。
プロンプト
Write a Python function that takes a list of timestamped events andreturns the longest gap (in seconds) between consecutive events. Requirements:- Function signature: longest_gap(events: list[datetime]) -> float- Handle these edge cases: 1. Empty list (return 0.0 or raise — your choice, but be consistent) 2. Single event 3. Duplicate timestamps 4. Unsorted input- Use only the standard library- Include type hints- Return just the function. No tests or usage examples.
注視すべき点
モデルが4つのエッジケースすべてに対応するか、一部を黙殺するか。型ヒントが正確か、凡庸な定型か。アルゴリズム選択が妥当(ソートして走査)か、奇をてらうか。そして、プロンプト末尾の「テストも使用例も不要」という制約を尊重するか—この種の終盤の指示は、インストラクションフォローが強いモデルほど守り、弱いモデルほど静かに破る。
この演習を実施したチームが一貫して報告すること
GPT-5.5. もっとも綿密に作られたコードを出すことが多い。4つのエッジケースを明示的な分岐で扱い、型ヒントは精密(エッジケースの戻り値に Optional や Union を使うことも)で、例示を含む docstring を伴う。実装は通常もっとも明白なアルゴリズム—ソート、走査、最大ギャップの追跡—を選び、正しい。注意点:プロンプトで関数のみを求めている場合でも、GPT-5.5 はしばしば単体テストや使用例を含める。これは「運用上の実務性」が強いモデルのトレードオフで、頼まれていなくても必要だと考えるものを付け加える。
Claude Sonnet 4.6. もっとも可読性の高いコードを出すことが多い。関数は簡潔で、エッジケースは先頭のガード句で綺麗に扱い、型ヒントは正確で最小限。プロンプトが開いた判断点—例えば重複タイムスタンプはゼロ長ギャップとして扱う—について、簡潔で思慮深いコメントを添えることがある。GPT-5.5 よりも「テスト不要」の制約を信頼性高く守る傾向がある。関数自体は3者中もっとも保守しやすい。コード品質で知られる Claude の評判と整合的だ:クリーン、慣用的、熟練の感触。
Gemini 3.1 Pro. 3者中もっとも簡潔なコードを出すことが多い。関数は正しく、エッジケースに対応し、実装は最短。docstring は一行であることが多い。型ヒントは存在し正確。テストや冗長なコメントを滅多に含めず、過剰設計をしない—まさにプロンプトが求めたとおり。動く関数がほしく、テストは別途自分で足す開発者にとっては、もっとも直接的な道だ。周辺作業もモデルにしてほしいなら、他の2つは(頼まなくても)より多くを付け加える。
これが示すこと
3つのモデルすべてが関数を書ける。違いは、文字どおりの要求を超えて各モデルがどれだけ周辺作業を行うか—そして「X を追加しないで」という明示的な否定指示をどれだけ厳密に守るかにある。GPT-5.5 は周到さに寄り、プロンプトで周到さが不要とされてもそれを付け加える。Claude はクラフトに寄り(可読性の高いコード、判断点への思慮深いコメント)。Gemini は簡潔さに寄る(求められたことだけを、余計なものなく)。エージェント的ワークフローでモデルの出力がそのまま本番コードベースに入る場合、望ましい挙動は、ダウンストリームのレビュー工程が何を期待するか—そして否定指示をどれだけ厳密に守る必要があるか—に依存する。
浮かび上がるパターン
上の3つのプロンプトを通じ、2026年に発表された複数の比較研究と開発者の報告から、3つの一貫した挙動パターンが現れる。これは能力の主張ではない—どのモデルもあらゆるタスクを高い水準でこなす。傾向の話だ。同じモデルに数十のプロンプトを扱わせて初めて見えてくる類のもの。上のプロンプトを自分のセットアップで走らせれば、同じパターンを見ることになる。本稿は、それを認識する枠組みを与えるために存在する。
| Model | 行動傾向 | 最適なのは… |
|---|---|---|
| GPT-5.5 | 運用上の実務性。実行ヒント、防御的コーディング、下流で扱いやすい出力を追加。エージェントやツール使用に形作られたタスクに強い。 | モデルの出力を後続の実行につなぐ—エージェント、ワークフロー、次のステップが自動化されているパイプラインで。 |
| Claude Sonnet 4.6 | 専門家レベルの配慮。文字どおりの依頼を超える考慮事項を表面化し、倫理や方法論の懸念を挙げ、可読性の高いコードを生成。 | 人間が出力をレビューするアプリケーション—コンテンツ生成、コードレビュー、クラフトが重要な分析で。 |
| Gemini 3.1 Pro | 簡潔で直截。頼まれたことだけを、余計なく。スキーマ順守がもっともクリーンで、同等作業に対するトークン出力が最小。 | 出力要件が厳密、コストの予測可能性が優先、またはモデルに「思慮深い協働者」ではなく「正確な道具」であってほしいとき。 |
重要な注意点。 これらは傾向であって規則ではない。適切なプロンプティングで、いずれのモデルもこれらの挙動に誘導できる—十分に詳細なシステムプロンプトであれば、Gemini にテストを追加させることも、Claude を最小出力に制約することも、GPT-5.5 にユニットテストを省かせることもできる。要点は、ステアリングを始める前、デフォルトで各モデルが何をするかだ。本番では、明示的にプロンプトで逆向きに誘導しない限り、デフォルト挙動を相手にすることになる。
自分のワークロードでのテスト方法
上の演習はあらゆるワークロードで再現可能—そして、そうすべきだ。ベンチマークスコアは一次フィルタとして有用だが、あなた固有のアプリケーションに重要なモデルの挙動パターンは、あなた固有のプロンプトを扱うときにしか見えてこない。
自分のトラフィックで演習を走らせる実践ガイド:
- 代表的なプロンプトカテゴリを3つ選ぶ。バラバラの3プロンプトではなく、ワークロードを横断する3カテゴリ。大半の本番システムは、いくつかのプロンプトタイプ(抽出、分類、生成、推論、コード、要約)に分解できる。トラフィックの大部分を占めるカテゴリを選ぶ。
- 各カテゴリにつき20〜30件の例を精選する。可能なら実トラフィックから。必要に応じて匿名化する。狙いは、プロンプトが実際にアプリケーションが目にする姿に似ていること—ベンチマーク問題のようではないこと。20例でパターンが見え始め、30例で確信が持てる。
- 1つのエンドポイントで、すべてのモデルに通す。OpenAI 互換のアグリゲータエンドポイントを使えば、各モデルを個別 SDK で回すより格段に速い。本稿冒頭のコードがセットアップのすべてだ。同一の温度、同一のパラメータ、同一のプロンプト—出力の違いがモデルの違いになる。
- 定量評価の前に定性評価する。まずは目視で出力を確認する。行動パターンは、最初の十数プロンプトでたいてい明白だ。各モデルがあなたのワークロードでどう振る舞うかの仮説ができてから、それに基づくルーブリックを作って採点すればよい—だが仮説は観察から生まれ、出来合いの採点テンプレートからは生まれない。
- モデルが「付け加えるもの」に注意する。ベンチマークの問いは、モデルが正答を出すかだ。行動の問いは、モデルが他に何をするかだ。テストを追加するか?推論を説明するか?懸念を挙げるか?頼んでいない追加フィールドを出すか?差異はここにある。
- 下流のパターンに合うモデルを選ぶ。下流工程が自動化されているなら、デフォルトでクリーンかつパース可能な出力を返すモデルがほしい。下流工程が人間レビューなら、人間のレビュアーが見たい周辺判断をデフォルトで加えるモデルがほしい。正解は、モデルの後に何が続くかに依存する。
結論
GPT-5.5、Claude Sonnet 4.6、Gemini 3.1 Pro の選択は、どのモデルが最良かではない。どのモデルがあなたのワークロードの形に適合するかだ—そしてその形はベンチマークには見えない。プロンプトさえ用意できれば、この演習は半日で再現できる。価値は、当て推量をやめ、観察を始められるところにある。
自分たちで演習を回すチームへ: もっとも簡単なセットアップは、1つの OpenAI 互換エンドポイントで3モデルすべてを1つのクレデンシャルで使えるようにすること。CometAPI はその一手だ。既存の OpenAI SDK のベースURLを差し替え、可変にするのは model パラメータだけ。対になる記事、The 2026 LLM API Pricing Comparison は同じ意思決定のコスト面を扱う—両者を合わせれば、賢く選ぶために必要な挙動面と財務面の両方が揃う。
ベンチマークは、モデルが「できる」ことを教える。行動パターンは、モデルがあなたのプロンプトに対して「既定で何をするか」を教える。前者の答えは公開されている。後者は、自分で観察するしかない。カテゴリごとに20のプロンプト、半日あれば、どのリーダーボードにも載らない答えが手に入る。
準備はいいですか?確実に統合するなら、CometAPI と API doc へ。Claude Fable 5 をはじめとする他のフロンティアモデルと同じ環境で使え、請求は統合、信頼性はエンタープライズ級。今すぐサインアップして新規ユーザー向けの気前の良いクレジットで開始を—次のブレークスルー・プロジェクトが待っています。
