使用指南

Kimi K3 API指南:Python、视觉、工具与100万上下文

Poyo.ai团队
3 min read
Share:

Kimi K3 API开发者指南

Kimi K3通过Moonshot AI的与OpenAI兼容的聊天完成API提供,模型ID为kimi-k3。该API支持始终在线推理、流式传输、图像、上传视频、严格的JSON Schema、自定义工具、动态工具加载和100万标记的上下文窗口。

兼容性并不意味着完全相同的行为。K3具有固定的采样值,要求在后续工具和对话回合中提供完整的助手状态,并且将推理与最终内容分开处理。本指南重点关注这些细节。

可用状态与价格更新于 2026 年 7 月 22 日。 Kimi K3 已在 Poyo.ai 上线,模型 ID 为 kimi-k3,支持 OpenAI 兼容的 Chat Completions API。价格为每百万输入 Token $2.28、每百万输出 Token $11.40,比官方价格便宜 24%。

要求

你需要:

  • Python 3.9或更新版本;
  • openai Python包版本1.0或更新版本;
  • 一个存放在版本控制外的Moonshot API密钥;
  • 基础 URL https://api.moonshot.ai/v1;
  • 模型ID kimi-k3。

安装SDK:

python -m pip install --upgrade "openai>=1.0"

在你的Shell中设置密钥:

export MOONSHOT_API_KEY="你的密钥"

在PowerShell中:

$env:MOONSHOT_API_KEY="你的密钥"

请勿在代码示例、客户端捆绑、日志或代码库中放置生产密钥。

发出你的第一个Kimi K3请求

Python

import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["MOONSHOT_API_KEY"],
    base_url="https://api.moonshot.ai/v1",
)

response = client.chat.completions.create(
    model="kimi-k3",
    messages=[
        {"role": "user", "content": "审查这个迁移计划并列出其三个最高风险。"}
    ],
)

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

cURL

curl https://api.moonshot.ai/v1/chat/completions \
  -H "Authorization: Bearer $MOONSHOT_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "kimi-k3",
    "messages": [
      {"role": "user", "content": "用通俗语言解释Kimi Delta Attention。"}
    ]
  }'

配置推理努力

K3始终处于思考模式。通过顶层reasoning_effort字段配置其努力程度:

response = client.chat.completions.create(
    model="kimi-k3",
    reasoning_effort="high",
    messages=[
        {"role": "user", "content": "找出这个分布式锁设计中的缺陷。"}
    ],
)

支持的值为:

值用于
low较容易的任务,在延迟和输出上更重要
high难度较大的编码、分析和工具规划
max最困难的任务和基准风格评估

文档中默认值为max。不要假设这是生产设置中最便宜的。评估每种努力的成功率、延迟和生成的标记。

流式推理和最终内容

流式响应通过不同的delta字段暴露推理和最终文本。

stream = client.chat.completions.create(
    model="kimi-k3",
    messages=[{"role": "user", "content": "审查此架构的竞争条件。"}],
    stream=True,
)

for chunk in stream:
    delta = chunk.choices[0].delta
    reasoning = getattr(delta, "reasoning_content", None)
    if reasoning:
        # 根据你的产品和提供者政策存储或处理。
        pass
    if delta.content:
        print(delta.content, end="", flush=True)

将用户可见的最终内容与内部处理分开。不要解析reasoning_content中的结构化输出。

向Kimi K3发送图像

K3视觉消息使用内容对象数组。此流程不支持公共图像URL;将本地图像编码为base64格式。

import base64
from pathlib import Path

image_data = base64.b64encode(Path("interface.png").read_bytes()).decode()

response = client.chat.completions.create(
    model="kimi-k3",
    messages=[
        {
            "role": "user",
            "content": [
                {
                    "type": "image_url",
                    "image_url": {"url": f"data:image/png;base64,{image_data}"},
                },
                {
                    "type": "text",
                    "text": "识别此界面中的三个最大可访问性问题。",
                },
            ],
        }
    ],
)

在编码用户上传之前验证文件类型和大小。避免记录base64有效负载。

向Kimi K3发送视频

通过文件API上传视频,使用ms://方案引用返回的ID,并在不再需要时删除文件。

from pathlib import Path

video = client.files.create(file=Path("demo.mp4"), purpose="video")

try:
    response = client.chat.completions.create(
        model="kimi-k3",
        messages=[
            {
                "role": "user",
                "content": [
                    {
                        "type": "video_url",
                        "video_url": {"url": f"ms://{video.id}"},
                    },
                    {"type": "text", "text": "总结工作流程并识别失败步骤。"},
                ],
            }
        ],
    )
finally:
    client.files.delete(video.id)

返回严格的JSON Schema输出

在下游代码需要可预测形状时使用strict: true。

import json

