跳到內容
KeuralDocs
開發人員

Keural API

使用 API 金鑰傳送 OpenAI Chat Completions 格式的請求。

以 OpenAI Chat Completions 格式呼叫 Keural 中登錄的模型。

Base URL 的格式為 https://<各環境的公開 API 網域>/llm/v1。公開 API 網域依環境而異,請向管理員確認。

方法路徑說明
POST/llm/v1/chat/completions建立對話(支援串流)
GET/llm/v1/models與金鑰連接的模型清單
GET/llm/v1/models/{model}與金鑰連接的模型資訊

嵌入、圖像生成、語音與 Responses API 路徑均不支援,會回傳 404。

使用流程

步驟操作
1. 發行金鑰在 設定 → API 中選擇模型並取得金鑰。複製模型 ID 與金鑰。
2. 連接用戶端在應用程式或程式碼中填入 Base URL、API 金鑰與模型 ID。
3. 使用與管理在同一畫面確認用量,必要時重新發行或撤銷金鑰。

準備事項

項目內容
Keural 帳號可登入的帳號
API 選單若設定中沒有 API 選單,請向管理員申請啟用此功能。
組織成員權限要在組織工作區取得金鑰,組織管理員需先允許你使用 API。參見 組織成員的 API 權限。
Base URL管理員提供的公開 API 位址
用戶端支援 OpenAI API 相容連線的應用程式或 SDK

發行 API 金鑰

  1. 在帳號選單中開啟 設定 → API。在桌面應用程式與行動應用程式中,它位於 工具 區域。
  2. 在 API keys 分頁中,選擇金鑰的歸屬(個人工作區或組織工作區)以及 Model ID。
  3. 如有需要,設定 New key expiration (optional, Korea time)。留空則在撤銷前一直有效。
  4. 按下 Issue key,再用 Copy key 複製金鑰並妥善保存。完整金鑰僅會在此時顯示一次。
  • 金鑰與所選工作區及一個模型相連。用量歸屬於發行金鑰的人。
  • 同一工作區、同一模型只能有一把金鑰。若需要新金鑰,請重新發行或撤銷現有金鑰。
  • 若遺失金鑰,請重新發行。重新發行後,先前的金鑰會立即無法使用。
  • 若沒有可發行的模型,請向管理員確認模型公開設定、方案與組織 API 權限。

組織成員的 API 權限

僅適用於組織擁有者與管理員。要讓成員在組織工作區中取得金鑰,需由管理員先行允許。所有成員的預設皆為封鎖。

組織管理 → Organization API 由以下三個區域組成。若沒有此選單,表示 API 功能已關閉,或此帳號沒有組織管理權限。

區域作用
API permissions by user為每位成員開啟或關閉 API 使用權限。
Issued keys查看組織中發行之金鑰的狀態並撤銷。無法查看金鑰全文。
API usage查看組織中發行之金鑰的請求數與權杖用量。
操作結果
開啟權限該成員可以在組織工作區中發行金鑰。
關閉權限阻擋新的發行,以及既有金鑰的呼叫。已發行的金鑰不會自動刪除,如有需要,請在 Issued keys 中撤銷。

成員離開或被移出組織時,該成員在組織中取得的金鑰會自動撤銷。

連接到用戶端

請在相容 OpenAI API 的應用程式(聊天用戶端、IDE 擴充功能、自動化工具等)中,輸入以下三個值。

項目輸入內容應用程式中的項目名稱
Base URL管理員提供的公開 API 位址(…/llm/v1)Base URL、API Base、Endpoint、Host
API Key取得的金鑰(前後不要有空白)API Key、Token、Secret Key、Authorization
Model發行畫面中的 Model ID。必須與金鑰連接的模型完全相符Model、Model ID、Model Name
  1. 在應用程式設定中新增 OpenAI 相容連線(Connection)。
  2. 輸入 Base URL 與 API Key,然後儲存。
  3. 從模型清單中選擇模型。清單中只會顯示與金鑰相連的一個模型。
  4. 傳送簡短訊息,確認有收到回應。

請求格式如下。

類別內容
對話請求POST <Base URL>/chat/completions
模型查詢GET <Base URL>/models
驗證標頭Authorization: Bearer <發行的金鑰>
內容標頭Content-Type: application/json

第一個請求

export KEURAL_API_KEY='your_issued_key'
export KEURAL_BASE_URL='https://<各環境的公開 API 網域>/llm/v1'
export MODEL_ID='發行畫面中的模型 ID'

