Skip to content

本页提供 Kimi API 最基础的三类用法:单轮对话(一次请求返回结果)、多轮对话(维护 messages 历史)、流式输出(stream: true 逐步返回)。代码示例覆盖 Python、Node.js 和 cURL。

Kimi API 快速开始

前置准备

  1. 控制台申请 API Key
  2. 安装 OpenAI SDK:
bash
# Python
pip install --upgrade 'openai>=1.0'

# Node.js
npm install openai

将 API Key 设置为环境变量:

bash
export MOONSHOT_API_KEY="your-api-key-here"

单轮对话

最简单的用法,发送一条消息获取回复:

python
# Python
from openai import OpenAI

client = OpenAI(
    api_key="$MOONSHOT_API_KEY",
    base_url="https://api.moonshot.cn/v1",
)

completion = client.chat.completions.create(
    model="kimi-k2.6",
    messages=[
        {"role": "system", "content": "你是 Kimi,由 Moonshot AI 提供的 AI 助手。"},
        {"role": "user", "content": "你好,1+1 等于多少?"}
    ]
)

print(completion.choices[0].message.content)
typescript
// TypeScript / Node.js
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.MOONSHOT_API_KEY,
  baseURL: "https://api.moonshot.cn/v1",
});

async function main() {
  const completion = await client.chat.completions.create({
    model: "kimi-k2.6",
    messages: [
      { role: "system", content: "你是 Kimi,由 Moonshot AI 提供的 AI 助手。" },
      { role: "user", content: "你好,1+1 等于多少?" }
    ],
  });
  console.log(completion.choices[0].message.content);
}

main();
bash
# cURL
curl https://api.moonshot.cn/v1/chat/completions \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer $MOONSHOT_API_KEY" \
    -d '{
        "model": "kimi-k2.6",
        "messages": [
            {"role": "system", "content": "你是 Kimi,由 Moonshot AI 提供的 AI 助手。"},
            {"role": "user", "content": "你好,1+1 等于多少?"}
        ]
    }'

多轮对话

将历史消息一并传入 messages,实现上下文连续:

python
# Python
from openai import OpenAI

client = OpenAI(
    api_key="$MOONSHOT_API_KEY",
    base_url="https://api.moonshot.cn/v1",
)

history = [
    {"role": "system", "content": "你是 Kimi,由 Moonshot AI 提供的 AI 助手。"}
]

def chat(query: str) -> str:
    history.append({"role": "user", "content": query})
    completion = client.chat.completions.create(
        model="kimi-k2.6",
        messages=history
    )
    result = completion.choices[0].message.content
    history.append({"role": "assistant", "content": result})
    return result

print(chat("地球的自转周期是多少?"))
print(chat("月球呢?"))  # 使用上下文记住"自转周期"这个话题

踩坑提醒:随着对话进行,每次请求的 token 会线性增加。长对话需要定期裁剪历史(如只保留最近 N 轮),避免超出模型上下文窗口限制或产生过多费用。


流式输出

设置 stream=True,通过 SSE 逐步接收响应,提升用户体验:

python
# Python
from openai import OpenAI

client = OpenAI(
    api_key="$MOONSHOT_API_KEY",
    base_url="https://api.moonshot.cn/v1",
)

response = client.chat.completions.create(
    model="kimi-k2.6",
    messages=[
        {"role": "system", "content": "你是 Kimi,由 Moonshot AI 提供的 AI 助手。"},
        {"role": "user", "content": "讲一个关于程序员的笑话"},
    ],
    stream=True,
)

for chunk in response:
    delta = chunk.choices[0].delta
    if delta.content:
        print(delta.content, end="", flush=True)
print()  # 换行
typescript
// TypeScript / Node.js
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.MOONSHOT_API_KEY,
  baseURL: "https://api.moonshot.cn/v1",
});

async function main() {
  const stream = await client.chat.completions.create({
    model: "kimi-k2.6",
    messages: [
      { role: "system", content: "你是 Kimi,由 Moonshot AI 提供的 AI 助手。" },
      { role: "user", content: "讲一个关于程序员的笑话" },
    ],
    stream: true,
  });

  for await (const chunk of stream) {
    const content = chunk.choices[0]?.delta?.content;
    if (content) process.stdout.write(content);
  }
  console.log();
}

main();

常见问题

Q: kimi-k2.6 和 moonshot-v1-128k 哪个更适合生产环境?

A: 对于需要多模态(图片/视频)、复杂推理(Thinking 模式)或超长上下文(256K)的场景,用 kimi-k2.6;对参数控制有精细需求(自定义 temperature、top_p 等)的场景,moonshot-v1 系列更灵活。

Q: 流式输出和非流式输出费用一样吗?

A: 一样,计费基准都是 prompt_tokens + completion_tokens 实际消耗量。

Q: messages 中 system 消息必须有吗?

A: 不必须,但推荐始终设置,有助于稳定模型行为。如果不设置,模型会使用默认人格。