kimik3.io/API 指南
Kimi K3 API
模型 ID、鉴权、一段能跑通的请求,以及如何区分真正的成功和静默失败。本页所有响应体都是 2026-07-16 从线上真实抓回来的。
K3 兼容 OpenAI 格式。任何 OpenAI SDK 都能直接用——把 base_url 指向一个承载 kimi-k3 的接口地址、写上模型名,接入就完成了。
快速开始
下面的代码通过 EvoLink 调用 K3——它在 OpenAI 兼容接口上承载 kimi-k3。换成其他网关只需替换 base_url,其余一行不改。
from openai import OpenAI
client = OpenAI(
api_key="YOUR_EVOLINK_API_KEY",
base_url="https://direct.evolink.ai/v1", # <-- 你唯一需要改的一行
)
response = client.chat.completions.create(
model="kimi-k3",
messages=[
{"role": "user", "content": "Explain prompt caching in two sentences."},
],
)
print(response.choices[0].message.content)
print(response.usage)
curl https://direct.evolink.ai/v1/chat/completions \
-H "Authorization: Bearer $EVOLINK_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kimi-k3",
"messages": [
{"role": "user", "content": "Explain prompt caching in two sentences."}
]
}'
鉴权用 Bearer token:Authorization: Bearer <key>。key 放在环境变量里,绝不写进源码。接口路径是 /v1/chat/completions——如果你用的是 OpenAI SDK,把 /v1 根路径交给它,剩下的部分 SDK 会自动拼接。
拿 key:两条正规途径,任选一条
上面的代码需要一个 API key,正规途径有两条。有三样东西两边完全一样——费率($3.00 / $0.30 / $15.00 每百万 token,带日期戳)、模型行为(缓存块、推理计费——本来就是同一个模型),还有你的代码(两边都是 OpenAI 格式;以后想切换,只改一行 base_url)。不一样的,是调用之外的所有事:
| 月之暗面官方直连 | 经 EvoLink | |
|---|---|---|
| 上手 | 需要单独注册一个月之暗面平台账号 | 一个账号,注册即送 10 个免费额度,几分钟开通 |
| 一把 key 能调的模型 | Kimi 系列 | GPT、Claude、Gemini、K3 等全球主流模型——一把 key、一个接口 |
| 账单运维 | 每接入一家,就多一个要充值、盯余额、对账的钱包 | 所有模型共用一个余额、一张账单 |
| 多模型与 Agent 场景 | 模型路由、降级兜底、A/B 评测,意味着每家维护一个账号 | 路由、兜底、模型对比,只是在同一把 key 上改个字符串 |
什么时候该选官方直连?如果你只会用 Kimi 系列模型、且不希望链路上有任何中间层,那就直连——本页代码换成月之暗面的 base_url 一样能跑。除此之外的场景,右边这一列就是本站示例默认走网关的原因。
获取 EvoLink API key——注册即送 10 个免费额度
注册完成即进入带引导的控制台。已有账号?直接去控制台拿 key →
真实响应体长什么样
略有删减,其余逐字保留原始返回:
{
"id": "chatcmpl-6a593017ec44f116fb614895",
"object": "chat.completion",
"created": 1784229923,
"model": "kimi-k3",
"choices": [{
"index": 0,
"message": {
"role": "assistant",
"content": "OK",
"reasoning_content": "The user is asking me to reply with exactly \"OK\". This is a simple request with no complications..."
},
"finish_reason": "stop"
}],
"usage": {
"prompt_tokens": 90,
"completion_tokens": 47,
"total_tokens": 137,
"completion_tokens_details": {"reasoning_tokens": 31},
"prompt_tokens_details": {"cached_tokens": 90}
}
}
有两个字段值得注意,因为 OpenAI 里没有对应物:
message.reasoning_content——K3 的思考过程,和答案一起返回。取答案要读content。推理在 K3 上不是可开关的模式,而是恒开。usage.completion_tokens_details.reasoning_tokens——输出 token 里有多少花在了思考上。上面这个例子,47 个 token 里 31 个用于推理,而回答只有两个字母。这部分按输出价计费。
确认调用真的成功了
在 K3 上,HTTP 200 不等于成功。要查四件事:
model回显的是kimi-k3——而不是网关悄悄替换的兜底模型。finish_reason是stop,不是length——length加空内容,正是推理预算陷阱的典型特征。content是一个真正的字符串,不是""。usage.total_tokens不为零——它还告诉你这次花了多少。
落到代码上,最值得写的一条断言:
choice = response.choices[0]
if choice.finish_reason == "length" and not choice.message.content:
raise RuntimeError(
f"Reasoning consumed the whole budget "
f"({response.usage.completion_tokens_details.reasoning_tokens} reasoning tokens). "
f"Raise max_completion_tokens."
)
关键参数
| 参数 | 默认值 | 你需要知道的 |
|---|---|---|
model | — | 只能是 kimi-k3。不是 kimi-k3-chat,也不是 moonshot-k3。 |
max_completion_tokens | 131,072 | 没有十足把握就别动它。推理会消耗这份预算;把上限压得太低,你会为一个空字符串买单。完整来龙去脉。 |
stream | false | 长上下文下强烈建议开启——我们实测过 一条 498k token 的提示词耗时 52s。 |
stream_options | — | 设成 {"include_usage": true},否则流式输出时拿不到 usage 块,花了多少钱两眼一抹黑。 |
tools | — | 函数调用,最多 128 个工具,JSON Schema 格式。 |
tool_choice | auto |
auto · none · required · 或指定某个函数名。 |
response_format | {"type":"text"} |
支持 json_object 和 json_schema,用于结构化输出。 |
prompt_cache_key | null | 我们没有测出它对前缀复用有任何影响——缓存本来就是自动生效的。我们测了什么。 |
reasoning_effort | — | 目前只支持 max——但传入不支持的值会返回 HTTP 200,而不是报错。别指望它帮你做校验。 |
完整的参数与响应结构参考:EvoLink 的 kimi-k3 API 文档。
流式输出
Server-sent events,以 data: [DONE] 结束。K3 特有的一个细节:你最先收到的 token 是推理,不是答案。我们实测首 token 中位数 2.8s——而且五次实测里有三次,128 token 的上限被思考耗尽,一个内容 token 都没等到。
stream = client.chat.completions.create(
model="kimi-k3",
messages=[{"role": "user", "content": "Count to three."}],
stream=True,
stream_options={"include_usage": True}, # 不设这个就完全拿不到 usage
)
for chunk in stream:
if not chunk.choices:
continue
delta = chunk.choices[0].delta
if getattr(delta, "reasoning_content", None):
pass # 思考内容——通常不是你要渲染的部分
if delta.content:
print(delta.content, end="", flush=True)
如果你把 reasoning_content 渲染给用户,等于把模型的草稿纸亮给他们看。多数产品的做法是:推理阶段显示加载动画,只把 content 流式输出出去。
API 常见问题
Kimi K3 的模型 ID 是什么?
只能是 kimi-k3——不是 kimi-k3-chat,也不是 moonshot-k3。响应会在 model 字段里把它回显出来,值得写一条断言去校验。
Kimi K3 兼容 OpenAI 格式吗?
兼容。K3 走标准的 /v1/chat/completions 接口形态,任何 OpenAI SDK 无需改动即可使用——设好 base_url 和模型名就行。K3 特有的两处补充,是 message 里的 reasoning_content 和 usage 里的 reasoning_tokens。
用 Kimi K3 API 需要月之暗面账号吗?
不需要。任何承载 kimi-k3 的接口地址都能用——通过 EvoLink,一个账号、10 个免费额度,就能在调 K3 的同时调用 GPT、Claude、Gemini 等全球主流模型,费率与月之暗面官方直连一致。
调 Kimi K3 该用哪个 base_url?
走 EvoLink:https://direct.evolink.ai/v1。直连月之暗面:https://api.moonshot.ai/v1。两种方式下,其余代码完全一致。
拿到 key,跑通上面的代码
EvoLink 在 OpenAI 兼容接口上承载 kimi-k3——一把 key 即可调用 GPT、Claude、Gemini 等全球主流模型。注册即送 10 个免费额度。