> ## Documentation Index
> Fetch the complete documentation index at: https://novita.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# インターリーブ思考のサポート

> **最終更新日**: 2025-12-03 <br />
> **ステータス**: 対応済み（OpenAI 互換）

## 1. 概要

**Interleaved Thinking** は、モデルがツール呼び出しの間に明示的な推論ステップを実行できるようにする高度な推論フレームワークです。

Interleaved Thinking に対応したモデルは、以下を実行できます。

* 現在の環境とツール出力を振り返る
* 更新された推論に基づいて次のアクションを決定する
* 複数のツール実行にまたがって継続的な推論チェーンを維持する
* `reasoning_details` または `reasoning_content` を通じて、透明で検査可能な複数ステップの思考を提供する

この機能により、従来の関数呼び出しは **エージェントレベルのツール利用** へと進化し、複雑なワークフローをより正確で信頼性が高く、コンテキストを意識したものにします。

Novita は、推論ストリームをネイティブに公開するすべてのモデル（例: MiniMax-M2 およびその他の OpenAI 互換推論モデル）について、Interleaved Thinking を完全にサポートしています。

## 2. 主要概念

### 2.1 インターリーブ

単一の推論フェーズを実行してからツールを呼び出すのではなく、モデルは次のように動作します。

```BASH theme={"system"}
Reason → Tool Call → Observe → Reason → Tool Call → ...
```

これにより、モデルは以前のツール出力に基づいて戦略を動的に調整できます。

### 2.2 推論の詳細（`reasoning_details`）

一部のモデルでは、モデルの思考内容が個別の構造として返されます。

```JSON theme={"system"}
"reasoning_details": [
  {
    "type": "reasoning.text",
    "format": "openai-responses-v1",
    "text": "Model’s step-by-step reasoning..."
  }
]
```

そのようなモデルについて、Novita はストリーミングモードと非ストリーミングモードの両方でこのフィールドを返すことをサポートしています。

### 2.3 会話メモリの要件

推論の連続性を維持するには、後続の `messages` に、`reasoning_details`、`tool_calls`、および `content` を含む **モデルの完全なレスポンスを必ず追加する必要があります**。

チェーンを保持しない場合、以下が発生する可能性があります。

* 不正確なツール利用
* 推論コンテキストの喪失
* 反復的または循環的なツール呼び出し
* 信頼性の低下

この要件は OpenAI の推論 API と同様です。

## 3. API の動作

### 3.1 リクエスト形式

ユーザー側で変更は必要ありません。
Interleaved Thinking は、標準の OpenAI 互換 Chat Completions API で動作します。

### 3.2 レスポンス形式

モデルは次のフィールドを返す場合があります。

* `reasoning_content`: 元の思考内容
* `reasoning_details`: 構造化された推論セグメント。このフィールドは任意です
* `tool_calls`: ツール呼び出し計画
* `content`: 自然言語出力

これらは標準の OpenAI 形式を拡張するものです。

## 4. リクエスト例（MiniMax-M2）

```JSON theme={"system"}
{
  "model": "minimax/minimax-m2",
  "messages": [
    {
      "role": "user",
      "content": "How's the weather in San Francisco?"
    },
    {
      "role": "assistant",
      "name": "MiniMax AI",
      "content": "",
      "tool_calls": [
        {
          "id": "call_function_asqvfevfc8af_1",
          "type": "function",
          "function": {
            "name": "get_weather",
            "arguments": "{\"location\": \"San Francisco, US\"}"
          }
        }
      ],
      "reasoning_details": [
        {
          "type": "reasoning.text",
          "id": "reasoning-text-1",
          "format": "openai-responses-v1",
          "index": 0,
          "text": "The user is asking about the weather in San Francisco..."
        }
      ]
    },
    {
      "role": "tool",
      "tool_call_id": "call_function_asqvfevfc8af_1",
      "content": "24℃, sunny"
    }
  ],
  "stream": true,
  "reasoning_split": true,
  "max_tokens": 1024,
  "temperature": 0.7,
  "tools": [
    {
      "type": "function",
      "function": {
        "name": "get_weather",
        "description": "Get weather for a specific location",
        "parameters": {
          "type": "object",
          "properties": {
            "location": { "type": "string" }
          },
          "required": ["location"]
        }
      }
    }
  ]
}
```

