中文 ▾
获取 API 密钥

Kimi Code API 基础 URL:OpenAI 客户端配置

此服务所需的 Kimi Code API URL 是 https://api.kimicode.cc/v1。将其作为基础 URL 放入任何 OpenAI 客户端,添加你的密钥,并使用模型 ID uncensored。

已更新

连接客户端终端与 API 服务器的电缆,表示基础 URL 配置

URL 及其各部分含义

如果你正在寻找 kimi code api url,你可能在查找 Kimi 自己的服务地址。为此,请使用供应商提供的文档,因为我不对其负责。本网站运行的是不同的服务:一个由独立提供商运营的、面向单一开放权重模型的托管式 OpenAI 兼容 API。其地址为:

https://api.kimicode.cc/v1

该字符串是 基础 URL。它是每个请求共享的部分。SDK 会添加其余部分。当你调用 chat.completions.create 时,OpenAI 库会向 https://api.kimicode.cc/v1/chat/completions 发送 POST 请求。模型列表位于 https://api.kimicode.cc/v1/models,使用 GET 请求。

这两个是该 API 提供的唯一方法:POST /v1/chat/completions 和 GET /v1/models。如果你希望有图像、音频或嵌入端点,它们在此处不存在。这是一个文本 API。

有三个设置至关重要,你现有的 OpenAI 代码无需其他更改:基础 URL、API 密钥和模型 ID uncensored。

为什么基础 URL 是唯一的开关

OpenAI 风格客户端围绕一个理念构建:请求格式是固定的,主机是一个设置。库有一个指向原始供应商的默认主机。当你将其替换为另一个基础 URL 时,相同的请求体会发送到其他地方。你的提示词、消息数组或响应解析中没有任何内容需要更改。

这也解释了为什么从另一个 OpenAI 兼容提供商迁移通常只需三次编辑:基础 URL、密钥和模型名称。响应中的字段,如 choices、message、finish_reason 和 usage,名称相同,因此读取它们的代码可以继续工作。

它还解释了人们遇到的奇怪错误。如果某个工具要求输入“服务器 URL”而你只粘贴了主机名,则缺少路径部分。如果某个工具要求输入“完整端点”而你只粘贴了基础地址,请求就会发送到错误的位置。当设置界面不明确时,请先尝试基础 URL,并查看返回的状态码。文档中的快速入门通过一个额外的示例演示了相同的迁移过程。

无法编辑的工具的环境变量

许多命令行工具和框架在不让你接触构造函数的情况下构建 OpenAI 客户端。它们通常读取标准环境变量,因此设置它们就足够了:

export OPENAI_BASE_URL="https://api.kimicode.cc/v1"
export OPENAI_API_KEY="YOUR_KEY"

一些较旧的工具查找 OPENAI_API_BASE,因此如果(你)忽略了第一个名称,请尝试第二个。设置后,在同一 shell 会话中启动工具,因为在另一个终端窗口中设置的变量不会共享。

工具仍然需要模型名称。如果它硬编码了托管模型,请查找设置它的标志或配置行,并使用 uncensored。如果无法更改,则该工具不适合,使用上述脚本是更好的路径。

先获取密钥

请求通过形式为 Authorization: Bearer YOUR_KEY 的头部进行认证。每个官方 SDK 都会从 api_key 参数为你构建该头部。你可以在使用 Google 登录或使用电子邮件和密码登录后创建密钥。

新账户可以在 API 密钥页面 上一键领取 $0.50 的试用额度。无需绑定信用卡,有效期为 7 天。这足以多次运行下面的所有示例。试用密钥限制为 2 个并发请求和每分钟 60 个请求,因此请逐个运行示例。

将密钥存储在环境变量中,而不是源代码文件中。提交到公共存储库的密钥将在几小时内被他人找到并使用,其中的额度属于你。

curl 首次请求

