🎉 最新发布 kimi k2.5 模型,支持多模态理解与处理,擅长解决更复杂的问题。
文档
入门指南
常见问题及解决方案

常见问题及解决方案

为什么 API 返回的结果和 Kimi 智能助手返回的结果不一致?

API 和 Kimi 智能助手使用的是同一模型,如果你发现模型输出结果不一致,可以尝试修改 System Prompt;另一方面 Kimi 智能助手提供了诸如计算器等工具,而 API 并未默认提供这些工具,需要用户自行组装;

Kimi API 是否拥有 Kimi 智能助手的“上网冲浪”功能

否。Kimi API 仅提供了大模型本身的交互功能,并不具备额外的“内容搜索”和“网页内容浏览”功能,也即是通常意义上的“联网搜索”功能。

现在,Kimi API 提供了联网搜索功能,请查阅我们的指南:

使用 Kimi API 的联网搜索功能

如果你想自己通过 Kimi API 实现联网搜索功能,也可以参考我们撰写的工具调用 tool_calls 指南:

使用 Kimi API 完成工具调用(tool_calls)

如果你想寻求开源社区的协助,你可以参考以下开源项目:

如果你想寻求由专业供应商提供的服务,有如下服务可供选择:

Kimi API 返回的内容不完整或被截断

如果你发现 Kimi API 返回的内容不完整、被截断或长度不符合预期,你可以先检查响应体中的 choice.finish_reason 字段的值,如果该值为 length,则表明当前模型生成内容所包含的 Tokens 数量超过请求中的 max_tokens 参数,在这种情况下,Kimi API 仅会返回 max_tokens 个 Tokens 内容,多余的内容将会被丢弃,即上文所说“内容不完整”或“内容被截断”。

在遇到 finish_reason=length 时,如果你想让 Kimi 大模型接着上一次返回的内容继续输出,可以使用 Kimi API 提供的 Partial Mode,详细的文档请参考:

使用 Kimi API 的 Partial Mode

如果你想避免出现 finish_reason=length,我们建议你放大 max_tokens 的值,我们推荐的最佳实践是:通过 estimate-token-count (opens in a new tab) 接口计算输入内容的 Tokens 数量,随后使用 Kimi 大模型所支持的最大 Tokens 数量(例如,对于 moonshot-v1-32k 模型,它最大支持 32k Tokens),则可以设置的最大请求的 max_tokens 值是 32k。

Kimi 大模型的输出长度是多少

  • 对于 moonshot-v1-8k 模型而言,最大输出长度是 8*1024 - prompt_tokens
  • 对于 moonshot-v1-32k 模型而言,最大输出长度是 32*1024 - prompt_tokens
  • 对于 moonshot-v1-128k 模型而言,最大输出长度是 128*1024 - prompt_tokens
  • 对于 kimi-k2-0905-previewkimi-k2-turbo-preview 模型而言,最大输出长度是 256*1024 - prompt_tokens

Kimi 大模型支持的汉字数量是多少?

  • 对于 moonshot-v1-8k 模型而言,大约支持一万五千个汉字;
  • 对于 moonshot-v1-32k 模型而言,大约支持六万个汉字;
  • 对于 moonshot-v1-128k 模型而言,大约支持二十万个汉字;
  • 对于 kimi-k2-0905-previewkimi-k2-turbo-preview 模型而言,大约支持四十万个汉字;

注:以上均为估算值,实际情况可能有所不同。

文件抽取内容不准确、图像无法被识别

我们提供各种格式的文件上传和文件解析服务,对于文本文件,我们会提取文件中的文字内容;对于图片文件,我们会使用 OCR 识别图片中的文字;对于 PDF 文档,如果 PDF 文档中只包含图片,我们会使用 OCR 提取图片中的文字,否则仅会提取文本内容。

注意,对于图片,我们只会使用 OCR 提取图片中的文字内容,因此如果你的图片中不包含任何文字内容,则会引起解析失败的错误。

完整的文件格式支持列表,请参考:

文件接口 (opens in a new tab)

使用 files 接口时,希望使用 file_id 引用文件内容

我们目前不支持使用文件 file_id 的方式引用文件内容作为上下文。

使用接口报错 content_filter: The request was rejected because it was considered high risk

当前请求 Kimi API 的输入或 Kimi 大模型的输出内容包含不安全或敏感内容,注意:Kimi 大模型生成的内容也可能包含不安全或敏感内容,进而导致 content_filter 错误

出现 Connection 相关错误

如果在使用 Kimi API 的过程中,经常出现 Connection ErrorConnection Time Out 等错误,请按照以下顺序检查:

  1. 程序代码或使用的 SDK 是否有默认的超时设置;
  2. 是否有使用任何类型的代理服务器,并检查代理服务器的网络和超时设置;

