Moonshot AIは2026年7月16日にKimi K3をリリースし、同社史上最も高性能なモデルと位置付けました。2.8TパラメーターのMixture-of-Experts設計、1,048,576トークンのコンテキストウィンドウを備える、世界初のオープンな3Tクラスモデルです。開発で重要なのは規模そのものではなく、OpenAI互換のAPIとしてすぐに使える点です。既存のOpenAI SDKクライアントでbase_url、APIキー、モデルIDを切り替えるだけで、kimi-k3を呼び出し、ストリーミング、ツール呼び出し、JSON出力を実装できます。
要約(TL;DR)
- APIモデルIDは
kimi-k3です。OpenRouterではmoonshotai/kimi-k3を使用します。 - APIはOpenAI SDK互換です。
base_url、api_key、model="kimi-k3"を設定します。 - ベースURLはplatform.kimi.aiのコンソールで確認してください。Kimiはこれまで
https://api.moonshot.ai/v1を使用していました。 - コンテキストウィンドウは1Mトークンです。料金はキャッシュヒット入力が100万トークンあたり$0.30、キャッシュミス入力が$3.00、出力が$15.00です。
- ストリーミング、ツール呼び出し、JSONモード、構造化出力、
reasoning_effortがチャット補完形式で利用できます。 - 大量かつ定型的なコーディング処理では、K2.7 Codeラインのほうがコストに適する場合があります。
-
Apidogで生のHTTPリクエスト、SSEストリーム、
tool_callsを確認すると、SDKでは見えにくい問題を切り分けられます。
どのKimiモデルを使うべきか
まず、ワークロードに対してモデルを選びます。
| 要件 | 推奨 |
|---|---|
| 複雑なコーディング、長期実行エージェント、長文コンテキスト | kimi-k3 |
| 1Mコンテキスト、深い推論、ツール連携 | kimi-k3 |
| 大量の定型コーディング、CIテスト生成、コスト重視 | K2.7 Codeライン |
Kimi K3は、このファミリーの最先端モデルです。複雑なコーディング、長期的なエージェント作業、長いコンテキストを使う知識タスク向けの大規模MoEモデルです。一方で、ラインアップ内では出力トークンあたりのコストが最も高くなります。Moonshot自身のローンチ記事でも、内部比較においてK3がClaude Fable 5やGPT-5.6 Solに劣るケースが述べられています。
大量のコーディングアシスタント処理やCIテスト生成など、呼び出し回数が多いワークロードでは、K2.7 Codeラインがコスト面で適することがあります。以下の記事も比較に使えます。
KimiプラットフォームでAPIキーを取得する
platform.kimi.aiにサインインし、APIキーとベースURLを確認します。
手順は次のとおりです。
- コンソールのAPIキーセクションを開き、新しいキーを作成します。
- キーは作成直後にコピーして安全な場所に保管します。完全な値は再表示されません。
- 残高または請求ティアを確認し、
kimi-k3の呼び出しが残高不足で拒否されないようにします。 - コンソールに表示されるベースURLを控えます。過去には
https://api.moonshot.ai/v1が使われていましたが、アカウントのコンソール表示を優先してください。
APIキーはソースコードに書かず、環境変数として設定します。
export KIMI_API_KEY="sk-your-key-here"
export KIMI_BASE_URL="https://api.moonshot.ai/v1"
.envを使う場合は、.gitignoreに追加してください。キーをGit履歴、ログ、スクリーンショットに残さないことが重要です。
キャッシュヒットとキャッシュミスが請求額に与える影響は、Kimi K3料金ガイドで確認できます。
クイックスタート:最初のkimi-k3呼び出し
Kimi APIはOpenAIのチャット補完形式に準拠しています。既存のOpenAI SDKを使う場合、主に以下を変更します。
- APIキー:
KIMI_API_KEY - ベースURL:
KIMI_BASE_URL - モデル:
kimi-k3
Python
まずSDKをインストールします。
pip install openai
次に、base_urlをKimiのURLに設定します。
import os
from openai import OpenAI
client = OpenAI(
api_key=os.environ["KIMI_API_KEY"],
# 正確なURLは platform.kimi.ai のコンソールで確認してください。
base_url=os.environ.get("KIMI_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
SDKをインストールします。
npm install openai
baseURLとmodelを切り替えます。
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.KIMI_API_KEY,
// 正確なURLは platform.kimi.ai のコンソールで確認してください。
baseURL: process.env.KIMI_BASE_URL ?? "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
SDKを使わずに接続確認する場合は、まずcURLで1リクエスト送ります。
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."
}
]
}'
トラブルシューティングの目安です。
-
401:APIキーが未設定、無効、または誤っています。 -
404:モデルIDではなくベースURLやパスの設定ミスであることが多いです。 - 残高関連のエラー:コンソールでクレジットまたは請求ティアを確認します。
クライアントオプションはOpenAI Python SDKのドキュメントも参照できます。Kimiは同じチャット補完ワイヤーフォーマットを採用しています。
ストリーミングレスポンスを実装する
チャットUIや長いエージェント処理では、レスポンス全体を待たずにトークンを逐次表示します。stream=Trueを指定し、チャンクのdelta.contentを処理します。
Python
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)
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 ?? "");
}
内部ではサーバー送信イベント(SSE)が使われます。レスポンスはdata:フレームとして届き、終了時にはdata: [DONE]が送信されます。
SDKはSSEの詳細を抽象化しますが、ストリーム途中で切断された場合や、想定外のチャンクが届く場合は、生のSSEフレームを確認する必要があります。その確認には後述するApidogが便利です。
ツール呼び出し(関数呼び出し)を実装する
Kimi K3は、ツール呼び出し、ツール選択制約、動的ツール読み込みをサポートしています。エージェントからファイル読み取り、外部API呼び出し、ターミナル操作などを実行する場合に使えます。
実装は次の4ステップです。
- JSON Schemaでツールを定義する。
- モデルに
toolsを渡す。 - モデルが返した
tool_callsを取得する。 - アプリケーション側で関数を実行し、
role: "tool"として結果を返す。
1. ツールを定義してモデルに渡す
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引数です。実際のAPI呼び出しやDBアクセスは、必ずアプリケーション側で実行します。
2. ツールを実行し、結果を返す
import json
# 実運用では tool_call.function.arguments を検証してから関数を実行します。
weather_result = {
"city": "Singapore",
"temp_c": 31,
"sky": "humid",
}
messages.append(first.choices[0].message)
messages.append(
{
"role": "tool",
"tool_call_id": tool_call.id,
"content": json.dumps(weather_result),
}
)
final = client.chat.completions.create(
model="kimi-k3",
messages=messages,
tools=tools,
)
print(final.choices[0].message.content)
ツール呼び出しを必須にするには、tool_choice="required"を指定します。特定の関数だけを使わせる場合は、次の形式を使います。
tool_choice = {
"type": "function",
"function": {"name": "get_weather"},
}
複数ターンのエージェントでは、アシスタントの過去ターンを含めた完全なメッセージ履歴を維持してください。K3は思考履歴を保持するモードで訓練されているため、以前のアシスタントターンを不必要に削除すると生成品質が不安定になる可能性があります。
JSONモードと構造化出力を使う
機械処理するレスポンスでは、自然言語を後からパースするより、最初からJSONを要求するほうが安全です。
JSONオブジェクトを返す
response_format={"type": "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"}
受信後は必ずJSONとして検証します。
import json
data = json.loads(response.choices[0].message.content)
print(data["name"])
JSON Schemaで形式を制約する
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は、アシスタント応答を事前入力する場合に使える部分モードや、最新情報の取得に使えるインターネット検索も提供しています。
reasoning_effortを設定する
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がreasoning_effortを未対応フィールドとして拒否する場合は、extra_bodyで渡します。
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がまだ型定義していないプロバイダー固有パラメーターを送るための方法です。
コンテキストキャッシュを活用する
Kimi K3の入力料金は、キャッシュヒットとキャッシュミスで大きく異なります。
| 入力・出力 | 100万トークンあたりの料金 |
|---|---|
| キャッシュヒット入力 | $0.30 |
| キャッシュミス入力 | $3.00 |
| 出力 | $15.00 |
同一の先頭トークン列を繰り返し送ると、計算済み状態が再利用されます。キャッシュヒットを増やすには、プロンプトを次の順序で固定します。
- システムプロンプト
- 共有ルール・固定コンテキスト
- リポジトリ要約、仕様書、共通ドキュメント
- ターンごとに変わるユーザー入力
例えば、リポジトリ規模のエージェントでは、コードベースの要約を毎回変えずにプロンプト先頭へ置きます。長文ドキュメント検索でも、共通ドキュメントを先頭に維持し、末尾だけにクエリを追加します。
Apidogでkimi-k3をテスト・デバッグする
SDKは便利ですが、生のHTTP形式は隠されます。ツール呼び出しのJSONが崩れる、ストリーミングが途中で止まる、想定外のレスポンスが返るといった問題では、実際のリクエストとSSEフレームを確認する必要があります。
Apidogでは、kimi-k3へのHTTPリクエストを保存し、環境変数でキーを管理し、ストリーミングやtool_callsを生のレスポンスとして確認できます。PostmanなしでAPIをテストする記事も、基本的なAPIテストフローの参考になります。
kimi-k3用のリクエストは、次の手順で作成します。
- ApidogでHTTPリクエストを新規作成します。
- メソッドを
POSTに設定します。 - URLを
${KIMI_BASE_URL}/chat/completionsに設定します。 - 環境変数として
KIMI_API_KEYを作成します。 -
AuthorizationヘッダーをBearer {{KIMI_API_KEY}}に設定します。 -
Content-Type: application/jsonを追加します。 - 以下のJSONボディを送信します。
{
"model": "kimi-k3",
"messages": [
{
"role": "user",
"content": "Explain what a token bucket rate limiter does in one paragraph."
}
]
}
レスポンスでは、以下を確認します。
- HTTPステータスコード
- エラーメッセージ
- 実際に送信されたリクエスト本文
- 使用トークン数
- キャッシュヒット・キャッシュミスの情報
-
tool_callsの関数名と引数
ストリーミングを確認するには、リクエスト本文に"stream": trueを追加します。
{
"model": "kimi-k3",
"stream": true,
"messages": [
{
"role": "user",
"content": "Write a 6-line poem about flaky tests."
}
]
}
SSEのdata:チャンクを個別に確認できるため、SDKのイテレーターだけでは分からないストリーミング問題を切り分けられます。
モデル選定では、リクエストを複製してmodelだけを変更し、kimi-k3とkimi-k2-7-codeを同一プロンプトで比較します。比較する項目は次のとおりです。
- レイテンシ
- 出力品質
- 出力トークン量
- キャッシュヒット率
- 実行コスト
- ツール呼び出しの安定性
ApidogはcURLコマンドを直接インポートできるため、最初に作成したcURLリクエストを貼り付けるだけで、再利用可能なテストケースに変換できます。MCP経由のエージェント通信を調査する場合は、Apidog MCPクライアントによるビジュアルデバッグも参照してください。Apidogをダウンロードして、実際のキーでリクエストを検証できます。
実際の使用事例
kimi-k3は、特に次のパターンで活用できます。
リポジトリ規模のコーディングエージェント
1Mコンテキストとツール連携により、大規模コードベースを扱いながら、テスト実行、ログ解析、反復的な修正を行えます。コードベースの要約を固定プレフィックスとして維持し、コンテキストキャッシュを活用します。
長文ドキュメントの構造化抽出
仕様書、契約書、研究コーパスを入力し、json_schemaで構造化データを抽出します。共通ドキュメントをプロンプト先頭に置き、クエリだけを差し替えることでキャッシュヒットを狙えます。
移行・リファクタリング計画
RESTからGraphQLへの移行計画のように、設計上の判断が多い処理ではreasoning_effort="max"を使います。実際の機械的なコード編集は、より安価なモデルへ振り分ける選択肢があります。
根拠のあるリサーチ回答
インターネット検索とツール呼び出しを組み合わせることで、新しいデータを取得し、古いトレーニング知識だけに依存しないアシスタントを構築できます。
まとめ
Kimi K3を呼び出すために必要な基本設定は3つです。
base_url = Kimiコンソールで確認したURL
api_key = KIMI_API_KEY
model = kimi-k3
この設定後は、OpenAI互換のチャット補完APIとして、ストリーミング、ツール呼び出し、JSONモード、構造化出力、reasoning_effortを実装できます。
実装時は次の点を押さえてください。
- 固定プレフィックスを維持し、コンテキストキャッシュを活用する。
- 深い推論が必要な処理にK3を使う。
- 大量かつ定型的な処理ではK2.7ラインも比較する。
- SDKで実装する前後に、Apidogで生のHTTP・SSE・
tool_callsを検証する。
よくある質問
Kimi K3のAPIモデルIDは何ですか?
Kimiプラットフォームではkimi-k3です。OpenRouterではmoonshotai/kimi-k3を使用します。openrouter.ai/moonshotai/kimi-k3でモデル一覧を確認できます。
どのベースURLを使用すればよいですか?
platform.kimi.aiのコンソールに表示される値を使ってください。Kimiはこれまでhttps://api.moonshot.ai/v1を使用していました。コードにはハードコードせず、KIMI_BASE_URLのような環境変数で管理することを推奨します。
Kimi K3はOpenAI SDKと互換性がありますか?
はい。OpenAIのチャット補完形式に準拠しているため、base_urlとmodelを切り替えることで、OpenAIのPython・JavaScript SDKを利用できます。SDK未対応のプロバイダー固有フィールドはextra_bodyで渡せます。
Kimi K3 APIの料金はいくらですか?
キャッシュヒット入力は100万トークンあたり$0.30、キャッシュミス入力は$3.00、出力は$15.00です。詳細はKimi K3料金ガイドを参照してください。
コンテキストキャッシュは何をしますか?
以前のリクエストと同じ先頭トークンがある場合に、計算済み状態を再利用します。該当部分の入力コストは100万トークンあたり$3.00から$0.30になります。システムプロンプトと共有コンテキストを先頭に置き、リクエスト間で安定させることが重要です。
モデルの推論量を制御できますか?
はい。reasoning_effortで制御できます。現時点で利用可能な値はmaxで、デフォルトでもあります。推論量が増えるほど、出力トークンとレイテンシも増加します。
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を含む生のリクエストを送信し、SSEフレームを確認します。ツール呼び出しではtool_calls配列を確認し、モデルのJSON引数、ツールスキーマ、アプリケーション側の処理を順に切り分けてください。



Top comments (0)