Moonshot AIは2026年7月16日にKimi K3をリリースし、これを同社史上最も高性能なモデルと称しました。これは、2.8TパラメーターのMixture-of-Experts設計と1,048,576トークンのコンテキストウィンドウを備えた、世界初のオープンな3Tクラスモデルです。開発者にとって興味深いのはその規模ではなく、APIです。Kimi K3はOpenAI SDKの言語に対応しているため、すでにGPTまたは他のOpenAI互換エンドポイントを使用している場合は、同じクライアントをkimi-k3に接続するだけで、数分でレスポンスのストリーミングを開始できます。このガイドでは、キーの取得、Python、JavaScript、cURLでのクイックスタート、ストリーミング、ツール呼び出し、JSONモード、設定可能な推論エフォートパラメーター、そしてキャッシュヒット入力がキャッシュミス入力入力よりも約10倍安価になるコンテキストキャッシュについて説明します。その後、Apidogでこれらの呼び出しをテストおよびデバッグし、推測に頼るのではなく、生の要求とサーバー送信イベントを確認できます。
要約 (TL;DR)
- APIモデルIDは
kimi-k3です。OpenRouterでは、スラッグはmoonshotai/kimi-k3です。 - エンドポイントはOpenAI-SDK互換です。
base_urlを設定し、api_keyを設定し、model="kimi-k3"を設定すれば完了です。platform.kimi.aiのコンソールで正確なベースURLを確認してください。Kimiはこれまでhttps://api.moonshot.ai/v1を使用していました。 - コンテキストウィンドウは1Mトークンです。料金は、キャッシュヒット入力トークン100万あたり$0.30、キャッシュミス入力トークン100万あたり$3.00、出力トークン100万あたり$15.00です。
- ストリーミング、ツール呼び出し、JSONモード、構造化出力、および
reasoning_effortパラメーター(現在はmaxが利用可能)はすべて、標準のチャット補完形式で機能します。 - 古い、または予算重視のコーディングワークロードには、K2.7ラインが依然としてより適している場合があります。選択に関する注記は以下にあります。
- Apidogにリクエストをインポートして、ストリーミングを検査し、ツール呼び出しをデバッグし、キーを環境変数として保存し、
kimi-k3とkimi-k2-7-codeをA/Bテストします。
どのKimiモデルを呼び出すべきか
コードを書く前に、適切なターゲットを選びましょう。Kimi K3は、このファミリーの最先端モデルです。複雑なコーディング、長期にわたるエージェント作業、長いコンテキストにわたる知識タスクを対象とした大規模なMoEです。このモデルはラインアップの中で最も高いトークンあたりの出力コストを伴い、Moonshot自身のローンチ記事では、K3が内部比較でClaude Fable 5やGPT-5.6 Solに劣ることを率直に述べています。強力ですが、圧倒的な最先端の勝者ではなく、それに見合った価格設定がされています。

もしワークロードが大量のコーディングアシスタント、CIテストライター、または大規模に呼び出しごとに料金を支払うものである場合、古いK2.7 Codeラインの方がコスト面で適していることが多いです。Kimi K2.7 Code APIガイドとKimi K2.7 Codeとは何かの概要から始めて、そのティアがあなたのケースに合うかどうかを確認してください。機能と価格の比較については、Kimi K3 vs K2.7 Codeの比較記事で、それぞれのモデルがどのような点で優れているかが示されています。さらなる推論の深さ、完全な1Mコンテキスト、またはエージェントによるツール連携が必要な場合はkimi-k3を使用し、タスクが定型作業で量が多い場合はK2.7に切り替えてください。まず、完全な機能概要を知りたい場合は、Kimi K3とは何かの解説記事でアーキテクチャとモデルの立ち位置について説明されています。
KimiプラットフォームでAPIキーを取得する
platform.kimi.aiにアクセスしてサインインします。新しいコンソールでは、キーの作成、使用状況の監視、アカウントのベースURLの確認ができます。