response = client.chat.completions.create(
    model="kimi-k3",
    messages=[
        {"role": "user", "content": "提取此事件备注中的风险、严重性和所有者。"}
    ],
    response_format={
        "type": "json_schema",
        "json_schema": {
            "name": "incident_risk",
            "strict": True,
            "schema": {
                "type": "object",
                "properties": {
                    "risk": {"type": "string"},
                    "severity": {"type": "string", "enum": ["low", "medium", "high"]},
                    "owner": {"type": ["string", "null"]},
                },
                "required": ["risk", "severity", "owner"],
                "additionalProperties": False,
            },
        },
    },
)

result = json.loads(response.choices[0].message.content or "{}")

只解析最终的message.content,然后在应用代码中再次验证。

调用自定义工具

第一次响应可以请求一个或多个工具。执行每个允许的调用,附加完整的助手消息,然后为每个tool_call_id附上一个匹配的工具结果。

import json

tools = [
    {
        "type": "function",
        "function": {
            "name": "get_build_status",
            "description": "返回允许项目的当前构建状态。",
            "parameters": {
                "type": "object",
                "properties": {"project": {"type": "string"}},
                "required": ["project"],
                "additionalProperties": False,
            },
        },
    }
]

messages = [{"role": "user", "content": "检查Web构建并总结任何失败。"}]

first = client.chat.completions.create(
    model="kimi-k3",
    messages=messages,
    tools=tools,
    tool_choice="required",
)

assistant_message = first.choices[0].message
messages.append(assistant_message)

for call in assistant_message.tool_calls or []:
    arguments = json.loads(call.function.arguments)
    # 执行真实工具之前,请先授权和验证。
    tool_result = {"project": arguments["project"], "status": "passed"}
    messages.append(
        {
            "role": "tool",
            "tool_call_id": call.id,
            "content": json.dumps(tool_result),
        }
    )

final = client.chat.completions.create(
    model="kimi-k3",
    messages=messages,
    tools=tools,
)

切勿在没有权限边界、输入验证、范围环境和审计跟踪的情况下执行任意模型生成的shell命令。

动态加载工具

K3支持在工具可用时将完整的工具定义放在system消息中。请在后续历史中保留该消息,因为服务器不会为你保留它。

动态加载有助于大型代理系统避免在每次回合中发送每个工具模式。它还创建新的状态管理要求:模型必须在解释后续工具结果时看到确切的声明。

使用100万标记的上下文窗口

大型上下文在需要一起推理远程证据时最为有价值。请谨慎使用:

  1. 在开始时保持稳定的代码库或文档语料库。
  2. 附加问题和结果,而不是重写前缀。
  3. 分别跟踪缓存和未缓存的输入。
  4. 在不需要完整语料库时检索较小的子集。
  5. 建立源标识符,以便最终答案能够被验证。
  6. 仅在你的客户端保留K3所需的所有状态时进行压缩。

自动缓存没有缓存ID或普通TTL参数。稳定的前缀为服务提供了最佳的缓存命中机会。

保持完整的多轮状态

这是最重要的K3特定集成规则。

在继续对话或返回工具结果时,附加API返回的完整助手消息。不要仅保留content。Moonshot警告说,K3是在保留思考历史的状态下训练的,如果中断了所需的历史或在会话中切换到K3,可能会变得不稳定。

安全地存储对话状态,应用保留限制,并避免向不应查看的用户泄露隐藏状态。

Kimi K3 API的重要限制

  • K3始终启用思考。
  • reasoning_effort支持low、high和max。
  • max_completion_tokens默认为131,072,可以设置到1,048,576。
  • temperature=1.0、top_p=0.95、n=1、presence_penalty=0和frequency_penalty=0是固定的;可以省略。
  • 视觉消息不支持公共图像URL。
  • 多轮和工具请求必须保留完整的助手消息。
  • Moonshot表示其网页搜索工具正在更新,目前不建议在生产中使用。

生产清单

  • 将API密钥保留在服务器端。
  • 添加请求超时和有限重试。
  • 验证工具参数并授权每个操作。
  • 限制工具回合和完成长度。
  • 保留完整的K3助手状态。
  • 生成后验证严格的JSON。
  • 记录输入、缓存输入、输出、延迟和错误。
  • 避免在K3会话中间更换模型。
  • 添加明确的行为边界以减少过度主动性。
  • 测试损坏的工具、部分响应和长历史。

在选择上下文和输出限制之前,请阅读 Kimi K3 API定价。请关注 Kimi K3模型页面以获取Poyo.ai的可用性。

常见问题解答

Kimi K3 API与OpenAI兼容吗?

是的。Moonshot提供与OpenAI兼容的聊天完成端点。K3特定的状态、推理、采样和媒体规则仍然适用。

Kimi K3模型ID是什么?

官方Moonshot API模型ID是kimi-k3。

Kimi K3支持函数调用吗?

是的。它支持自定义工具、必需的工具选择、匹配工具结果和动态工具加载。

Kimi K3可以处理视频吗?

是的。通过文件API上传视频,并在视频内容对象中引用其ms://文件ID。

如何使用100万上下文窗口?

通过标准模型请求发送所需的消息和内容,保持稳定前缀不变以进行自动缓存,并设置有限的完成限制。

来源

Share: