Kimi K2 API終了:K2.7 CodeからK3.1 Proへの移行手順
K2.6とK2.7 Codeの処理を、2026年12月の終了予定までにK3.1 Proへ移します。登録日の条件を確認し、K2用のパラメータを変更して、アシスタントの完全なメッセージを保持します。OpenCodeとClaude Codeの設定、キャッシュ書き込み料金の計算、実行可能なAPI確認例と切り替え前の回帰テストを説明します。
目次

kimi-k2.6とkimi-k2.7-codeを使う処理は、Kimiが2026年12月下旬に予定する提供終了までにkimi-k3.1-proへ移行してください。本番のリクエストを切り替える前に、推論の強度と生成上限を明示し、ツール呼び出しの履歴とキャッシュ料金を確認します。2026-11-05時点で、新規アカウントへの制限はすでに始まっています。
Kimi K2 APIはいつ使えなくなりますか
利用条件を満たす既存アカウントは、現在もK2を使えます。ただし、Kimiはこれらの告知で、提供を終了する正確な日付や時刻を公開していません。
料金ページの告知では、2026年10月31日から、新規登録ユーザーはK2を利用できなくなったとしています。また、2026年12月末までに、すべてのK2モデルの提供を終了する予定としています。
現在のモデル一覧には、少し異なる表現があります。11月1日より前に登録したユーザーは、kimi-k2.6、kimi-k2.7-code、kimi-k2.7-code-highspeedを引き続き使えるとしています。これらのモデルの提供終了は、2026年12月下旬の予定です。
この境界付近に登録した場合は、自分のアカウントで実際に利用できるか確認してください。二つの記述から、登録日時の厳密な区切りを一つに決めることはできません。新しい導入では、最初からK3.1 Proを使ってください。
K2にアクセスできない場合のエラーが、すべて同じとは限りません。8月の変更履歴は、提供終了済みのkimi-k2.5とmoonshot-v1が404「model not found」を返すと明記しています。この記述は、K2.6やK2.7 Codeが提供終了後に返すエラーを定めたものではありません。
リクエストと会話履歴の保存方法を変更する
リクエストの本文と、会話履歴の保存方法を一緒に更新してください。Kimiの現在のパラメータ比較には、モデル名だけを置き換えると見落とす違いが記載されています。
| 設定 | kimi-k2.6 | kimi-k2.7-code | kimi-k3.1-pro |
|---|---|---|---|
| 思考モード | 既定で有効。無効化できます | 常に有効 | 常に有効。K2用のthinkingオブジェクトを削除します |
reasoning_effort | 非対応 | 非対応 | 最上位のフィールドにlow、high、maxを指定。既定値はmax |
temperature | 思考モードでは1.0、思考なしでは0.6に固定 | 1.0に固定 | 1.0に固定。リクエストから省略します |
| 文書に記載された生成上限の既定値 | max_tokens:32768 | max_tokens:32768 | max_completion_tokens:131072 |
K2.7 Codeでも、思考モードはすでに必須で、推論内容を保持する動作が有効でした。K2.6の思考なしモードから移行する場合は、これらの要件による変化が大きくなります。
K3.1 Proの導入ガイドでは、top_p=0.95、n=1、presence_penalty=0、frequency_penalty=0も固定値です。これらのフィールドとtemperatureは、リクエストから省略してください。利用するラッパーの既定値も確認します。アプリケーションが指定していなくても、クライアントがサンプリング値を追加する場合があります。
新しいChat Completionsリクエストには、max_completion_tokensを使ってください。APIリファレンスでは、max_tokensは非推奨とされています。ただし、削除済みとは書かれていません。K3.1 Proには最大1048576を設定できますが、実際に生成できる量は、コンテキスト内の残り容量にも制限されます。
生成上限は、出力できるトークン数の最大値です。各リクエストが必ずその数のトークンを消費するわけではありません。大きくなった既定値をそのまま引き継がず、処理するタスクに合わせて上限を決めてください。
推論の強度は、接続確認や範囲を絞った情報検索ならlowから始めます。通常のコーディング作業ではhighを試してください。回帰テストの結果から追加の推論が必要と判断できる場合は、maxを使います。lowは推論の強度を下げますが、思考モードを無効にはしません。
生成上限を決めてAPIとツール呼び出しを確認する
エージェントの設定を調べる前に、APIへ直接接続して動作を確認してください。
Global Kimi Open PlatformでAPIキーを作成します。2026-11-05時点の利用条件では、少なくとも$1のチャージを正常に完了する必要があります。https://api.moonshot.aiに対応するプラットフォームで発行したキーを使ってください。Kimi Codeのアカウントエラーは、別のKimi Codeの利用制限ガイドから確認できます。
Bashで次のコマンドを実行し、画面に表示せずにキーを入力します。
read -rs MOONSHOT_API_KEY && export MOONSHOT_API_KEY
次のBashコマンドは、Python 3の標準ライブラリを使います。課金対象のリクエストを2回送信し、ローカルの関数で実際に掛け算を実行します。生成上限の4096は、この計算の動作確認用です。一般的なコーディング作業に適した上限を示すものではありません。
python3 - <<'PY'
import json
import os
import urllib.error
import urllib.request
tools = [{
"type": "function",
"function": {
"name": "multiply",
"description": "Multiply two integers.",
"parameters": {
"type": "object",
"properties": {
"a": {"type": "integer"},
"b": {"type": "integer"}
},
"required": ["a", "b"],
"additionalProperties": False
}
}
}]
def chat(messages, choice):
payload = {
"model": "kimi-k3.1-pro",
"messages": messages,
"reasoning_effort": "low",
"max_completion_tokens": 4096,
"tools": tools,
"tool_choice": choice
}
request = urllib.request.Request(
"https://api.moonshot.ai/v1/chat/completions",
data=json.dumps(payload).encode("utf-8"),
headers={
"Authorization": "Bearer " + os.environ["MOONSHOT_API_KEY"],
"Content-Type": "application/json"
},
method="POST"
)
try:
with urllib.request.urlopen(request, timeout=120) as response:
data = json.load(response)
except urllib.error.HTTPError as error:
raise SystemExit(f"HTTP {error.code}: check access and request parameters.")
if data.get("model") != "kimi-k3.1-pro":
raise RuntimeError("Unexpected response model.")
if data["choices"][0]["finish_reason"] == "length":
raise RuntimeError("Generation limit reached; do not accept this result.")
return data
messages = [{
"role": "user",
"content": "Use multiply to calculate 6 times 7, then report the result."
}]
first = chat(messages, "required")
assistant = first["choices"][0]["message"]
calls = assistant.get("tool_calls") or []
if not calls:
raise RuntimeError("Expected a tool call.")
messages.append(assistant)
for call in calls:
function = call["function"]
arguments = json.loads(function["arguments"])
if function["name"] != "multiply":
raise RuntimeError("Unexpected tool.")
if not isinstance(arguments, dict) or set(arguments) != {"a", "b"}:
raise RuntimeError("Unexpected arguments.")
if any(type(arguments[key]) is not int for key in ("a", "b")):
raise RuntimeError("Expected integer arguments.")
result = arguments["a"] * arguments["b"]
messages.append({
"role": "tool",
"tool_call_id": call["id"],
"content": json.dumps({"result": result})
})
final = chat(messages, "none")
choice = final["choices"][0]
answer = choice["message"].get("content") or ""
if choice["finish_reason"] != "stop" or not answer.strip():
raise RuntimeError("Expected a completed final answer.")
print(answer)
print(json.dumps({"first": first["usage"], "final": final["usage"]}))
PY
期待する結果は、42を含む最終回答と、その後に表示される2回分の利用量オブジェクトです。この確認用スクリプトは、ツール呼び出しがない場合や、返されたモデルが想定と異なる場合にエラーで停止します。引数の不正、生成上限による打ち切り、最終回答の未完了も検出します。
特に重要なのは、messages.append(assistant)です。この操作で、reasoning_contentとtool_callsを含む応答メッセージ全体を保持します。その後、各ツールの実行結果には、対応するtool_call_idを付けます。本番の会話履歴を保存するときも、この履歴保持のルールに従ってください。
この例では、二つの段階を確認するため、ツール呼び出しを必須にする設定と禁止する設定を意図的に使っています。通常のエージェント処理では、次のツール呼び出しが必要かモデルに判断させる場合に、autoを使えます。
リクエストが失敗した場合は、エラーリファレンスを参照し、該当する確認を行ってください。
401では、キーの発行元プラットフォームと接続先を確認します。その後、同じ確認用スクリプトを再実行してください。- 既存のアプリケーションで
400が出る場合は、送信するJSONを確認します。K2用のthinking設定や、固定されたサンプリング値を上書きする指定が残っていないか調べてください。 404では、モデルIDとアカウントの利用権限の両方を確認します。このコードだけでは、モデル名の入力ミスとは断定できません。finish_reason="length"の応答は、未完了として扱います。タスク、推論の強度、生成上限のいずれかを調整してから、結果を採用してください。
2026-11-05時点で、BetterTokenのモデル一覧にもkimi-k3.1-proが掲載されています。OpenAI互換APIの接続先はhttps://www.bettertoken.ai/v1で、自分のBetterToken APIキーを使います。現在の料金とリクエストの仕様は、別途確認してください。Moonshotのキャッシュ規則だけでは、このゲートウェイの動作は判断できません。
OpenCodeとClaude Codeの設定を更新する
バックグラウンドの処理やサブエージェントを含め、K2を選択できるすべての経路を変更してください。メインの会話が成功しても、ほかの経路の動作まで確認できたことにはなりません。
OpenCode:Moonshotプロバイダーを選ぶ
組み込みのMoonshot AIプロバイダーを使い、モデル一覧を更新してください。プロバイダーIDはmoonshotaiです。APIキーはMOONSHOT_API_KEYから読み込みます。
以下は、OpenCode v1.19.5のCLI仕様に対応するコマンドです。キーを入力したときと同じBashセッションで実行してください。
opencode models moonshotai --refresh
opencode run --model moonshotai/kimi-k3.1-pro --variant high \
"Inspect the current project and identify the test command. Do not edit files."
更新した一覧に、moonshotai/kimi-k3.1-proが含まれていることを確認します。次の実行では、指定したプロバイダーとモデルから、現在のプロジェクトに即した回答が返るはずです。モデルが一覧にない場合は、先にインストール済みクライアントのバージョンと、一覧の更新状況を確認してください。
両方のフラグは、CLIリファレンスに記載されています。モデルの選択を保存するには、"model": "moonshotai/kimi-k3.1-pro"を設定します。保存先は、プロジェクトのopencode.jsonまたは全体設定の~/.config/opencode/opencode.jsonです。両方のファイルがある場合は、設定の優先順位に従ってください。
このコマンドは、今回の実行に対して推論の強度をhighに設定します。対話型セッションでは、最初のプロンプトを送る前に/variantsで強度を選択してください。クライアントも更新する場合は、リポジトリの編集を許可する前に、OpenCode 2の権限変更を確認します。
Claude Code:すべてのモデルの割り当てを更新する
Moonshotが公開するClaude Codeとの互換接続手順は、Moonshotのアダプターを利用する方法として扱ってください。Anthropicのゲートウェイに関する文書では、Claude CodeをClaude以外のモデルへ接続する構成はサポート対象外です。インストール済みのクライアントで動作を確認してください。
まず、~/.claude/settings.jsonとプロジェクトの設定を確認します。envブロックに残る古い接続先、認証情報、モデル、推論の強度を見直してください。Moonshotは、設定ファイル内の環境変数が、ターミナルでエクスポートした値を上書きする場合があると注意しています。
現在のMoonshotの例では、Haikuへの割り当てがkimi-k2.7-codeのままです。次のBash設定では、記載されたすべてのモデル区分を移行先へ割り当てる構成を提案します。
unset ANTHROPIC_API_KEY
export ANTHROPIC_BASE_URL="https://api.moonshot.ai/anthropic"
export ANTHROPIC_AUTH_TOKEN="$MOONSHOT_API_KEY"
export ANTHROPIC_MODEL="kimi-k3.1-pro"
export ANTHROPIC_DEFAULT_OPUS_MODEL="$ANTHROPIC_MODEL"
export ANTHROPIC_DEFAULT_SONNET_MODEL="$ANTHROPIC_MODEL"
export ANTHROPIC_DEFAULT_HAIKU_MODEL="$ANTHROPIC_MODEL"
export ANTHROPIC_DEFAULT_FABLE_MODEL="$ANTHROPIC_MODEL"
export CLAUDE_CODE_SUBAGENT_MODEL="$ANTHROPIC_MODEL"
export CLAUDE_CODE_EFFORT_LEVEL="high"
claude --model kimi-k3.1-pro
この設定は、APIの動作確認でエクスポートしたキーを再利用します。ANTHROPIC_SMALL_FAST_MODELを含め、K2に関する古い設定がほかに残っていないか確認してください。
/statusを実行し、ベースURLとモデルを確認します。続いて、簡単な回答を求めるタスクと、ローカルファイルを読み取るタスクを実行してください。実際に有効な推論の強度は、モデルの設定機能で確認します。
Claude CodeはMessagesプロトコルを使います。次のKimi Messagesのフィールドを、Chat Completionsのものと区別してください。
| 用途 | Chat Completions | Kimi Messages |
|---|---|---|
| 推論の強度 | reasoning_effort | output_config.effort |
| 生成上限 | max_completion_tokens | max_tokensが必須 |
| キャッシュの有効期間 | prompt_cache_options.ttl | 最上位のcache_control.ttl |
Chat Completionsで非推奨になったことを理由に、Messagesのmax_tokensのフィールド名を変更しないでください。
トークンを二重計上せずにキャッシュ料金を確認する
入力を、キャッシュからの読み取り、キャッシュへの書き込み、キャッシュを使わない入力に分けて集計してください。K3.1 Proは、キャッシュへの書き込みを別途課金します。費用の計算には、その料金も含めます。
Chat Completionsでは、以下のフィールドを読み取ります。
- 入力全体:
usage.prompt_tokens - キャッシュからの読み取り:
usage.prompt_tokens_details.cached_tokens - キャッシュへの書き込み:
usage.prompt_tokens_details.cache_write_tokens - 出力全体:
usage.completion_tokens
APIの利用量計算ルールでは、入力の三つの区分は重複しません。出力には、推論と回答のトークンがすでに含まれています。
各単価は、同じ通貨の1,000,000トークン当たりの料金にそろえてください。
uncached = prompt_tokens - cached_tokens - cache_write_tokens
token_cost = (
uncached * miss_rate
+ cached_tokens * hit_rate
+ write_5m * write_5m_rate
+ write_1h * write_1h_rate
+ completion_tokens * output_rate
) / 1_000_000
ここでは、write_5m + write_1hがcache_write_tokensと一致する必要があります。単価は、プロバイダーの現在の料金表で確認してください。この式はトークン料金の見積もりなので、実際の請求額と照合します。
キャッシュのオプションを省略すると、Kimiは自動的に5mのキャッシュを使います。リクエスト間の間隔が長い処理では、"prompt_cache_options": {"mode": "implicit", "ttl": "1h"}の使用を検討してください。
キャッシュのガイドによると、既存のキャッシュ項目は最初に設定された有効期間を維持します。1hを送信しても、有効な5mの項目が1hへ変更されるわけではありません。実際の書き込み量を確認するため、応答ヘッダーのMsh-Usage-Cache-Write-Tokens-5mとMsh-Usage-Cache-Write-Tokens-1hを記録してください。
実際の処理に近い、変更しない共通の先頭部分を使って、リクエストを繰り返して確認します。この先頭部分をプレフィックスと呼びます。先ほどの計算例は短すぎて、キャッシュの効果を確認できない場合があります。ブロックを満たさない端数部分は、キャッシュに書き込まれないためです。確認中は推論の強度を一定に保ってください。強度を変更すると、プレフィックスキャッシュへのヒットが無効になります。
ストリーミングを使うアプリケーションでは、stream_options.include_usage=trueも設定してください。ストリーミングのガイドに従い、分割して届く推論、回答、ツール呼び出しの断片を組み立てます。最後に届く利用量のチャンクは、choices配列が空でも読み取ってください。
本番切り替え前に回帰テストを行う
新しい経路が既存の受け入れテストを通過してから、本番リクエストの一部を切り替えてください。
各比較では、リポジトリのリビジョン、プロンプト、ツール定義、テストコマンドをそろえます。low、high、maxは、それぞれ別のセッションで実行してください。タスクの完了品質、応答全体が返るまでの時間、入力の各区分、出力の総量、再試行、請求額を記録します。
回帰テストには、次のケースを含めてください。
- 以前のアシスタントの応答に依存する、複数ターンのタスク。
- ツールを呼び出した後に、モデルが再び応答するタスク。
- JSON引数が断片に分かれて届く、ストリーミングのツール呼び出し。
- 設定した生成上限に近いタスク。
- K2への割り当てが残っている可能性のある、バックグラウンド処理やサブエージェントのタスク。
品質と応答時間の要件を満たす、最も低い推論の強度を選んでください。重要なタスクでhighが失敗し、maxが自分の検証で安定して完了する場合は、その種類のタスクにmaxを使います。
K2への切り戻しは、アカウントが引き続きK2を利用できる間だけ、選択肢として残してください。提供終了の時期までに、K2へ依存しない代替経路を検証します。定期実行ジョブ、再試行の経路、エージェントの設定から、古いK2のIDを取り除いてください。