- コンソールのAPIキーセクションを開き、新しいキーを作成します。
- 一度コピーし、安全な場所に保管してください。完全な値は二度と表示されません。
kimi-k3への呼び出しが残高不足で拒否されないように、クレジットを追加するか、請求ティアを確認してください。- コンソールに表示されているベースURLに注意してください。Kimiはこれまで
https://api.moonshot.ai/v1を使用していましたが、コンソールがあなたのアカウントの真の情報源です。
キーがソースコードに記述されないように、環境変数としてエクスポートします。
export KIMI_API_KEY="sk-your-key-here"
この一つの習慣が、git履歴やスクリーンショットから秘密情報を守ります。後でApidogでテストする際にも、同じ値を環境変数として保存するため、キーはあなたが管理する正確に2つの場所に存在することになります。
キャッシュヒットとキャッシュミスの計算、およびそれが実際の月額請求にどのようにマッピングされるかの詳細については、Kimi K3料金ガイドを参照してください。
クイックスタート: 最初のkimi-k3呼び出し
KimiのAPIはOpenAIのチャット補完契約に準拠しているため、公式のOpenAI SDKはbase_urlとmodelの2つの変更を加えるだけで機能します。お好みのSDKをインストールし、以下のスニペットのいずれかを実行してください。
Python
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["KIMI_API_KEY"],
# Kimi is OpenAI-SDK compatible. Confirm the exact base URL in the
# console at platform.kimi.ai; Kimi has historically used the value below.
base_url="https://api.moonshot.ai/v1",
)
response = client.chat.completions.create(
model="kimi-k3",
messages=[
{"role": "system", "content": "You are a precise coding assistant."},
{"role": "user", "content": "Explain what a token bucket rate limiter does in one paragraph."},
],
)
print(response.choices[0].message.content)
JavaScript / TypeScript
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.KIMI_API_KEY,
// Confirm the base URL in the platform.kimi.ai console.
baseURL: "https://api.moonshot.ai/v1",
});
const response = await client.chat.completions.create({
model: "kimi-k3",
messages: [
{ role: "system", content: "You are a precise coding assistant." },
{ role: "user", content: "Explain what a token bucket rate limiter does in one paragraph." },
],
});
console.log(response.choices[0].message.content);
cURL
curl "$KIMI_BASE_URL/chat/completions" \
-H "Authorization: Bearer $KIMI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kimi-k3",
"messages": [
{"role": "user", "content": "Explain what a token bucket rate limiter does in one paragraph."}
]
}'
KIMI_BASE_URLをコンソールに表示されている値(例:https://api.moonshot.ai/v1)に設定してください。これらのいずれかが401を返した場合、キーが間違っているか、設定されていません。パスに対する404は通常、モデルが見つからないのではなく、ベースURLが間違っていることを意味します。OpenAI Python SDKのドキュメントでは、クライアントオプションがさらに詳しく説明されており、ワイヤーフォーマットが同じであるため、そこにあるすべてのオプションがここに適用されます。
ストリーミングレスポンス
チャットUIや長いエージェントのターンでは、補完全体を待つのと対照的に、トークンが到着次第受け取りたいと思うでしょう。stream=Trueを設定し、デルタを反復処理します。
stream = client.chat.completions.create(
model="kimi-k3",
messages=[{"role": "user", "content": "Write a 6-line poem about flaky tests."}],
stream=True,
)
for chunk in stream:
delta = chunk.choices[0].delta
if delta.content:
print(delta.content, end="", flush=True)
内部的にはこれはサーバー送信イベント(SSE)ストリームであり、各行は小さなJSONチャンクを運ぶdata:フレームで、ストリームはdata: [DONE]で終了します。SDKはそのフレーミングを隠してくれますが、これは便利です。ただし、ストリームの途中で何かが壊れて生フレームを見る必要があるまでは、という話です。これは、以下のApidogのセクションがその価値を発揮する場所の一つです。
同じフラグはJavaScriptでも機能します。
const stream = await client.chat.completions.create({
model: "kimi-k3",
messages: [{ role: "user", content: "Write a 6-line poem about flaky tests." }],
stream: true,
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
ツール呼び出し(関数呼び出し)
Kimi K3は、ツール呼び出し、ツール選択制約、および動的ツール読み込みをサポートしているため、ファイルを読み取ったり、APIを呼び出したり、ターミナルコマンドを実行したりするエージェントに組み込むことができます。JSONスキーマで関数を記述し、モデルがいつ関数を呼び出すかを決定し、toolメッセージで結果を返します。
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get the current weather for a city.",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string", "description": "City name, e.g. Singapore"},
},
"required": ["city"],
},
},
}
]
messages = [{"role": "user", "content": "What's the weather in Singapore right now?"}]
first = client.chat.completions.create(
model="kimi-k3",
messages=messages,
tools=tools,
tool_choice="auto",
)
tool_call = first.choices[0].message.tool_calls[0]
print(tool_call.function.name) # get_weather
print(tool_call.function.arguments) # {"city": "Singapore"}
モデルはあなたの関数を実行しません。名前とJSON引数を渡します。あなたが実際の作業を実行し、その出力をモデルにフィードバックして、モデルが最終的な回答を作成できるようにします。
import json
# Append the assistant turn that asked for the tool, then the tool result.
messages.append(first.choices[0].message)
messages.append({
"role": "tool",
"tool_call_id": tool_call.id,
"content": json.dumps({"city": "Singapore", "temp_c": 31, "sky": "humid"}),
})
final = client.chat.completions.create(model="kimi-k3", messages=messages, tools=tools)
print(final.choices[0].message.content)
ツール呼び出しを強制するにはtool_choice="required"を設定するか、特定の関数を固定するために{"type": "function", "function": {"name": "get_weather"}}オブジェクトを渡します。これらの制約は、どのツールを起動すべきか既に分かっている場合にエージェントを適切に動作させます。
K3固有の注意点として、モデルが「思考履歴を保持するモード」で訓練されていることを早期に知っておく価値があります。もしエージェントのハーネスが、モデルの以前のターン間の推論を破棄すると、生成品質が不安定になる可能性があります。複数ターンのエージェントループを構築する際は、アシスタントの内部ターンをトリミングするのではなく、完全なメッセージ履歴を渡してください。
JSONモードと構造化出力
機械で読み取り可能な出力が必要な場合は、散文を解析する代わりに直接JSONを要求します。response_formatをjson_objectに設定し、モデルにJSONを返すように指示します。
response = client.chat.completions.create(
model="kimi-k3",
messages=[
{"role": "system", "content": "Return only valid JSON. No prose, no markdown."},
{"role": "user", "content": "Extract name and role from: 'Ada Lovelace, mathematician'."},
],
response_format={"type": "json_object"},
)
print(response.choices[0].message.content) # {"name": "Ada Lovelace", "role": "mathematician"}
より厳密な保証のために、Kimiはスキーマに基づいた構造化出力をサポートしています。お使いのSDKバージョンが受け入れる場合、モデルが指定した形式に準拠するようにjson_schemaレスポンス形式を渡します。
response = client.chat.completions.create(
model="kimi-k3",
messages=[{"role": "user", "content": "Extract name and role from: 'Ada Lovelace, mathematician'."}],
response_format={
"type": "json_schema",
"json_schema": {
"name": "person",
"schema": {
"type": "object",
"properties": {
"name": {"type": "string"},
"role": {"type": "string"},
},
"required": ["name", "role"],
},
},
},
)
デプロイする前に、コンソールでアカウントのjson_schemaサポートを確認してください。不明な場合は、json_objectに加えてクライアント側での検証ステップが安全なフォールバックです。Kimiは、アシスタントの応答を事前に入力したり、新しいデータに基づいて回答を提供したりする際に役立つ、部分モードとインターネット検索も公開しています。
設定可能な推論エフォート
Kimi K3は、モデルが回答する前にどれだけ「考える」かを制御するreasoning_effortパラメータを公開しています。現在利用可能なレベルはmaxで、これはデフォルトでもあります。Moonshotは、より低いレベルと高いレベルを計画中であると述べています。より深い思考は、より多くの出力トークンを消費し、レイテンシを追加するため、タスクごとに調整するレバーとなります。
response = client.chat.completions.create(
model="kimi-k3",
messages=[{"role": "user", "content": "Plan a migration from REST to GraphQL for a 40-endpoint API."}],
reasoning_effort="max",
)
お使いのOpenAI SDKバージョンがそのフィールドを不明として拒否する場合、代わりにエスケープハッチを通して渡してください。
response = client.chat.completions.create(
model="kimi-k3",
messages=[{"role": "user", "content": "Plan a migration from REST to GraphQL."}],
extra_body={"reasoning_effort": "max"},
)
extra_bodyパターンは、ベースSDKがまだモデル化していないプロバイダー固有のフィールドを送信する方法です。これは、互換性のあるエンドポイントがクライアントライブラリよりも速く進化する場合によく見られます。
Apidogでkimi-k3をテストおよびデバッグする
SDKコードはワイヤーフォーマットを隠蔽しますが、ツール呼び出しが間違った形式を返したり、ストリームが途切れたりして、問題が自分にあるのかエンドポイントにあるのかが分からない場合までは問題ありません。ここで、生のHTTPを扱うAPIクライアントが役立ちます。Apidogを使用すると、正確なkimi-k3リクエストを送信し、SSEストリームをフレームごとに監視し、リクエスト本文からキーを分離したままにすることができます。ターミナルで作業せずにAPI呼び出しをテストしたい場合、これはcurlを使って目を凝らすよりもクリーンなループです。PostmanなしでAPIをテストするウォークスルーでは、一般的なワークフローが説明されています。