curl "$KEURAL_BASE_URL/chat/completions" \
  -H "Authorization: Bearer $KEURAL_API_KEY" \
  -H 'Content-Type: application/json' \
  -d "{\"model\":\"$MODEL_ID\",\"messages\":[{\"role\":\"user\",\"content\":\"你好。\"}]}"

請求本文中的 model 必須與金鑰連接的模型 ID 相同。若前面帶有 provider/模型ID 這樣的路徑,會比較最後一個 / 之後的部分。不同時會回傳 403。回應中的 model 一律包含金鑰的模型 ID。

from openai import OpenAI
import os

client = OpenAI(
    api_key=os.environ["KEURAL_API_KEY"],
    base_url=os.environ["KEURAL_BASE_URL"],
)
res = client.chat.completions.create(
    model=os.environ["MODEL_ID"],
    messages=[{"role": "user", "content": "你好。"}],
)
print(res.choices[0].message.content)

支援的請求欄位

頂層欄位僅接受以下 18 個。傳送其他欄位會回傳 400。值為 null 的選用欄位視為未傳送。

欄位規則
model必填。金鑰的模型 ID
messages必填。1 至 4,096 項
stream · stream_options僅在 stream: true 時傳送 stream_options。支援 include_usage。
tools最多 128 個。函式名稱為 [A-Za-z0-9_-],1 至 64 個字元
tool_choicenone · auto · required · 指定函式。required 需要存在 tools。
parallel_tool_calls模型不支援時回傳 400
response_formattext · json_object · json_schema
max_tokens · max_completion_tokens只傳送其中一個。若都不傳送,則為 4,096(若模型上限較低則為該值)。超過模型上限會回傳 400。
temperature0 至 2。模型不支援時回傳 400
top_p0 至 1
frequency_penalty · presence_penalty-2 至 2
stop字串,或最多 4 項的陣列
seed整數
user最多 256 個字元
n僅 1

訊息

角色接受的欄位
system · developercontent、name
usercontent(字串,或文字與圖像片段的陣列)、name
assistantcontent、name、refusal、tool_calls
toolcontent、tool_call_id
  • tool 訊息對前面 tool_calls 中的每個 id 只回覆一次。
  • 圖像片段(image_url)只能放在支援圖像的模型之 user 訊息中。可使用 http 或 https 位址,或 PNG、JPEG、GIF、WebP 的 base64 data URI。detail 為 auto、low 或 high。

本文

項目限制
Content-Typeapplication/json
大小1MiB
JSON 結構一個頂層物件,巢狀深度不超過 64,不允許重複的鍵
請求時間最長 600 秒

違反本文規則會回傳 400,且 param 為 body。

串流

在請求中加入 "stream": true 後,會以 SSE 回應。各區塊以 data: ... 事件傳送,最後會傳送 data: [DONE]。若加入 "stream_options": {"include_usage": true},則在 [DONE] 之前會額外傳送一個權杖用量區塊。

加入 include_usage 後,每個區塊都會包含 usage: null,最後一個用量區塊的 choices 為空陣列。非串流回應只有在輸入與輸出權杖都已確認時才會包含 usage。

回應的 id 格式為 chatcmpl-<x-request-id>。所有回應標頭都包含 x-request-id。

串流中發生錯誤時,會傳送含有錯誤 JSON 的 data: 事件,然後在沒有 [DONE] 的情況下結束連線。若單一區塊超過 1MiB,或回應超過 16MiB,則會以 503 結束。

curl -N "$KEURAL_BASE_URL/chat/completions" \
  -H "Authorization: Bearer $KEURAL_API_KEY" \
  -H 'Content-Type: application/json' \
  -d "{\"model\":\"$MODEL_ID\",\"messages\":[{\"role\":\"user\",\"content\":\"你好。\"}],\"stream\":true,\"stream_options\":{\"include_usage\":true}}"

使用限制

依使用者、組織與模型為單位,限制同時請求數、每分鐘請求數(RPM)與每分鐘權杖數(TPM)。實際數值依環境而異。

每分鐘權杖數會在接收請求時預先扣除。輸入以每 4 個英文字元計 1 個權杖,其他字元以每個字元計 1 個權杖,一張圖像計 2,000 個權杖。輸出依 max_tokens(最多 4,096)預先扣除,因此只設定所需的輸出上限,可以讓限額更有餘裕。

429 code原因Retry-After
rate_limit_exceeded超過 RPM、TPM 或同時請求數RPM·TPM 為 60 秒,同時請求為 1 秒
api_busy伺服器處理容量已滿無。請稍候再重試。
upstream_rate_limit模型供應商超出限制無

金鑰管理

