繁中 ▾
取得 API 金鑰

Kimi Code API Base URL 設定

此服務所需的 Kimi Code API Base URL 為 https://api.kimicode.cc/v1。將其設為任何 OpenAI 相容客戶端的 Base URL,填入你的金鑰,並使用模型 ID uncensored。

更新

連接用戶端終端機與 API 伺服器的電纜,代表 base URL 設定

URL 及其各部分含義

如果你正在尋找 kimi code api url,你可能在尋找 Kimi 自有服務的位址。請使用供應商的文件,因為我無法為其背書。此網站運行的是不同的東西:由獨立供應商運營、位於單一開放權重模型前方的託管式 OpenAI 相容 API。其位址為:

https://api.kimicode.cc/v1

該字串是 Base 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 程式碼不需要其他變更:Base URL、API 金鑰與模型 ID uncensored。

為什麼 Base URL 是唯一開關

相容 OpenAI API 的客戶端基於一個概念建構:請求格式是固定的,而主機是設定。函式庫有一個指向原始供應商的預設主機。當你將其替換為另一個 Base URL 時,相同的請求主體會被發送到其他地方。你的提示詞、訊息陣列或回應解析不需要任何變更。

這也說明了為什麼從另一個相容 OpenAI 的供應商遷移通常只需三處編輯:Base URL、金鑰與模型名稱。回應中的欄位,例如 choices、message、finish_reason 與 usage,名稱相同,因此讀取這些欄位的程式碼可以繼續運作。

它也說明了人們遇到的奇怪錯誤。如果工具要求「伺服器 URL」而你只貼上主機,則路徑遺漏。如果工具要求「完整端點」而你貼上 Base URL,請求會發送到錯誤的位置。當設定畫面不清楚時,先嘗試 Base 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 結果。串流輸出時,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。 路徑錯誤。常見原因:Base URL 設定為 https://api.kimicode.cc 而缺少 /v1,或設定為 https://api.kimicode.cc/v1/chat/completions 導致客戶端重複附加路徑。請使用上述確切的 Base URL。
  • 401 Unauthorized。 金鑰遺失、含有多餘的空格或換行,或標頭不是 Bearer token。請列印變數的長度以進行檢查。
  • 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 標頭。每 1M 輸入 token 為 $0.15,每 1M 輸出 token 為 $0.50,典型的聊天輪次僅需幾分之一美分,但迴圈與長歷史記錄會累積費用,而記錄會告訴你錢花在哪裡。

問答

此 API 的基礎 URL 是什麼?

https://api.kimicode.cc/v1。請將其設為任何 OpenAI 相容客戶端的基礎 URL,並將路徑留給函式庫處理。

我要發送哪個模型 ID?

將 uncensored 設為模型值。您可以使用 API 金鑰呼叫 GET /v1/models 來確認。

我可以使用來自此處的我的金鑰使用官方的 Kimi 端點嗎?

不行。這是獨立服務,擁有自己的金鑰與單一開放權重模型,並非任何廠商的官方 API。金鑰無法在兩者之間通用。

為什麼聊天完成會返回 404?

Base URL 可能缺少 /v1,或已包含 /chat/completions。僅使用 https://api.kimicode.cc/v1,不要多加任何內容。

僅需填寫表單即可取得金鑰

建立帳號、複製金鑰、更改 Base URL。這就是整個設定過程。

取得 API 金鑰