Curl 是证明 URL 有效的最快方法,因为它排除了所有库的影响。如果此调用成功,你后来遇到的任何问题都出在你的客户端配置中。

export KIMICODE_KEY="YOUR_KEY"

curl https://api.kimicode.cc/v1/models   -H "Authorization: Bearer $KIMICODE_KEY"

curl https://api.kimicode.cc/v1/chat/completions   -H "Authorization: Bearer $KIMICODE_KEY"   -H "Content-Type: application/json"   -d '{
    "model": "uncensored",
    "messages": [
      {"role": "user", "content": "Say hello in five words."}
    ]
  }'

第一次调用返回模型列表,其中应包含 uncensored。第二次调用返回标准的聊天补全对象。使用 curl -i 查看响应头,你将看到 X-Request-Id、X-Balance-USD、X-RateLimit-Limit-Requests 和 X-RateLimit-Limit-Concurrency。如果就特定调用联系 支持,请保留请求 ID。

Python 配合 OpenAI SDK

使用 pip install openai 安装库,然后更改客户端构造函数的两个参数。

import os
from openai import OpenAI

client = OpenAI(
    base_url="https://api.kimicode.cc/v1",
    api_key=os.environ["KIMICODE_KEY"],
)

resp = client.chat.completions.create(
    model="uncensored",
    messages=[
        {"role": "system", "content": "You are a concise assistant."},
        {"role": "user", "content": "Explain what a base URL is in two sentences."},
    ],
    temperature=0.7,
)
print(resp.choices[0].message.content)
print(resp.usage)

temperature、top_p、stop、seed 等参数以及频率和存在惩罚会直接传递给模型。max_tokens 为可选参数。若不指定,模型将使用 100,000 token 窗口中剩余的全部空间(含提示词和生成内容)。

如果你不传递参数,SDK 还会读取两个环境变量:OPENAI_BASE_URL 和 OPENAI_API_KEY。这对于无法编辑的工具很有用。设置两者,启动工具,它将与该 API 通信。

Node、流式输出和 JSON 模式

Node 设置与 Python 类似。使用 npm install openai 安装。

import OpenAI from "openai";

const client = new OpenAI({
  baseURL: "https://api.kimicode.cc/v1",
  apiKey: process.env.KIMICODE_KEY,
});

// Streaming over SSE
const stream = await client.chat.completions.create({
  model: "uncensored",
  stream: true,
  messages: [{ role: "user", content: "Write a four-line poem about routers." }],
});
for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}

// JSON mode
const json = await client.chat.completions.create({
  model: "uncensored",
  response_format: { type: "json_object" },
  messages: [
    { role: "system", content: "Reply with a JSON object only." },
    { role: "user", content: "Give me keys name and port for a local dev server." },
  ],
});
console.log(JSON.parse(json.choices[0].message.content));

流式输出使用服务器发送事件,使用情况在流结束时报告。流式请求在流结束前会占用其并发槽位,因此打开流但从不读取的客户端将阻塞一个槽位。使用 JSON 模式时,仍需在提示词中告诉模型以 JSON 格式回答。该标志约束输出格式,但清晰的指令会提供更好的字段名。

工具调用

工具遵循标准的 OpenAI 结构:tools 列表、可选的 tool_choice,以及以 role: "tool" 角色发送回的工具结果。进行流式输出时,tool_calls 会分块到达。

import json, os
from openai import OpenAI

client = OpenAI(base_url="https://api.kimicode.cc/v1", api_key=os.environ["KIMICODE_KEY"])

tools = [{
    "type": "function",
    "function": {
        "name": "get_port",
        "description": "Look up the port of a named local service",
        "parameters": {
            "type": "object",
            "properties": {"service": {"type": "string"}},
            "required": ["service"],
        },
    },
}]

messages = [{"role": "user", "content": "Which port does the api service use?"}]
first = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
call = first.choices[0].message.tool_calls[0]

