Kimi K3 API 接入:认证、端点与 Python 集成指南
Jul 27, 2026

Kimi K3 API 接入:认证、端点与 Python 集成指南

Kimi K3 API 快速上手:配置认证、调用 chat completions、使用流式输出与函数调用——完整 Python 示例。

Moonshot AI 开发的 Kimi K3,是通过公开 API 可用的最强中文大语言模型之一。它提供 100 万 token 的上下文窗口、有竞争力的定价和 OpenAI 兼容接口——意味着你可以用大概率已经在用的工具,以极小摩擦完成集成。本指南覆盖英语开发者上手所需的全部内容:认证、端点细节,以及 chat completions、流式输出和函数调用的完整 Python 示例。

如果你也在为技术栈评估中国前沿模型,glm5.app 是探索 GLM 5.2(GLM-4-Plus)的好起点——那是 Zhipu AI 的旗舰模型,上下文能力相当。

文档问题:为什么英语开发者会卡住

关于 Kimi K3 API 最常见的抱怨很直白:Moonshot AI 的官方文档主要是中文的。API 控制台、定价页和参数参考都是为中文用户写的。英语开发者只能翻译页面、猜参数名,或从零散的 GitHub 仓库里拼凑示例。

本指南直接补上这个缺口。下面所有信息都来自 Moonshot AI 官方资料,并经过真实 API 测试。你应该能在几分钟内复制这些示例、填入 API key、跑通代码。

前置条件

你需要:

  • platform.moonshot.cn 有一个 Moonshot AI 账号
  • 从 Moonshot 控制台(「API Keys」下)生成一个 API key
  • Python 3.8 或更高
  • openai Python SDK(1.x 版本)

安装 SDK:

pip install openai

Kimi K3 API 兼容 OpenAI,所以 openai 包就是合适的客户端——不需要 Moonshot 专用 SDK。

认证:API Key 与 Bearer Token

Kimi K3 用 Bearer token 认证请求。每个 HTTP 请求都必须包含请求头:

Authorization: Bearer YOUR_API_KEY

使用 OpenAI Python SDK 时,通过 api_key 参数传 key。绝不要把 key 硬编码进源文件。把它存到环境变量:

export MOONSHOT_API_KEY="sk-your-key-here"

然后初始化客户端:

import os
from openai import OpenAI

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

base_url 覆盖是相对标准 OpenAI 设置唯一的结构性差异。把它指向 https://api.moonshot.cn/v1,API 其余表面——模型、参数、响应结构——的行为与 OpenAI 文档一致。

端点与模型档位

Kimi K3 API 暴露单一 base:https://api.moonshot.cn/v1。chat completions 端点遵循 OpenAI 惯例:

POST https://api.moonshot.cn/v1/chat/completions

Moonshot 提供几个对应不同上下文窗口大小的模型变体:

模型名上下文窗口典型用途
moonshot-v1-8k8,000 tokens短任务、问答、低成本调用
moonshot-v1-32k32,000 tokens单文档、中等长度对话
moonshot-v1-128k128,000 tokens长文档、多文档问答
kimi-latest最高 1,000,000 tokens完整代码库、书籍级上下文

kimi-latest 访问 Kimi K3 的全部能力,包括 1M token 上下文窗口。对上下文可预期很短的、成本敏感的批量负载,moonshot-v1-8k 能减少 token 花费。各模型的当前价格档位请查你的 Moonshot 控制台。

基础 Chat Completion

一个最小可运行示例:

import os
from openai import OpenAI

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

response = client.chat.completions.create(
    model="kimi-latest",
    messages=[
        {
            "role": "system",
            "content": "You are a helpful software engineering assistant.",
        },
        {
            "role": "user",
            "content": "Explain the difference between processes and threads in Python.",
        },
    ],
    temperature=0.6,
    max_tokens=1024,
)

print(response.choices[0].message.content)

响应对象遵循 OpenAI schema:response.choices[0].message.content 存着助手的回复。用量信息(prompt tokens、completion tokens、total tokens)在 response.usage 里。

流式输出

对交互式应用——聊天机器人、编码助手、实时文档编辑器——流式输出必不可少。用户应该看到 token 边生成边出现,而不是等完整响应。Kimi K3 支持 Server-Sent Events (SSE) 流式:

import os
from openai import OpenAI

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

stream = client.chat.completions.create(
    model="kimi-latest",
    messages=[
        {
            "role": "user",
            "content": "Walk me through how Python's garbage collector works.",
        }
    ],
    stream=True,
)

for chunk in stream:
    delta = chunk.choices[0].delta
    if delta.content:
        print(delta.content, end="", flush=True)

print()  # final newline

stream=True 标志把响应从单个 JSON 载荷切换成部分 chunk 的可迭代对象。每个 chunk 的 delta.content 存着增量文本。这个模式和你写过的任何现有 OpenAI 流式代码直接兼容。

函数调用

函数调用把模型接到你应用的逻辑上。你定义一个或多个带参数 schema 的函数,连同用户消息一起发送,模型决定是否调用函数、用什么参数。Kimi K3 支持标准 OpenAI tools 接口:

import os
import json
from openai import OpenAI

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

