Kimi K3 ハンズオンガイド: 新しいパラメータとAPIサポートマトリックス

2026年7月29日 · AIHubMix · 9 min read

Kimi K3 ハンズオンガイド: 新しいパラメータとAPIサポートマトリックス
ドキュメントインデックス
完全なドキュメントインデックスは次のリンクから取得できます: https://docs.aihubmix.com/llms.txt
このファイルを使用して、さらに探索する前に利用可能なすべてのページを発見してください。

2026年7月 Kimi K3 ガイド: reasoning_effort max、思考履歴、動的ツールロード、構造化出力、自動キャッシング、部分プレフィックス、およびビジョン入力。

Kimi K3 ハンズオンガイド: 思考モード、動的ツールロード、およびコンテキストキャッシング
この記事では、Kimi K3の新しいパラメータと使用上の注意点について説明します。AIHubMixでは、K3はチャット完了、レスポンス、およびClaude互換メッセージAPIを通じて利用可能です。詳細については、Moonshot公式プラットフォームドキュメントを参照してください。

各セクションの「検証済み」結論とサンプルレスポンスは、2026年7月17日にAIHubMix API(チャット完了 / レスポンス / メッセージ)を介して行われた実際の呼び出しから得られたものです。

1. モデル仕様の概要

項目
コンテキストウィンドウ 1Mトークン
最大出力 max_completion_tokensのデフォルトは131,072、最大1,048,576
入力モダリティ テキスト、画像(ビデオ入力についてはMoonshot公式ドキュメントを参照)
思考モード デフォルトでオン; reasoning_effort"max"のみをサポート
ストップシーケンス stopは最大5エントリを許可し、各エントリは32バイトを超えてはならない
検証済み: stopの両方の制限が検証されており、いずれかを超えると400が返されます; メッセージAPIはstop_sequencesに対して同じ検証を適用します。

ストップシーケンスに達した場合、メッセージAPIはAnthropicのセマンティクスに従いません: テストでは、stop_reason"end_turn""stop_sequence"ではなく)、stop_sequencenullであり、ストップワードの前の可視テキストは空である可能性があります。切り捨てを検出するためにこれらの2つのフィールドに依存するクライアントは注意が必要です。
# 6エントリでストップ / 33バイトのエントリ -> HTTP 400
"無効なリクエスト: ストップ配列が長すぎます。最大長5の配列が期待されましたが、代わりに長さ6の配列が得られました"
"無効なリクエスト: ストップシーケンスは32を超えてはならず、代わりに33が得られました"

2. 思考モード: reasoning_effortmaxのみをサポート

K3の思考はデフォルトでオンであり、reasoning_effortは単一のレベル"max"のみをサポートします。

マルチターンの会話では、思考履歴をそのまま返す必要があります: Moonshotの公式ドキュメントによれば、K3は思考を保持した状態で訓練されているため、マルチターンの会話では前のアシスタントメッセージを完全かつ変更せずに返す必要があります(思考内容を含む)。思考履歴が欠落すると出力品質が不安定になります。セッション管理フレームワークやプロキシレイヤーを使用している場合は、思考内容がトリミングされずに返されることを確認してください。

思考内容はレスポンスの`reasoning_content`フィールドに返されます; マルチターンの会話では、前のアシスタントメッセージ(`reasoning_content`を含む)をそのまま返してください。

```text theme={null}
from openai import OpenAI

client = OpenAI(
    base_url="https://aihubmix.com/v1",
    api_key="<AIHUBMIX_API_KEY>",
)

completion = client.chat.completions.create(
    model="kimi-k3",
    reasoning_effort="max",
    messages=[
        {"role": "user", "content": "カタツムリは10メートルの井戸の底にいます。毎日3メートル登りますが、毎晩2メートル滑り戻ります。頂上に達するまでに何日かかりますか?"}
    ],
)

print(completion.choices[0].message.reasoning_content)
print(completion.choices[0].message.content)
```

