Skip to main content
推論モデルは、回答する前に「think」します。互換モード 経由で呼び出すと、通常のモデルに比べて出力にいくつかの追加要素が含まれます。このページでは 3 つのことを扱います: 推論を取得する方法、マルチターンを扱う方法、構造化出力を信頼性高くする方法。
このページは /v1/chat/completions 互換モードに焦点を当てています。Claude のネイティブな推論ブロック(thinking フィールドの /v1/messages)については、Claude Effort & Thinking ガイド を参照してください。Gemini のネイティブな thinking_levelthought_signature については、Gemini Native Calls を参照してください。

概要

互換モードでは、推論モデルは「thinking text を出力するか」によって3つのグループに分かれます。
種類にかかわらず、回答は常に content ですcontent だけを読めば、すべての推論モデルは通常のモデルと同じように統合されます。思考を表示したい場合にのみ reasoning_content を読んでください。

Thinking content: reasoning_content

思考テキストを出力するモデルは、思考の連鎖を reasoning_content に、content と並行して格納します。 非ストリーミングmessage が両方を含みます:
ストリーミング — まず delta.reasoning_content の連続が送られ、delta.content は思考が終わってから開始されます。必ず 2つを別々にレンダリング してください(思考部分を折りたたみ、回答をストリームする). そうしないと、UI に思考の壁が最初にちらつきます:
推論 vs content のストリーム時の「相互排他」は 3 つのモデルで異なります — 3 つすべてに対応してください:
  • grok-4.3: 思考中は reasoning_content キーのみが存在し、回答中は content のみが存在します(もう一方のキーは単に現れません)。
  • qwen3.6-plus: 両方のキーが存在し、非アクティブなほうは null です。
  • glm-5.1: 思考中は content"" (空文字列) で、reasoning_content に値があります。
共通の方法: 真偽値チェック(if reasoning: / if content:)で読み取り、欠落、null"" の 3 つの空の状態をすべて回避します。
推論 token は回答を圧倒することがあります。テストでは、単純な「1+1」の質問で grok-4.3 が数百の reasoning_tokens を出し、回答 token はほんの少しでした。思考は output tokens として課金されるため、レイテンシとコストに敏感なユースケースで有効化/表示するかを評価してください

思考シグネチャとマルチターン

「thought signature」は Gemini ネイティブ の概念です。ネイティブなマルチモーダル / function calling では、モデルが暗号化された thought_signature を返し、推論の継続性を保つためにターンをまたいで返し続ける必要があります(Gemini Native Calls および Gemini Function Calling を参照)。 /v1/chat/completions 互換モードでは、推論モデルはステートレスです:
  • マルチターンでは、前の assistant ターンの content をメッセージ履歴に入れるだけで十分です;
  • reasoning_content を返し直す必要はなくシグネチャフィールドも応答には表示されません;
  • テストでは、gemini-3.1-flash-lite と grok-4.3 の両方で、content のみを返してもマルチターンのコンテキストが正しく維持されました。
Gemini の thought signatures をターンをまたいで保持する必要がある場合、または Claude のネイティブな思考ブロックをマルチターンで使う場合は、互換モードではなく対応する ネイティブ エンドポイントに切り替えてください。

構造化出力

response_format を使って、モデルに JSON のみを出力させます。種類は 2 つです:

モデル別サポート(検証済み)

json_schema のサポートは大きく異なります — これが構造化出力における最大の落とし穴です:

モデル間で JSON を確実に取得する

json_schema がすべてのモデルで動作すると想定しないでください。モデル横断での信頼性を高めるには、次を組み合わせます:
  1. json_object を優先してください — json_schema より互換性が広いです;
  2. プロンプトでは、「JSON のみを返す」と明示し、「json」という単語を含めてください(qwen では必須で、他でもより信頼性が高まります);
  3. 防御的に パースします: ```json code fences, strip a <think>…</think> prefix, then json.loads を取り除き、失敗時は適切にフォールバックします。

関連リンク