另一种可能导致 Connection 相关错误的场景是,未启用流式输出 stream=True 时,Kimi 大模型生成的 Tokens 数量过多,导致在等待 Kimi 大模型生成过程时,触发了某个中间环节网关的超时时间设置。通常,某些网关应用会通过检测是否接收到服务器端返回的 status_codeheader 来判断当前请求是否有效,在不使用流式输出 stream=True 的场合,Kimi 服务端会等待 Kimi 大模型生成完毕后发送 header,在等待 header 返回时,某些网关应用会关闭等待时间过长的连接,进而产生 Connection 相关错误。

我们推荐启用流式输出 stream=True 来尽可能减少 Connection 相关错误。

报错信息显示的 TPM、RPM 限制与我的账户 Tier 等级不匹配

如果你在使用 Kimi API 的过程遇到了 rate_limit_reached_error 错误,例如:

rate_limit_reached_error: Your account {uid}<{ak-id}> request reached TPM rate limit, current:{current_tpm}, limit:{max_tpm}

但报错信息中的 TPM 或 RPM 限制与你在后台查看的 TPM 与 RPM 并不匹配,请先排查是否正确使用了当前账户的 api_key;通常情况下 TPM、RPM 与预期不匹配的原因,是使用了错误的 api_key,例如误用了其他用户给予的 api_key,或个人拥有多个账号的情况下,混用了 api_key

报错 model_not_found

请确保你在 SDK 中正确设置了 base_url=https://api.moonshot.cn,通常情况下,model_not_found 错误产生的原因是,使用 OpenAI SDK 时,未设置 base_url 值,导致请求被发送至 OpenAI 服务器,OpenAI 返回了 model_not_found 错误。

Kimi 大模型出现数值计算错误

由于 Kimi 大模型生成过程的不确定性,在数值计算方面,Kimi 大模型可能会出现不同程度的计算错误,我们推荐使用工具调用 tool_calls 为 Kimi 大模型提供计算器功能,关于工具调用 tool_calls,可以参考我们撰写的工具调用 tool_calls 指南:

使用 Kimi API 完成工具调用(tool_calls)

Kimi 大模型无法回答今天的日期

Kimi 大模型无法获取像当前日期这样时效性非常强的信息,但你可以在系统提示词 system prompt 中为 Kimi 大模型提供这样的信息,例如:

import os
from datetime import datetime
from openai import OpenAI
 
client = OpenAI(
    api_key=os.environ['MOONSHOT_API_KEY'],
    base_url="https://api.moonshot.cn/v1",
)
 
# 我们通过 datetime 库生成了当前日期,并将其添加到系统提示词 system prompt 中
system_prompt = f"""
你是 Kimi,今天的日期是 {datetime.now().strftime('%d.%m.%Y %H:%M:%S')}
"""
 
completion = client.chat.completions.create(
    model="moonshot-v1-128k",
    messages=[
        {"role": "system", "content": system_prompt},
        {"role": "user", "content": "今天的日期?"},
    ],
    temperature=0.3,
)
 
print(completion.choices[0].message.content)  # 输出:今天的日期是 2024 年 7 月 31 日。
 

在不使用 SDK 的场景下如何处理错误

在某些场合,你可能会需要自行对接 Kimi API(而不是使用 OpenAI SDK),在自行对接 Kimi API 时,你需要根据 API 返回的状态来决定后续的处理逻辑。通常而言,我们会使用 HTTP 状态码 200 表示请求成功,而使用 4xx、5xx 的状态码表示请求失败,我们会提供一个 JSON 格式的错误信息,关于请求状态具体的处理逻辑,请参考以下的代码片段:

import os
import httpx
 
header = {
    "Authorization": f"Bearer {os.environ['MOONSHOT_API_KEY']}",
}
 
messages = [
    {"role": "system", "content": "你是 Kimi"},
    {"role": "user", "content": "你好。"},
]
 
r = httpx.post("https://api.moonshot.cn/v1/chat/completions",
               headers=header,
               json={
                   "model": "moonshot-v1-128k",  # <-- 如果你使用一个正确的模型,下方会进入 if status_code==200 分支
                   # "model": "moonshot-v1-129k",  # <-- 如果你使用一个错误的模型名称,下方会进入 else 分支
                   "messages": messages,
                   "temperature": 0.3,
               })
 
if r.status_code == 200:  # 当使用正确的模型进行请求时,会进入此分支,进行正常的处理逻辑
    completion = r.json()
    print(completion["choices"][0]["message"]["content"])
