教程
如何通过 hiapi API 使用 kimi-k3:curl、Python 与可运行的请求示例
你将构建什么
kimi-k3 是一个具备推理能力的对话模型,可通过标准 OpenAI 兼容的 /v1/chat/completions 端点在 hiapi 上使用——无需轮询异步任务,也无需上传图片。本指南将带你从零开始,用 curl 和 Python 完成一次可运行的调用,然后讲解生产环境中容易踩坑的两件事:推理 token 会挤占你的 max_tokens 预算,以及流式输出。
前置条件:一个 hiapi API 密钥。如果还没有,请从控制台获取——下面每个请求都通过 Authorization: Bearer sk-<your-key> 进行认证。
最小可运行示例
kimi-k3 是文本模型,因此不会经过 hiapi 为图像/视频模型使用的 /v1/tasks 任务队列——它是一次直接的同步对话补全调用。
curl
curl https://api.hiapi.ai/v1/chat/completions \
-H "Authorization: Bearer sk-<your-key>" \
-H "Content-Type: application/json" \
-d '{
"model": "kimi-k3",
"messages": [
{"role": "user", "content": "Explain what an API rate limit is in two sentences."}
],
"max_tokens": 300
}'
Python
import requests
resp = requests.post(
"https://api.hiapi.ai/v1/chat/completions",
headers={
"Authorization": "Bearer sk-<your-key>",
"Content-Type": "application/json",
},
json={
"model": "kimi-k3",
"messages": [
{"role": "user", "content": "Explain what an API rate limit is in two sentences."}
],
"max_tokens": 300,
},
timeout=60,
)
resp.raise_for_status()
data = resp.json()
print(data["choices"][0]["message"]["content"])
成功响应如下所示:
{
"id": "chatcmpl-fb762e7481bd4442abb1d8ed3892b4f5",
"model": "FW-Kimi-K3",
"object": "chat.completion",
"choices": [
{
"index": 0,
"message": {
"role": "assistant",
"content": "OK",
"reasoning_content": "We need answer user: \"Reply with exactly the word OK.\" ..."
},
"finish_reason": "stop"
}
],
"usage": {
"prompt_tokens": 95,
"completion_tokens": 52,
"total_tokens": 147,
"completion_tokens_details": {"reasoning_tokens": 38}
}
}
最终答案位于 choices[0].message.content。请求中的模型 ID 是裸 ID kimi-k3——hiapi 会在内部进行映射(响应体的 model 字段中会回显底层标签,例如 FW-Kimi-K3,这是预期行为)。
唯一的坑:推理 token 与 max_tokens
kimi-k3 是一个推理模型——它在生成最终 content 之前,会先把思维链写入 message.reasoning_content,而两者共享同一份 max_tokens 预算。如果 max_tokens 设置得太低,模型可能把整个预算都消耗在推理上,并返回 finish_reason: "length",同时 content 字段为空:
{
"choices": [{
"message": {"content": "", "reasoning_content": "The user is asking me to say \"OK\""},
"finish_reason": "length"
}]
}
这不是 bug——只是推理过程在到达最终答案之前用尽了空间。有两种处理方式:
- 给它留足余量。对于简短的事实性回答,200–300 的
max_tokens通常足以覆盖推理和答案。对于更长的生成内容,请相应提高预算。 - 检查
finish_reason。如果返回"length"且content为空,请提高max_tokens后重试,不要把空字符串当作最终答案。
流式输出
设置 "stream": true 即可获得服务器发送事件(SSE),而无需等待完整响应。数据块会先携带增量 delta.reasoning_content,待模型开始写出最终答案后再携带 delta.content:
import requests
with requests.post(
"https://api.hiapi.ai/v1/chat/completions",
headers={
"Authorization": "Bearer sk-<your-key>",
"Content-Type": "application/json",
},
json={
"model": "kimi-k3",
"messages": [{"role": "user", "content": "Count to 3."}],
"max_tokens": 200,
"stream": True,
},
stream=True,
timeout=60,
) as resp:
for line in resp.iter_lines():
if line and line.startswith(b"data: ") and line != b"data: [DONE]":
print(line.decode("utf-8"))
如果你在构建聊天界面,请只对 delta.content 进行流式渲染——大多数应用会把 delta.reasoning_content 隐藏在“思考中”开关后面或折叠起来,而不是内联展示。
生产环境注意事项
- 错误处理。无效或缺失的密钥会返回 HTTP 401 及结构化响应体:
请记录{"error": {"code": "permission_denied", "message": "This API key is invalid...", "request_id": "...", "type": "hiapi_error"}}request_id——如果你提交工单,支持团队需要它。 - 重试。对话补全是同步的,因此没有任务 ID 可轮询,也没有回调可注册(那种模式适用于 hiapi 的异步图像/视频模型,不适用于文本)。遇到超时或 5xx 时,直接重试请求即可;由于服务端没有排队任何任务,可以将其视为普通的幂等、类 GET 重试。
- 计费。kimi-k3 与平台上其他文本模型一样按 token 计费——在估算规模化成本之前,请先在定价页面查看当前费率,因为推理 token 会计入补全 token。
常见问题
kimi-k3 支持流式输出吗?
支持——传入 "stream": true,并按上文所示读取 text/event-stream 响应。
为什么我的响应中 content 为空?
finish_reason 几乎肯定是 "length"——模型在到达最终答案之前,把整个 max_tokens 预算都花在了 reasoning_content 上。请提高 max_tokens 并重试。
kimi-k3 需要使用 hiapi 的 /v1/tasks 端点吗?
不需要。/v1/tasks 用于异步图像、视频和音乐生成模型。kimi-k3 是同步文本模型,通过标准的 /v1/chat/completions 端点提供服务。
我可以使用 OpenAI Python SDK 代替原生 requests 吗?
可以——将 SDK 的 base_url 指向 https://api.hiapi.ai/v1,并把你的 hiapi 密钥作为 API 密钥传入;请求/响应结构与 OpenAI 兼容。
请求中应传入什么模型 ID?
裸 ID kimi-k3。你会在响应体的 model 字段中看到类似 FW-Kimi-K3 的内部标签回显——这是预期行为,不影响计费或行为。