```text theme={null}
# マルチターン: 前のアシスタントメッセージをそのまま返す
messages = [
    {"role": "user", "content": "フランスの首都はどこですか?"},
    {"role": "assistant", "content": "パリです。", "reasoning_content": "<前のレスポンスからのreasoning_content>"},
    {"role": "user", "content": "その人口は?"},
]
```

> **検証済み**: レスポンスは`reasoning_content`を返します; 前のアシスタントメッセージ(`reasoning_content`を含む)をそのまま返した後、次のターンは通常通りに応答します。

思考内容は`reasoning`出力項目として返されます; マルチターンの会話では、前のターンの出力項目(`reasoning` + `message`)をそのまま`input`に追加してください。

```text theme={null}
from openai import OpenAI

client = OpenAI(
    base_url="https://aihubmix.com/v1",
    api_key="<AIHUBMIX_API_KEY>",
)

response = client.responses.create(
    model="kimi-k3",
    input="一言で答えてください: フランスの首都は?",
)

# 観察されたresponse.output項目のタイプ: ["reasoning", "message"]; テキスト: "パリ"
# マルチターン: input = [最初のユーザーメッセージ] + response.output + [次のユーザーメッセージ]
# 観察された2ターン目の回答: "ベルリン"
```

思考内容はネイティブの`thinking`コンテンツブロックとして返されます; マルチターンの会話では、前のアシスタントコンテンツブロック(思考ブロックを含む)をそのまま返してください。

```text theme={null}
from anthropic import Anthropic

client = Anthropic(
    api_key="<AIHUBMIX_API_KEY>",
    base_url="https://aihubmix.com"
)

response = client.messages.create(
    model="kimi-k3",
    max_tokens=4096,
    messages=[
        {"role": "user", "content": "一言で答えてください: フランスの首都は?"}
    ],
)

# 観察されたresponse.contentブロックのタイプ: ["thinking", "text"]; テキスト: "パリ"
# マルチターン: response.contentをそのままアシスタントメッセージとして返す
```

3. サンプリングパラメータは固定されています

K3のサンプリングパラメータはベンダーによって固定されています: temperature 1.0、top_p 0.95、n 1、presence_penalty / frequency_penalty 0。公式の推奨は、これらのパラメータをリクエストから省略することです。

注意: 固定されたサンプリング値は公式仕様の一部であり、レスポンス信号から検証することはできません; 公式の推奨に従ってこれらのパラメータを省略してください。

4. ツール呼び出しと動的ツールロード

toolsは最大128のツールをサポートします; tool_choiceはツール呼び出しを強制または無効にすることをサポートします。K3は動的ツールロードもサポートしており、システムメッセージのtoolsフィールドを介して会話中に新しいツールを注入できます(チャットAPI特有のメッセージ形状)。

`tool_choice`は`auto` / `none` / `required`をサポートします; `required`はモデルにツールを呼び出すことを強制します。動的ツールロード: ツール注入システムメッセージは`content`を持たず、注入されたツールは次のターンに対して有効になり、メッセージはすべてのリクエストに再度含める必要があります。

```text theme={null}
messages = [
    {"role": "system", "content": "あなたは役に立つアシスタントです。"},
    {"role": "user", "content": "こんにちは。"},
    {"role": "assistant", "content": "こんにちは、どのようにお手伝いできますか?"},
    # 会話中に新しいツールを注入: ツールフィールドのみ、コンテンツなし
    {
        "role": "system",
        "tools": [
            {
                "type": "function",
                "function": {
                    "name": "get_time",
                    "description": "現在の時刻を取得",
                    "parameters": {"type": "object", "properties": {}},
                },
            }
        ],
    },
    {"role": "user", "content": "今は何時ですか?"},
]
```

