API 文档
概述
Kimi K2 API 提供对 Kimi K2 语言模型的编程访问。该 API 同时支持 OpenAI 和 Anthropic 消息格式,可与现有应用程序无缝集成。
基础 URL
https://kimi-k2.ai/api
支持的协议
- 基于 HTTPS 的 REST API
- JSON 请求和响应体
- UTF-8 字符编码
- CORS 支持,适用于基于浏览器的应用程序
快速开始
只需三步即可开始使用 Kimi K2 API:
- 创建账户并获得 100 个免费积分
- 从控制台生成 API 密钥
- 发送第一个请求(每次请求消耗 1 积分)
示例请求
curl https://kimi-k2.ai/api/v1/chat/completions \
-H "Authorization: Bearer $KIMI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kimi-k2-0905",
"messages": [{"role": "user", "content": "你好"}]
}'
身份认证
API 密钥
使用 API 密钥进行身份认证。在请求头中包含您的 API 密钥:
Authorization: Bearer YOUR_API_KEY
或者对于 Anthropic 兼容的端点:
X-API-Key: YOUR_API_KEY
认证方式
方式 | 请求头 | 格式 | 端点 |
---|---|---|---|
Bearer Token | Authorization | Bearer YOUR_API_KEY | /v1/chat/completions |
API Key | X-API-Key | YOUR_API_KEY | /v1/messages |
API 参考
列出模型
列出所有可用于 API 的模型。
列出可用模型
GET /v1/models
返回可用于 API 的模型列表。
响应格式
{
"object": "list",
"data": [
{
"id": "kimi-k2",
"object": "model",
"created": 1735785600,
"owned_by": "moonshot-ai",
"permission": [...],
"root": "kimi-k2",
"parent": null
},
{
"id": "kimi-k2-0905",
"object": "model",
"created": 1735785600,
"owned_by": "moonshot-ai",
"permission": [...],
"root": "kimi-k2-0905",
"parent": null
}
]
}
响应字段
字段 | 类型 | 描述 |
---|---|---|
object | string | 始终为 list |
data | array | 可用模型列表 |
data[].id | string | API 请求中使用的模型标识符 |
data[].object | string | 始终为 model |
data[].owned_by | string | 拥有该模型的组织 |
聊天补全
聊天补全 API 为对话生成模型响应。此端点与 OpenAI 的 API 格式兼容。
创建补全
POST /v1/chat/completions
为给定的对话生成模型响应。
请求格式
{
"model": "kimi-k2-0905",
"messages": [
{
"role": "system",
"content": "你是一个有帮助的助手。"
},
{
"role": "user",
"content": "解释量子计算"
}
],
"temperature": 0.7,
"max_tokens": 2048,
"top_p": 1.0,
"frequency_penalty": 0,
"presence_penalty": 0,
"stream": false,
"n": 1
}
参数
参数 | 类型 | 必需 | 默认值 | 描述 |
---|---|---|---|---|
model | string | 是 | - | 模型标识符。使用 kimi-k2 |
messages | array | 是 | - | 输入消息。每条消息包含 role 和 content |
temperature | number | 否 | 0.6 | 采样温度,范围 0 到 2。较低的值使输出更确定 |
max_tokens | integer | 否 | 1024 | 生成的最大 token 数。模型最大值为 128000 |
top_p | number | 否 | 1.0 | 核采样阈值。temperature 的替代方案 |
frequency_penalty | number | 否 | 0 | 惩罚重复的 token。范围:-2.0 到 2.0 |
presence_penalty | number | 否 | 0 | 基于出现情况惩罚 token。范围:-2.0 到 2.0 |
stream | boolean | 否 | false | 增量流式传输响应 |
n | integer | 否 | 1 | 生成的补全数量 |
stop | string/array | 否 | null | 停止序列(最多 4 个) |
user | string | 否 | null | 用于跟踪最终用户的唯一标识符 |
消息对象
字段 | 类型 | 描述 |
---|---|---|
role | string | 角色之一:system 、user 、assistant |
content | string | 消息内容 |
响应格式
{
"id": "chatcmpl-9d4c2f68-5e3a-4b2f-a3c9-7d8e6f5c4b3a",
"object": "chat.completion",
"created": 1709125200,
"model": "kimi-k2-0905",
"system_fingerprint": "fp_a7c4d3e2",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "量子计算利用量子力学现象..."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 25,
"completion_tokens": 189,
"total_tokens": 214
}
}
响应字段
字段 | 类型 | 描述 |
---|---|---|
id | string | 唯一请求标识符 |
object | string | 对象类型:chat.completion |
created | integer | Unix 时间戳 |
model | string | 使用的模型 |
choices | array | 生成的补全 |
usage | object | Token 使用统计 |
结束原因
值 | 描述 |
---|---|
stop | 消息自然结束或达到停止序列 |
length | 达到最大 token 限制 |
流式传输
当 stream: true
时的服务器发送事件格式:
data: {"id":"chatcmpl-...","choices":[{"delta":{"content":"你好"},"index":0}]}
data: {"id":"chatcmpl-...","choices":[{"delta":{"content":"世界"},"index":0}]}
data: [DONE]
消息
消息 API 提供 Anthropic 兼容的消息生成。
创建消息
POST /v1/messages
使用消息格式创建模型响应。
请求格式
{
"model": "kimi-k2-0905",
"messages": [
{
"role": "user",
"content": "法国的首都是哪里?"
}
],
"max_tokens": 1024,
"system": "你是一个知识渊博的地理助手。",
"temperature": 0.7,
"top_p": 1.0,
"stop_sequences": ["\n\nHuman:"]
}
参数
参数 | 类型 | 必需 | 默认值 | 描述 |
---|---|---|---|---|
model | string | 是 | - | 模型标识符 |
messages | array | 是 | - | 对话消息(仅限 user/assistant) |
max_tokens | integer | 是 | - | 生成的最大 token 数 |
system | string | 否 | null | 用于行为指导的系统提示 |
temperature | number | 否 | 0.6 | 采样温度 (0-1) |
top_p | number | 否 | 1.0 | 核采样阈值 |
stop_sequences | array | 否 | null | 停止生成序列(最多 4 个) |
stream | boolean | 否 | false | 启用流式响应 |
metadata | object | 否 | null | 请求元数据 |
响应格式
{
"id": "msg_01XFDUDYJgAACzvnptvVoYEL",
"type": "message",
"role": "assistant",
"content": [
{
"type": "text",
"text": "法国的首都是巴黎。"
}
],
"model": "kimi-k2-0905",
"stop_reason": "end_turn",
"stop_sequence": null,
"usage": {
"input_tokens": 15,
"output_tokens": 9
}
}
响应字段
字段 | 类型 | 描述 |
---|---|---|
id | string | 唯一消息标识符 |
type | string | 对象类型:message |
role | string | 始终为 assistant |
content | array | 消息内容块 |
model | string | 使用的模型 |
stop_reason | string | 生成停止的原因 |
usage | object | Token 使用情况 |
系统提示
在消息 API 中,系统提示是单独指定的:
{
"system": "你是 Claude,Anthropic 创建的 AI 助手。",
"messages": [
{"role": "user", "content": "你好"}
],
"max_tokens": 1024
}
模型
可用模型
模型 ID | 上下文窗口 | 描述 |
---|---|---|
kimi-k2 | 128,000 tokens | 聊天补全的主要模型 |
kimi-k2-0905 | 256,000 tokens | 聊天补全的主要模型 |
模型选择
两个模型标识符都指向相同的底层 Kimi K2 模型。根据您的 API 格式使用适当的标识符:
- OpenAI 格式:使用
kimi-k2
- Anthropic 格式:使用
kimi-k2
请求限制
速率限制
根据积分余额对每个 API 密钥应用速率限制:
积分余额 | 每分钟请求数 | 每小时请求数 | 每天请求数 |
---|---|---|---|
1-100 | 20 | 600 | 5,000 |
101-1,000 | 60 | 2,000 | 20,000 |
1,001-10,000 | 200 | 6,000 | 50,000 |
10,000+ | 500 | 15,000 | 100,000 |
速率限制响应头:
X-RateLimit-Limit: 60
X-RateLimit-Remaining: 59
X-RateLimit-Reset: 1709125800
Token 限制
限制类型 | 值 |
---|---|
最大输入 tokens | 128,000 |
最大输出 tokens | 8,192 |
最大总 tokens | 128,000 |
超时设置
超时类型 | 时长 |
---|---|
连接超时 | 30 秒 |
读取超时 | 600 秒 |
流式超时 | 600 秒 |
错误代码
HTTP 状态码
状态码 | 含义 |
---|---|
200 | 成功 |
400 | 错误请求 - 无效参数 |
401 | 未授权 - 无效或缺失 API 密钥 |
403 | 禁止 - 积分或权限不足 |
404 | 未找到 - 无效端点 |
429 | 请求过多 - 超出速率限制 |
500 | 内部服务器错误 |
503 | 服务不可用 |
错误类型
OpenAI 格式错误
{
"error": {
"message": "提供的 API 密钥无效",
"type": "invalid_request_error",
"code": "invalid_api_key"
}
}
错误代码 | 类型 | 描述 |
---|---|---|
invalid_api_key | invalid_request_error | API 密钥无效或格式错误 |
insufficient_credits | insufficient_quota | 积分余额不足 |
rate_limit_exceeded | rate_limit_error | 请求过多 |
invalid_request | invalid_request_error | 请求验证失败 |
model_not_found | invalid_request_error | 指定的模型不存在 |
context_length_exceeded | invalid_request_error | 输入超出上下文窗口 |
Anthropic 格式错误
{
"type": "error",
"error": {
"type": "authentication_error",
"message": "无效的 API 密钥"
}
}
错误类型 | 描述 |
---|---|
authentication_error | 身份验证失败 |
invalid_request_error | 请求验证失败 |
rate_limit_error | 超出速率限制 |
api_error | 服务器端错误 |
错误处理
使用带抖动的指数退避实现重试:
import time
import random
def retry_with_backoff(
func,
max_retries=3,
base_delay=1,
max_delay=60
):
for attempt in range(max_retries):
try:
return func()
except RateLimitError:
if attempt == max_retries - 1:
raise
delay = min(
base_delay * (2 ** attempt) + random.uniform(0, 1),
max_delay
)
time.sleep(delay)
客户端库
Python
安装
pip install openai
# 或
pip install anthropic
OpenAI 客户端
from openai import OpenAI
client = OpenAI(
api_key="YOUR_API_KEY",
base_url="https://kimi-k2.ai/api/v1"
)
# 列出可用模型
models = client.models.list()
for model in models.data:
print(f"模型 ID: {model.id}")
# 创建聊天补全
response = client.chat.completions.create(
model="kimi-k2-0905",
messages=[
{"role": "user", "content": "你好"}
]
)
Anthropic 客户端
from anthropic import Anthropic
client = Anthropic(
api_key="YOUR_API_KEY",
base_url="https://kimi-k2.ai/api/v1"
)
response = client.messages.create(
model="kimi-k2-0905",
messages=[
{"role": "user", "content": "你好"}
],
max_tokens=1024
)
Node.js
安装
npm install openai
# 或
npm install @anthropic-ai/sdk
OpenAI 客户端
import OpenAI from 'openai';
const openai = new OpenAI({
apiKey: process.env.KIMI_API_KEY,
baseURL: 'https://kimi-k2.ai/api/v1',
});
// 列出可用模型
const models = await openai.models.list();
for (const model of models.data) {
console.log(`模型 ID: ${model.id}`);
}
// 创建聊天补全
const response = await openai.chat.completions.create({
model: 'kimi-k2-0905',
messages: [{ role: 'user', content: '你好' }],
});
Anthropic 客户端
import Anthropic from '@anthropic-ai/sdk';
const anthropic = new Anthropic({
apiKey: process.env.KIMI_API_KEY,
baseURL: 'https://kimi-k2.ai/api/v1',
});
const response = await anthropic.messages.create({
model: 'kimi-k2-0905',
messages: [{ role: 'user', content: '你好' }],
max_tokens: 1024,
});
Go
安装
go get github.com/sashabaranov/go-openai
示例
package main
import (
"context"
"fmt"
openai "github.com/sashabaranov/go-openai"
)
func main() {
config := openai.DefaultConfig("YOUR_API_KEY")
config.BaseURL = "https://kimi-k2.ai/api/v1"
client := openai.NewClientWithConfig(config)
resp, err := client.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: "kimi-k2-0905",
Messages: []openai.ChatCompletionMessage{
{
Role: openai.ChatMessageRoleUser,
Content: "你好",
},
},
},
)
if err != nil {
panic(err)
}
fmt.Println(resp.Choices[0].Message.Content)
}
REST API
无需客户端库的直接 HTTP 请求:
cURL
curl -X POST https://kimi-k2.ai/api/v1/chat/completions \
-H "Authorization: Bearer $KIMI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kimi-k2-0905",
"messages": [
{"role": "user", "content": "你好"}
]
}'
Python (requests)
import requests
response = requests.post(
"https://kimi-k2.ai/api/v1/chat/completions",
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json"
},
json={
"model": "kimi-k2-0905",
"messages": [{"role": "user", "content": "你好"}]
}
)
Node.js (fetch)
const response = await fetch('https://kimi-k2.ai/api/v1/chat/completions', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'kimi-k2-0905',
messages: [{ role: 'user', content: '你好' }],
}),
});
计费
积分系统
API 使用通过积分系统计费:
- 1 积分 = 1 次 API 请求
- 成功完成时扣除积分
- 失败的请求(4xx 错误)不收费
- 服务器错误(5xx)不收费
- 新用户注册时获得 100 个免费积分
- 邀请奖励:
- 有人使用您的邀请码注册时获得 50 积分
- 被邀请用户首次付费时获得 500 积分
积分套餐
套餐 | 积分数 | 价格 | 单价 | 有效期 |
---|---|---|---|---|
入门版 | 500 | $4.99 | $0.0099 | 永不过期 |
标准版 | 5,000 | $29.99 | $0.0060 | 1 个月 |
高级版 | 20,000 | $59.99 | $0.0030 | 1 个月 |
企业版 | 自定义 | 联系销售 | 自定义 | 自定义 |
用量追踪
通过以下方式监控您的使用情况:
- 响应头:
X-Credits-Remaining: 4523
- 控制台:在我的积分查看实时使用统计
- API 端点:
GET /api/user/credits
使用数据包括:
- 总消耗积分
- 剩余积分
- 按天/小时的使用情况
- 每个请求的平均 token 数
迁移指南
从 OpenAI
从 OpenAI API 迁移只需最少的更改:
-
更新基础 URL:
# 从 client = OpenAI(api_key="sk-...") # 到 client = OpenAI( api_key="sk-...", base_url="https://kimi-k2.ai/api/v1" )
-
更新模型名称:
# 从 model="gpt-4" # 到 model="kimi-k2-0905"
-
无需其他更改 - API 完全兼容
从 Anthropic
从 Anthropic API 迁移:
-
更新基础 URL:
# 从 client = Anthropic(api_key="sk-ant-...") # 到 client = Anthropic( api_key="sk-...", base_url="https://kimi-k2.ai/api/v1" )
-
更新身份验证:
- 从 Kimi K2 控制台生成 API 密钥
- 替换 Anthropic API 密钥
-
模型兼容性:
- 支持
Kimi K2
- 支持
更新日志
2025-01-30
- 添加 Anthropic Messages API 兼容性
- 引入 X-API-Key 身份验证方法
- 增强错误响应格式
2025-01-15
- 初始 API 发布
- OpenAI Chat Completions 兼容性
- 128K 上下文窗口支持
- 基于积分的计费系统
2025-09-05
- 256K 上下文窗口支持
- 支持 kimi-k2-0905 模型