messages.append(first.choices[0].message)
messages.append({
    "role": "tool",
    "tool_call_id": call.id,
    "content": json.dumps({"service": "api", "port": 8080}),
})
final = client.chat.completions.create(model="uncensored", messages=messages, tools=tools)
print(final.choices[0].message.content)

将来自模型的参数视为不可信输入。在运行任何内容之前对其进行验证。模型可能会跳过工具调用或使用错误的字段调用它,就像任何模型一样,因此在循环中保留回退路径。

当 URL 不可用时

大多数故障属于以下简短列表。

  • 404 Not Found。 路径错误。常见原因:基础 URL 设置为 https://api.kimicode.cc 而没有 /v1,或设置为 https://api.kimicode.cc/v1/chat/completions 导致客户端两次追加路径。使用上述确切的基础 URL。
  • 401 Unauthorized。 密钥缺失、包含多余空格或换行符,或者头部不是 Bearer 令牌。打印变量的长度以进行检查。
  • 429 错误,代码为 rate_limited。你超过了每分钟限制:完整密钥为 300 次请求,试用密钥为 60 次请求。
  • 429 错误,代码为 concurrency。 同时请求过多:完整密钥为 8 个,试用密钥为 2 个。
  • 429 错误,带有 Retry-After: 5 头部。 临时过载。等待五秒并重试。
  • 请求过大。 主体限制为 8 MB,提示词和补全必须适合 100,000 个 token。

尊重 Retry-After 并在另外两种错误码上退避的重试循环几乎可以处理所有此类情况。每次调用的成本很小;定价页面 列出了每 token 的费率,文档快速入门 展示了从另一个 OpenAI 风格提供商迁移的步骤。

重试和生产环境实践

一旦第一次调用成功,在发布之前添加重试包装器。当存在时尊重 Retry-After 头部,否则使用短随机延迟进行退避。

import os, time, random
from openai import OpenAI, RateLimitError

client = OpenAI(base_url="https://api.kimicode.cc/v1", api_key=os.environ["KIMICODE_KEY"])

def ask(messages, tries=5):
    for attempt in range(tries):
        try:
            return client.chat.completions.create(model="uncensored", messages=messages)
        except RateLimitError as err:
            retry_after = 5
            if getattr(err, "response", None) is not None:
                retry_after = int(err.response.headers.get("retry-after", 5))
            time.sleep(retry_after + random.random())
    raise RuntimeError("still rate limited after retries")

将您的并发限制匹配到您的密钥:完整密钥的线程池为 8,试用密钥为 2。这可以在错误发生前阻止 concurrency 错误,并且当每次调用花费超过几秒钟时,也能让您保持在每分钟 300 个请求的限制内。

最后,请记住您按 token 付费。记录每次调用的 usage 对象,并监控 X-Balance-USD 标头。输入 token 每 100 万 token 价格为 $0.15,输出 token 每 100 万 token 价格为 $0.50,典型的聊天轮次仅需几分之一美分,但循环和长历史记录会累积费用,日志会告诉您具体情况。

问答

此 API 的基础 URL 是什么?

https://api.kimicode.cc/v1. 将其设置为任何 OpenAI 兼容客户端的基础 URL,并将路径留给库处理。

我发送哪个模型 ID?

将 uncensored 作为模型值发送。您可以通过使用密钥调用 GET /v1/models 来确认它。

我可以使用此处的密钥调用官方 Kimi 接口吗?

不行。这是一个独立服务,拥有自己的密钥和一款开放权重模型,并非任何供应商的官方 API。密钥无法双向通用。

为什么聊天补全接口返回 404?

Base URL 可能缺少 /v1,或者已经包含了 /chat/completions。请使用 https://api.kimicode.cc/v1,不要添加其他内容。

您只需填写一张表单即可获得密钥

创建账户,复制密钥,更改基础 URL。这就是全部设置。

获取 API 密钥