以下に、kimi-k3に特化したループを示します。
- Apidogで新しいHTTPリクエストを作成します。メソッドをPOSTに設定し、URLをベースURLに
/chat/completionsを加えたものにします。 - キーを環境変数として保存します。Apidogの環境設定で
KIMI_API_KEYを追加し、AuthorizationヘッダーをBearer {{KIMI_API_KEY}}に設定します。これで、秘密情報が貼り付けではなく参照されるようになり、環境を切り替えることでテストキーと本番キーを切り替えることができます。 "model": "kimi-k3"とmessages配列を含むJSONボディを貼り付けます。それを送信し、トークン使用量を含む完全なレスポンスを読み取り、実際の呼び出しでのキャッシュヒットとキャッシュミスのカウントを確認できるようにします。"stream": trueに切り替え、サーバー送信イベントが個別のフレームとして到着するのを確認します。生のdata:チャンクを見ると、SDKの整然としたイテレータでは分からない方法でストリーミングのバグが明らかになります。- レスポンス内の
tool_calls配列を検査して、ツール呼び出しをデバッグします。引数が不正な形式で返された場合、モデルが不正なJSONを生成したのか、スキーマが曖昧だったのかを確認し、その場で記述を修正できます。 kimi-k2-7-codeとA/Bテストを行います。リクエストを複製し、modelフィールドのみを変更して、同じプロンプトでのレイテンシ、出力品質、およびコストを比較します。それが、K3の追加の推論がタスクにとって価格上昇に見合う価値があるかどうかを判断する最も速く正直な方法です。
ApidogはOpenAI互換のリクエストを直接インポートするため、cURLコマンドを貼り付けるだけで、ヘッダーとボディが既に入力された保存可能で再生可能なリクエストを作成できます。そこから、Kimiがアップデートをリリースするたびにチームが再実行できる共有テストケースになります。エージェントがMCPを介してモデルと通信する場合、Apidog MCPクライアントによるビジュアルデバッグガイドで、それらの呼び出しを追跡する方法も示されています。ご自身のキーでこのループを試したい場合は、Apidogをダウンロードしてください。
実際の使用事例
いくつかのパターンは、kimi-k3が構築された目的にきれいに適合します。
- リポジトリ規模のコーディングエージェント。 1Mのコンテキストとエージェントによるツール連携により、モデルは大規模なコードベースを保持し、テストを実行し、ログを読み取り、反復作業を行うことができます。コードベースのダイジェストを安定したプレフィックスとしてキャッシュすることで、ターンあたりのコストを抑えることができます。
- 長文ドキュメントの知識作業。 完全な仕様書、契約書、または研究コーパスを入力し、
json_schemaによる構造化抽出を要求します。繰り返しのクエリがキャッシュにヒットするように、ドキュメントをプロンプトの先頭に置いておきます。 - 移行およびリファクタリング計画。 計画段階では
reasoning_effortをmaxに設定し、より深い思考が成果を出すようにします。その後、機械的な編集にはより安価なモデルに戻します。 - 根拠のある研究回答。 インターネット検索とツール呼び出しにより、K3は新しいデータを取得して引用できるため、古いトレーニング知識に頼れないアシスタントに適しています。
これらのすべてのケースにおいて、ワークフローは同じです。SDKでリクエストを構築し、Apidogで生の動作を確認し、その形式が信頼できると判断したらアプリに組み込みます。
まとめ
Kimi K3の呼び出しは、OpenAI互換クライアントの3つの設定に集約されます。コンソールからのベースURL、APIキー、そしてmodel="kimi-k3"です。そこから、ストリーミング、ツール呼び出し、JSONモード、構造化出力、およびreasoning_effortはすべて、既知のチャット補完契約に準拠します。理解しておくべき2つの点は、キャッシュの経済性(安定したプレフィックスを維持することで$3.00の入力が$0.30の入力になること)、そしてK3が推論の深さを実際の価格で購入するという正直なトレードオフです。そのため、定型的な大量の作業はK2.7ラインに振り分けるべきです。コードでリクエストを構築し、Apidogで検証すれば、kimi-k3を予期せぬ問題なくデプロイできるでしょう。
よくある質問
Kimi K3のAPIモデルIDは何ですか? Kimi独自のプラットフォームではkimi-k3です。OpenRouterを通じて呼び出す場合、スラッグはmoonshotai/kimi-k3です。openrouter.ai/moonshotai/kimi-k3でモデルのOpenRouterリストを読むことができます。
どのベースURLを使用すればよいですか? アカウントの信頼できる情報源であるplatform.kimi.aiのコンソールで確認してください。Kimiはこれまでhttps://api.moonshot.ai/v1を使用していました。コードでは、ハードコーディングするのではなく、コンソールから設定するbase_url変数として保持してください。
Kimi K3はOpenAI SDKと互換性がありますか? はい、互換性があります。APIはOpenAIのチャット補完形式に準拠しているため、base_urlとmodelを変更すれば、公式のOpenAI PythonおよびJavaScript SDKが機能します。プロバイダー固有のフィールドはextra_bodyを介して渡されます。
Kimi K3 APIの料金はいくらですか? キャッシュヒット入力トークン100万あたり$0.30、キャッシュミス入力トークン100万あたり$3.00、出力トークン100万あたり$15.00です。キャッシュの再利用のためにプロンプトを構造化することが、請求額を削減する最大の手段です。Kimi K3料金ガイドで詳細な数字を確認できます。
コンテキストキャッシュは具体的に何をするのですか? リクエストの冒頭のトークンが以前のリクエストと一致する場合、エンドポイントは計算済みの状態を再利用し、再計算を避けます。これにより、その部分の入力コストが100万あたり$3.00から$0.30に下がります。キャッシュヒットを最大化するために、システムプロンプトと共有コンテキストを先頭に置き、呼び出し間で同じ内容を維持してください。
モデルがどれだけ深く考えるかを制御できますか? はい、reasoning_effortを介して制御できます。現在利用可能なレベルはmaxで、これはデフォルトでもあります。Moonshotは、他のレベルも計画中であると述べています。エフォートが高いほど、より多くの出力トークンを消費し、レイテンシが増加します。
Kimi K3とKimi K2.7 Codeのどちらを使うべきですか? 深い推論、完全な1Mコンテキスト、またはエージェントによるツール連携が必要な場合はkimi-k3を使用してください。大量の定型的なコーディング作業には、より安価なK2.7ラインがより適していることが多いです。Kimi K3 vs Kimi K2.7 Codeの比較とKimi K2.7 Code APIガイドが判断の助けになります。
破損したストリーミングまたはツール呼び出しの応答をデバッグするにはどうすればよいですか? Apidogで"stream": trueを設定して生の要求を送信し、サーバー送信イベントをフレームごとに読み取るか、tool_calls配列を検査してモデルが不正な形式のJSONを返したかどうかを確認します。キーを環境変数として保存することで、テスト中にリクエスト本文から分離できます。