```text theme={null}
# tool_choice="required"でプロンプト"こんにちは" -> モデルはツールを呼び出すことを強制される
"finish_reason": "tool_calls",
"tool_calls": [{"function": {"name": "get_weather", "arguments": "{\"city\":\"New York\"}"}}]
```

> **検証済み**: `tool_choice: "required"`は無関係なプロンプトでもツール呼び出しを強制します; `"none"`はツール呼び出しを抑制します; `content`なしでシステムメッセージを介して会話中に注入されたツールは通常通り呼び出すことができます。

ツール定義はフラットな構造を使用し(`name`が最上位)、呼び出しを強制する場合も同様に`tool_choice: "required"`を使用し、呼び出しは`function_call`出力項目として返されます。動的ツールロードのサポートは進行中です; 現在はすべてのツールを最上位の`tools`パラメータで宣言してください。

```text theme={null}
response = client.responses.create(
    model="kimi-k3",
    input="こんにちは",
    tools=[{
        "type": "function",
        "name": "get_weather",
        "description": "都市の天気を取得",
        "parameters": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
    }],
    tool_choice="required",
)

# 観察された出力には: {"type": "function_call", "name": "get_weather", "arguments": "{\"city\":\"London\"}"}
```

ツールはAnthropicフォーマット(`input_schema`)を使用します; `tool_choice: {"type": "any"}`で呼び出しを強制し、`{"type": "none"}`で呼び出しを無効にします。❗ **Kimi K3の公式メッセージ(Anthropic互換)エンドポイントは動的ツールロードをサポートしていません**: テストでは、注入メッセージは200を返しますが、注入されたツールは効果がなく(モデルは呼び出せません)、すべてのツールを最上位の`tools`パラメータで宣言してください。

```text theme={null}
response = client.messages.create(
    model="kimi-k3",
    max_tokens=4096,
    tools=[{
        "name": "get_weather",
        "description": "都市の天気を取得",
        "input_schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
    }],
    tool_choice={"type": "any"},
    messages=[{"role": "user", "content": "こんにちは"}],
)

# 観察された: stop_reason "tool_use"; コンテンツにはget_weatherを呼び出すtool_useブロックが含まれています
```

5. 構造化出力

構造化出力は、モデルが与えられたJSONスキーマに厳密に準拠したコンテンツを返すことを意味します。

`response_format`は`json_schema`をサポートし、`strict`モードを持ちます。

```text theme={null}
completion = client.chat.completions.create(
    model="kimi-k3",
    messages=[
        {"role": "user", "content": "パリはフランスの首都です。都市名を抽出してください。"}
    ],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "extract",
            "strict": True,
            "schema": {
                "type": "object",
                "properties": {"city": {"type": "string"}},
                "required": ["city"],
            },
        },
    },
)

# 観察されたレスポンスコンテンツ: {"city":"パリ"}
```

> **検証済み**: 出力はスキーマに準拠した有効なJSONです。

構造化出力は`text.format`を介して宣言されます。

```text theme={null}
response = client.responses.create(
    model="kimi-k3",
    input="パリはフランスの首都です。都市名を抽出してください。",
    text={
        "format": {
            "type": "json_schema",
            "name": "extract",
            "strict": True,
            "schema": {"type": "object", "properties": {"city": {"type": "string"}}, "required": ["city"]},
        }
    },
)

# 観察された出力テキスト: {"city":"パリ"}
```

❗ **Kimi K3の公式メッセージ(Anthropic互換)エンドポイントは構造化出力をサポートしていません**: 構造化出力フィールドは静かに無視され、リクエストはHTTP 200を返し、自由形式のテキストが返され、エラーやフォールバック通知はありません。構造化出力が必要な場合は、チャット完了またはレスポンスAPIを使用してください。

6. コンテキストキャッシングは自動です

K3のコンテキストキャッシングは自動的に有効になり、パラメータは必要ありません。繰り返しの長いプレフィックスがキャッシュにヒットすると、ヒット数が使用量に報告されます(フィールド名はAPIによって異なります)。キャッシュの価格はモデルページで確認できます。