tools = [
    {
        "type": "function",
        "function": {
            "name": "search_documents",
            "description": "Search an internal knowledge base for relevant documents.",
            "parameters": {
                "type": "object",
                "properties": {
                    "query": {
                        "type": "string",
                        "description": "The search query string.",
                    },
                    "max_results": {
                        "type": "integer",
                        "description": "Maximum number of results to return.",
                        "default": 5,
                    },
                },
                "required": ["query"],
            },
        },
    }
]

messages = [
    {
        "role": "user",
        "content": "Find me documents about our API rate limit policies.",
    }
]

response = client.chat.completions.create(
    model="kimi-latest",
    messages=messages,
    tools=tools,
    tool_choice="auto",
)

choice = response.choices[0]

if choice.finish_reason == "tool_calls":
    tool_call = choice.message.tool_calls[0]
    function_name = tool_call.function.name
    arguments = json.loads(tool_call.function.arguments)

    print(f"Model requested function: {function_name}")
    print(f"Arguments: {arguments}")

    # Execute the function in your code, then send the result back:
    # tool_result = search_documents(**arguments)
    # messages.append(choice.message)
    # messages.append({
    #     "role": "tool",
    #     "tool_call_id": tool_call.id,
    #     "content": json.dumps(tool_result),
    # })
    # final_response = client.chat.completions.create(model="kimi-latest", messages=messages)

两步流程是:

  1. 发送带工具定义的用户消息;检查 finish_reason
  2. 如果 finish_reason == "tool_calls",运行你的函数,把结果追加到 messages,再次调用 API 拿到模型的最终自然语言回复。

JSON 模式

当下游代码需要结构化输出时——用于解析、分类或喂给另一个服务——启用 JSON 模式:

response = client.chat.completions.create(
    model="kimi-latest",
    messages=[
        {
            "role": "user",
            "content": (
                'Return a JSON object with keys "title", "author", and "year" '
                'for the book "The Pragmatic Programmer".'
            ),
        }
    ],
    response_format={"type": "json_object"},
)

data = json.loads(response.choices[0].message.content)
print(data)

始终在提示词里明确告诉模型你要 JSON。response_format 参数约束输出格式,但当提示词把意图说清楚时效果最好。

错误处理与限流

Moonshot 平台的限流因账号档位而异,在你的平台控制台可见。API 返回标准 HTTP 状态码:

状态码含义
200成功
401API key 无效或缺失
429超过限流——退避后重试
500服务器错误——指数退避重试

一个实用的限流错误重试辅助函数:

import time
from openai import RateLimitError, APIError

def call_with_retry(client, max_attempts=4, **kwargs):
    for attempt in range(max_attempts):
        try:
            return client.chat.completions.create(**kwargs)
        except RateLimitError:
            wait_seconds = 2 ** attempt
            print(f"Rate limited — retrying in {wait_seconds}s (attempt {attempt + 1})")
            time.sleep(wait_seconds)
        except APIError as exc:
            if exc.status_code == 500 and attempt < max_attempts - 1:
                time.sleep(2 ** attempt)
            else:
                raise
    raise RuntimeError("Exceeded maximum retry attempts")

对持续的高吞吐使用,通过 Moonshot 平台的联系表单申请更高限流档位。

Kimi K3 vs GPT-4o:成本与上下文优势

对跑高流量推理的团队来说,Kimi K3 的经济性很有吸引力。每百万输入 token $0.30、每百万输出 token $1.10(撰写本文时的 kimi-latest 价格),输入侧大约是 GPT-4o 的五分之一。对批量文档处理、RAG 管线或任何 prompt token 占账单主导的负载,差距累积得很快。

指标Kimi K3 (kimi-latest)GPT-4o
输入价格$0.30 / M tokens约 $2.50 / M tokens
输出价格$1.10 / M tokens约 $10.00 / M tokens
上下文窗口1,000,000 tokens128,000 tokens
OpenAI 兼容是(原生)
流式输出
函数调用

1M token 上下文窗口是另一个主要的实际优势。把整个代码库、一份长法律合同或一整天的客服日志装进单一上下文,省掉了那些增加复杂度、还可能丢失跨文档关系的分块策略。

对于在 Kimi K3 之外还想探索多个中国 AI API 的团队,glm5.app 上的 GLM 5.2 API 指南 覆盖了 Zhipu AI 的 GLM-4-Plus——它把 1M 上下文窗口与视觉(图像理解)能力结合起来,接口同样兼容 OpenAI,输入 token 价格为 $1.40/M。

全部串起来

现在你有了 Kimi K3 API 的完整可用工具箱:

  • 认证:环境变量里的 Bearer token,通过 OpenAI SDK 的 api_keybase_url 覆盖传入。
  • 模型选择:按模型名选上下文档位,从成本优先的 moonshot-v1-8k 到能力最大的 kimi-latest
  • Chat completions:带 system 和 user 角色的标准 messages 数组。
  • 流式输出stream=True 加 chunk 迭代,实时输出。
  • 函数调用:OpenAI schema 的 tools 参数;工具执行两步流。
  • JSON 模式response_format 输出结构化结果。
  • 错误处理429500 码的指数退避。

OpenAI 兼容性意味着你只需改两行——api_keybase_url——就能在 Kimi K3 和其他供应商之间切换,这在多模型架构里给你真正的灵活性。

来源

(来源链接)

Start Using GLM 5 Today

Try GLM 5 free — reasoning, coding, agents, and image generation in one platform.