Appearance
本页整理 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-8k | 8K | ~15,000 字 |
| moonshot-v1-32k | 32K | ~60,000 字 |
| moonshot-v1-128k | 128K | ~200,000 字 |
| kimi-k2.6 / k2.5 | 256K | ~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 解决。