```text theme={null} # 同一の長いプレフィックスでの2回目の呼び出しの使用量 "prompt_tokens_details": {"cached_tokens": 1536} ```

> **検証済み**: 同一の長いプレフィックスでの2回目のリクエストは`usage.prompt_tokens_details.cached_tokens`でヒットを報告します。

```text theme={null} # 同一の長い指示での2回目のレスポンス呼び出し "input_tokens_details": {"cached_tokens": 1536} ``` ```text theme={null} # 同一の長いシステムプロンプトでの2回目のメッセージ呼び出し "cache_read_input_tokens": 1536 ```

7. partial プレフィックス完了

プレフィックス完了は、モデルが指定されたプレフィックスから生成を続けることを意味し、コード完了やフォーマット制御された出力に適しています。

最後のアシスタントメッセージに`"partial": true`を渡します。

```text theme={null}
messages = [
    {"role": "user", "content": "海についての俳句を書いてください。"},
    {"role": "assistant", "content": "波は泡に折りたたまれ、", "partial": True},
]

# プレフィックス: "波は泡に折りたたまれ、"  -> モデルによって返される続き
# 塩が空気中に漂う—
# 月が潮を引き寄せる。
```

> **検証済み**: 生成は与えられたプレフィックスから続き、繰り返すことはありません。

プレフィックスを`input`配列の最後のアシスタントメッセージとして渡します; `partial`パラメータは必要ありません。

```text theme={null}
response = client.responses.create(
    model="kimi-k3",
    input=[
        {"role": "user", "content": "海についての俳句を書いてください。"},
        {"role": "assistant", "content": "波は泡に折りたたまれ、"},
    ],
)

# 観察された続き: "塩が空気中に漂う— / 月が潮を引き寄せる。"
```

同じ機能はプロトコルのネイティブアシスタントプレフィルを使用して達成され、`partial`パラメータは不要です — プレフィックスを最後のアシスタントメッセージとして渡します。

```text theme={null}
response = client.messages.create(
    model="kimi-k3",
    max_tokens=4096,
    messages=[
        {"role": "user", "content": "海についての俳句を書いてください。"},
        {"role": "assistant", "content": "波は泡に折りたたまれ、"},
    ],
)

# 観察された続き: "塩の風がカモメの鳴き声を運ぶ— / 潮が引く ..."
```

8. ビジョン入力

画像はbase64として渡されます; コンテンツブロックの形式はAPIによって異なります。

```text theme={null} messages = [ { "role": "user", "content": [ {"type": "text", "text": "この画像の主な色は何ですか?一言で。"}, {"type": "image_url", "image_url": {"url": "data:image/png;base64,"}}, ], } ]

# 観察されたレスポンスコンテンツ: "赤"  (入力: 64x64の単色赤PNG)
```

> **検証済み**: base64画像入力は機能し、モデルはテスト画像を正しく説明します。

```text theme={null} input = [ { "role": "user", "content": [ {"type": "input_text", "text": "この画像の主な色は何ですか?一言で。"}, {"type": "input_image", "image_url": "data:image/png;base64,"}, ], } ]

# 観察された出力テキスト: "赤"
```

```text theme={null} messages = [ { "role": "user", "content": [ {"type": "text", "text": "この画像の主な色は何ですか?一言で。"}, {"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": ""}}, ], } ]

# 観察されたレスポンステキスト: "赤"
```

9. 検証済みの参考: 長い単一呼び出しタスクのレイテンシと使用量

K3の思考は最大レベルに固定されているため、複雑なタスクに対する単一リクエストは通常のモデルよりもかなり長くかかります。単一ファイルのHTMLゲーム生成タスクからの測定データ(1つのプロンプトと参照画像で、反復なしで一度に生成): 単一リクエストは2,541秒(約42分)かかり、74,994の完了トークンのうち54,486(73%)が思考トークンであり、最終出力は直接実行可能なコードの1,275行で、finish_reasonstopでした。

