Skip to content

本页整理 Kimi API 开发者高频遇到的问题,包括错误处理、输出截断、联网搜索、文件上传等,每个问题都附有实际的代码解决方案。

Kimi API 常见问题

API 返回结果和 Kimi 智能助手不一样?

正常现象。Kimi 智能助手内置了计算器、联网搜索等工具,而 API 默认不带这些能力——需要你自己通过 Tool Calls 接入。

如果你想让 API 也能联网搜索,参考 联网搜索功能

输出内容不完整或被截断

检查 choices[0].finish_reason

  • "stop" — 正常结束
  • "length" — 触发了 max_completion_tokens 限制

解决方案 1:调大限制

typescript
const response = await client.chat.completions.create({
  model: "kimi-k2.6",
  messages: [...],
  max_completion_tokens: 8192, // 默认值较小,可以调大
});

解决方案 2:使用 Partial Mode 让模型在截断后续写。

注意max_completion_tokens 是上限,不是"生成这么多 token"的指令。想控制输出字数,在 prompt 里说就好(如"请用 200 字以内回答")。

各模型大约能处理多少汉字?

模型上下文约合汉字数
moonshot-v1-8k8K~15,000 字
moonshot-v1-32k32K~60,000 字
moonshot-v1-128k128K~200,000 字
kimi-k2.6 / k2.5256K~400,000 字

1 token ≈ 1.5~2 个汉字

model_not_found 错误

最常见原因是没有指定 baseURL,或者 baseURL 写错了:

typescript
// ❌ 错误 - 请求去了 OpenAI 的节点
const client = new OpenAI({ apiKey: "sk-moonshot-xxx" });

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

rate_limit_reached_error 但我的请求量不高

多半是用了错误的 api_key(比如测试账号的 Key 发到了生产请求里)。不同账号的 RPM 配额独立计算。

另一个踩坑点:OpenAI SDK 默认重试 2 次,失败时实际发了 3 个请求:

typescript
const client = new OpenAI({
  maxRetries: 0, // 关闭自动重试
});

Kimi API 能联网搜索吗?

可以,通过 use-web-search 接口开启官方联网工具。也可以通过 Tool Calls 接入自定义的搜索服务(search2ai、jina reader 等)。

文件上传后无法用 file_id 引用内容

目前 Kimi API 不支持在 chat completions 请求中直接用 file_id 引用已上传文件。需要先通过 Files API 获取文件内容,再作为文本放入 messages。详见 文件问答

不要用 base64 编码文件内容放进 messages!这会产生巨量 token 消耗,而且通常没有文件上传接口的提取效果好。

数值计算结果不准确

LLM 的本质是预测下一个 token,不擅长精确数学计算。对于计算密集型场景,通过 Tool Calls 接入计算器工具:

typescript
// 定义计算器工具
const tools = [{
  type: "function" as const,
  function: {
    name: "calculator",
    description: "执行精确数学计算",
    parameters: {
      type: "object",
      properties: {
        expression: { type: "string", description: "数学表达式" },
      },
      required: ["expression"],
    },
  },
}];

模型不知道今天的日期

在 system prompt 里注入当前时间:

typescript
const systemPrompt = `你是 Kimi,今天的日期是 ${new Date().toLocaleDateString("zh-CN")}。`;
python
from datetime import datetime
system_prompt = f"你是 Kimi,今天的日期是 {datetime.now().strftime('%Y年%m月%d日')}。"

Connection 超时 / 连接断开

建议开启 stream 模式,可以更快收到第一个 token,避免因等待整体响应超时:

typescript
const stream = await client.chat.completions.create({
  model: "kimi-k2.6",
  messages: [...],
  stream: true,
});

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

同时检查代码和 SDK 的 timeout 配置,长文本生成可能需要 60 秒以上。

platform.kimi.ai 和 platform.kimi.com 的 Key 不通用

两个是完全独立的账号体系:

平台base_url适用场景
platform.kimi.com(国内)https://api.moonshot.cn/v1中国大陆
platform.kimi.ai(境外)https://api.moonshot.ai/v1海外

Key 不能跨平台使用,API 调用时使用了哪个平台的 Key,baseURL 就要对应该平台的域名。

常见问题

Q: 为什么相同 prompt 有时快有时慢?

A: 响应速度受输出 token 数量影响。输出越长、越慢。用 stream 模式可以提前看到第一个 token,改善体感延迟。

Q: 文件提取内容不准确怎么办?

A: Kimi 的文件提取对文本文件用 OCR,对 PDF 提取文字内容。如果效果不好,考虑预处理文件(如用 pdf-parse 自行提取文本后作为字符串传入),可以获得更可控的结果。

Q: 单次请求也触发了 max request 错误?

A: OpenAI SDK 会对失败请求自动重试,一次请求实际发送了多次,快速消耗 RPM。在 client 配置里设 maxRetries: 0 解决。