在 設定 → API → API keys 分頁中,可以確認已發行金鑰的狀態(有效、已過期、已撤銷),並進行重新發行或撤銷。

金鑰是以 krl_llm_ 開頭、共 51 個字元的字串。每個金鑰歸屬只能有一把金鑰,已存在時會重新發行。有效期限只能設定為今天之後的日期。

操作結果注意事項
重新發行取得新金鑰。先前的金鑰會立即失效。已連接應用程式中的金鑰也需一併更換。
撤銷立即封鎖該金鑰。金鑰外洩疑慮時使用。已撤銷的金鑰無法復原。

查看用量

透過 API 傳送的請求與消耗的權杖,可在以下兩個位置確認。

位置內容
設定 → API → API usage 分頁目前工作區中你發行之金鑰的用量
組織管理 → Organization API 下方的 API usage組織中發行之所有金鑰的用量(組織擁有者與管理員)

查詢條件

條件說明
開始時間 · 結束時間以韓國時間為準。包含開始時間,不包含結束時間。留空時為最近 7 天,一次最多可查詢 90 天。
Model ID僅查詢特定模型的請求。留空則為全部。
請求狀態從 All · Running · Completed · Failed · Cancelled · Unknown 中選擇。

設定條件後按下 Search。若要反映最近的請求,請按下 Refresh。

畫面上顯示的值

  • Applied time range (KST):實際查詢的時間範圍。開始與結束時間留空或超過 90 天時,會顯示伺服器調整後的時間範圍。
  • Requests 與 Input tokens · Output tokens · Total tokens 的合計:只加總已確認的值。未確認的權杖以 Unconfirmed 顯示。
  • 請求清單:每個請求顯示請求時間、Model ID、請求狀態,以及輸入、輸出、總權杖數。每頁顯示 20 筆,以 Previous 與 Next 翻頁。

按下列中的 Request details,即可顯示以下數值。

項目說明
請求 ID洽詢時需提供的值
回應方式串流或非串流回應
用量確認狀態Confirmed · Partially confirmed · Unconfirmed
結束時間 · 回應時間(ms)請求結束的時間與耗時
快取讀取 · 快取建立 · 推理權杖僅在模型回傳這些值時顯示

串流請求即使沒有 stream_options.include_usage,也會記錄用量。若請求中途中斷,可能會保留為 Partially confirmed 或 Unconfirmed。

錯誤格式

錯誤以 OpenAI 相容格式回傳。

{
  "error": {
    "message": "供人閱讀的錯誤說明",
    "type": "authentication_error",
    "code": "invalid_api_key",
    "param": null
  }
}

type 由狀態碼決定,code 用於區分原因。

狀態typecode原因
400invalid_request_errorinvalid_request違反欄位、值或本文規則。param 中為有問題的欄位
400invalid_request_errorupstream_rejected_request模型供應商拒絕了請求
401authentication_errorinvalid_api_key金鑰格式錯誤、沒有金鑰、已過期、已撤銷或已重新發行,或 Authorization 標頭不只一個
403permission_errorapi_disabledKeural API 功能已關閉
403permission_errormodel_api_disabled該模型的 API 公開已關閉
403permission_errormodel_not_allowedmodel 與金鑰的模型不同,或成員沒有 API 權限
404invalid_request_errornot_found不存在的路徑
405invalid_request_errormethod_not_allowed方法錯誤。允許的方法請見 Allow 標頭
429rate_limit_error參見上方 使用限制 表格超過限制
503server_errorupstream_timeout600 秒內回應未結束
503server_errorinvalid_upstream_response供應商回應格式異常,或串流大小超過限制
503server_errordependency_unavailable · unsupported_provider暫時性的內部問題。洽詢時請附上 x-request-id

疑難排解

症狀回應碼確認項目
模型清單為空或連線失敗404 · 405Base URL 是否以 …/llm/v1 結尾
驗證失敗401金鑰是否輸入錯誤或前後有空白,是否已過期、撤銷或重新發行
連線正常但無法使用模型403模型 ID 是否與金鑰的模型相符,組織 API 權限
回應緩慢或偶爾失敗429使用限制
一段時間沒有回應5xx稍後再重試
用量看不到或與實際不符—查詢期間與金鑰所屬的工作區

問題仍未解決時,請附上以下資訊聯絡管理員。請勿傳送金鑰全文與提示詞內容。

  • 發生時間
  • 使用的模型 ID
  • 用戶端應用程式的名稱與版本
  • 回應標頭中的 x-request-id
  • 畫面上顯示的錯誤訊息

本頁內容