クライアント側の推奨:

  • クライアントのタイムアウトを数分以上に設定し、長いタスクにはストリーミングを優先してください;
  • max_completion_tokensに十分な余裕を持たせてください — この場合、思考だけで54,486トークンを消費しました。

10. 機能 × API サポートマトリックス

以下のテーブルのすべてのセルは、2026年7月17日にAIHubMixの本番APIへの実際の呼び出しを通じて検証されました; 各セルは対応するAPIのパラメータ / フィールド構文を示しています。

機能 チャット完了 レスポンス メッセージ
レスポンス内の思考内容 reasoning_contentフィールド reasoning出力項目 thinkingコンテンツブロック
思考履歴のパスバック ✅ アシスタントメッセージがそのまま返される ✅ 出力項目がそのまま返される ✅ コンテンツブロックがそのまま返される
ツール呼び出しの強制 / 無効化 tool_choice: "required" / "none" tool_choice: "required" {"type": "any"} / {"type": "none"}
動的ツールロード ✅ システムメッセージでtoolscontentなし) ➖ サポート進行中 ❗ 公式メッセージ(Anthropic互換)エンドポイントではサポートされていません
構造化出力 response_format(json_schema + strict) text.format(json_schema) ❗ 公式エンドポイントではサポートされていません; フィールドは静かに無視される(200 + 自由形式のテキスト) — チャット / レスポンスを使用してください
自動キャッシュヒットメーター usage.prompt_tokens_details.cached_tokens usage.input_tokens_details.cached_tokens usage.cache_read_input_tokens
プレフィックス完了 "partial": true ✅ アシスタントプレフィル ✅ アシスタントプレフィル(プロトコルネイティブ)
ビジョン入力 image_url(base64) input_image(base64) imageコンテンツブロック(base64)
ストップシーケンス stop(制限が検証済み) ➖ サポート進行中 stop_sequencesの制限は同様に検証されていますが、ヒット時にはstop_reason: "stop_sequence"stop_sequenceの値は返されません

FAQ

K3はAIHubMixでどのAPIをサポートしていますか?
チャット完了(/v1/chat/completions)、レスポンス(/v1/responses)、およびClaude互換メッセージAPI(/v1/messages)です。

思考を無効にしたり、下げたりできますか?
いいえ。K3の思考はデフォルトでオンであり、reasoning_effortは単一の"max"レベルのみをサポートします。

なぜマルチターンの会話でreasoning_contentを返す必要があるのですか?
K3は思考を保持した状態で訓練されているため、Moonshotは前のアシスタントメッセージを完全かつ変更せずに返すことを要求します。思考履歴が欠落すると出力品質が不安定になります。

stopパラメータの制限は何ですか?
最大5つのストップシーケンス、各シーケンスは32バイトを超えてはならず、いずれかの制限を超えると400エラーが返されます。

メッセージAPIは構造化出力をサポートしていますか?
❗ いいえ。Kimi K3の公式メッセージ(Anthropic互換)エンドポイントは構造化出力フィールドを静かに無視します(200を返し、自由形式のテキストとエラーなし)。構造化出力が必要な場合は、チャット完了でresponse_formatを使用するか、レスポンスでtext.formatを使用してください。

なぜ単一のK3リクエストはそんなに時間がかかるのですか?
K3の思考は最大レベルに固定されており、思考トークンは複雑なタスクで大きな割合を占めます(測定されたケースでは73%の完了トークン)。クライアントのタイムアウトを数分以上に設定し、ストリーミングを使用してください。


価格とリアルタイムのステータスについては、Kimi K3モデルページを参照してください; 他のモデルについてはモデルギャラリーをご覧ください。

最終更新日: 2026-07-17

More from the blog