## 5. レスポンス例（非ストリーミング）

```JSON theme={"system"}
{
  "id": "07a4dedfdb1498b045498dfd42497639",
  "object": "chat.completion",
  "created": 1764303147,
  "model": "MiniMax",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "",
        "name": "MiniMax",
        "tool_calls": [
          {
            "index": 0,
            "id": "call_function_9w7wq1j9zmpl_1",
            "type": "function",
            "function": {
              "name": "get_weather",
              "arguments": "{\"location\": \"ShangHai\"}"
            }
          }
        ],
        "reasoning_content": "The user asked for Shanghai weather...",
        "reasoning_details": [
          {
            "type": "reasoning.text",
            "text": "The user is asking about the weather in Shanghai...",
            "id": "reasoning-text-1",
            "format": "openai-responses-v1",
            "index": 0
          }
        ]
      },
      "finish_reason": "tool_calls"
    }
  ]
}
```

## 6. ストリーミングレスポンス例

```JSON theme={"system"}
{
  "id": "664c5ad870c1888fbcbd267d9829e354",
  "object": "chat.completion.chunk",
  "created": 1764303504,
  "model": "minimax-m2",
  "choices": [
    {
      "index": 0,
      "delta": {
        "role": "assistant",
        "reasoning_content": "...\n\nThe user has specifically asked...",
        "reasoning_details": [
          {
            "type": "reasoning.text",
            "text": ".\n\nThe user has specifically asked...",
            "id": "reasoning-text-1",
            "format": "openai-responses-v1",
            "index": 0
          }
        ]
      },
      "finish_reason": null
    }
  ]
}
```

## 7. 開発者向けメモ

### 7.1 Interleaved Thinking をサポートするモデル

OpenAI 互換 API を通じて `reasoning_details` を公開するすべてのモデル。例:

* MiniMax-M2
* （近日公開）Novita Reasoning Series
* その他の推論対応パートナーモデル

### 7.2 料金

課金は、モデルの料金ルールに従い、推論トークンに基づいて行われます。
`reasoning_details` はトークン使用量を増加させます。

### 7.3 エラーハンドリング

次のような状況が発生する可能性があります。

* ツールパラメータの欠落
* 再帰的または反復的なツール呼び出し
* 推論フェーズにおける誤った仮定

アプリケーションでは、ツール引数を検証し、モデルエラーを適切に処理できるようにしてください。

## 8. ベストプラクティス

**✓ 次のリクエストには常に完全なモデルメッセージを含める**

含めるもの:

* `content`
* `tool_calls`
* `reasoning_details`

**✓ 長いチェーンの推論にはストリーミングを有効にする**

ストリーミングにより、クライアントは以下を実行できます。

* 推論プロセスを監視する
* 不正確なツール計画を早期に検出する
* ユーザーにより速くフィードバックを提供する

**✓ 安定性のためにサーバー側ステートマシンと組み合わせる**

本番環境のシステムでは、Interleaved Thinking を決定論的なガードレールと併用することを推奨します。例:

* パラメータバリデータ
* 実行サンドボックス
* 最大再帰保護

## 9. まとめ

Interleaved Thinking は、複数ステップの推論とツール利用の信頼性を大幅に向上させます。

* 透明で検査可能な段階的推論
* ツール実行間の適応的な計画
* 長いワークフロー全体でのより強力なコンテキスト保持
* OpenAI スタイルの Chat Completions API と完全互換

Novita は高度な推論モデルのサポートを継続的に拡大し、エージェントレベルのインテリジェンスを API レイヤーにもたらします。