else:  # 当使用错误的模型名称进行请求时,会进入此分支,在这里进行错误处理
    # 在这里,为了演示,我们仅将错误打印出来。
    # 在实际的代码逻辑中,你可能需要更多的处理逻辑,例如记录日志、中断请求或进行重试等。
    error = r.json()
    print(f"error: status={r.status_code}, type='{error['error']['type']}', message='{error['error']['message']}'")

我们的错误信息会遵循如下的格式:

{
	"error": {
		"type": "error_type",
		"message": "error_message"
	}
}

具体的错误信息对照表,请参考如下章节:

错误说明

为何在提示词 prompt 相似的情况下,有的请求响应速度快,有的请求响应速度慢?

如果你遇到在相似提示词 prompt 的不同请求中,有的请求响应快(例如响应时间只有 3s),有的请求响应慢(例如响应时间长达 20s),这通常是由于 Kimi 大模型生成的 Tokens 数量不同导致的。通常而言,Kimi 大模型生成的 Tokens 数量与 Kimi API 的响应时间成正比,生成的 Tokens 数量越多,API 完整的响应时间越长。

需要注意的是,Kimi 大模型生成的 Tokens 数量只影响完整请求(指生成完最后一个 Token)的响应时间,你可以设置 stream=True,并观察首 Token 返回时间(首 Token 返回时间,我们简称为 TTFT -- Time To First Token),通常情况下,提示词 prompt 的长度相似的场合,首 Token 响应时间不会有太大的波动。

我设置了 max_tokens=2000,让 Kimi 输出 2000 字的内容,但 Kimi 输出的内容少于 2000 字

max_tokens 参数的含义是:调用 /v1/chat/completions 时,允许模型生成的最大 Tokens 数量,当模型已经生成的 Tokens 数超过设置的 max_tokens 时,模型会停止输出下一个 Token

max_tokens 的作用在于:

  1. 帮助调用方确定该使用哪个模型(例如,当 prompt_tokens + max_tokens ≤ 8 * 1024 时,可以选择 moonshot-v1-8k 模型);
  2. 防止在某些意外的场合,Kimi 模型输出了过多不符合预期的内容,进而导致额外的费用消耗(例如,Kimi 模型重复输出空白字符);

max_tokens 并不能指示 Kimi 大模型输出多少 Tokens,换句话说,max_tokens 不会作为提示词 prompt 的一部分输入 Kimi 大模型,如果你想让模型输出特定字数的内容,可以参考以下通用的解决办法:

  • 对于要求输出内容字数在 1000 字以内的场合:
    1. 在提示词 prompt 中向 Kimi 大模型明确输出的字数;
    2. 通过人工或程序手段检测输出的字数是否符合预期,如果不符合预期,通过在第二轮对话中向 Kimi 大模型指示“字数多了”或“字数少了”,让 Kimi 大模型输出新一轮的内容。
  • 对于要求输出内容字数在 1000 字以上甚至更多时:
    1. 尝试将预期输出的内容按结构或章节切割成若干部分,并制成模板,并使用占位符标记想要 Kimi 大模型输出内容的位置;
    2. 让 Kimi 大模型按照模板,逐个填充每个模板的占位符部分,最终拼装成完整的长文文本。

我在一分钟内只请求了一次,但却触发了 Your account reached max request 错误

通常,OpenAI 提供的 SDK 包含了重试机制:

Certain errors are automatically retried 2 times by default, with a short exponential backoff. Connection errors (for example, due to a network connectivity problem), 408 Request Timeout, 409 Conflict, 429 Rate Limit, and >=500 Internal errors are all retried by default.

这种重试机制在遇到错误时,会默认重试 2 次(总计 3 次请求),通常来说,对于网络状况不稳定或者其他可能导致请求发生错误的场合,使用 OpenAI SDK 会将一个请求放大至 2 到 3 次请求,这些请求都会占用你的 RPM(每分钟请求数)次数。

注:对于使用 OpenAI SDK 且账户等级为 tier0 的用户而言,由于存在默认的重试机制,一次错误的请求就会消耗完所有的 RPM 额度。

为了便于传输,我使用 base64 编码我的文本内容

请不要这样做,使用 base64 编码你的文件会导致产生巨量的 Tokens 消耗。如果你的文件类型是我们 /v1/files 文件接口支持的格式,使用文件接口上传并抽取文件内容即可。

对于二进制或其他格式编码的文件,Kimi 大模型暂时无法解析内容,请不要添加到上下文中。

为什么我在 platform.moonshot.ai 平台申请的 key,不能用在 platform.moonshot.cn 平台?

Kimi 开放平台官方提供两个平台,中国境内建议使用 platform.moonshot.cn 平台,境外建议使用 platform.moonshot.ai 平台。两个平台的账户和 key 完全独立,不能混用。

如果用错会出现 401 invalid_authentication_error 的报错,收到 401 报错请先检查是否平台的 key 使用错误。