Keural API
Hantar permintaan dengan format OpenAI Chat Completions menggunakan kunci API.
Panggil model yang didaftarkan dalam Keural dengan format OpenAI Chat Completions.
Base URL berbentuk https://<public API domain for each environment>/llm/v1. Domain API awam berbeza mengikut persekitaran, jadi semak dengan pentadbir.
| Kaedah | Laluan | Penerangan |
|---|---|---|
POST | /llm/v1/chat/completions | Cipta penyiapan chat (menyokong penstriman) |
GET | /llm/v1/models | Senarai model yang dipautkan kepada kunci |
GET | /llm/v1/models/{model} | Maklumat model yang dipautkan kepada kunci |
Laluan embedding, penjanaan imej, suara, dan Responses API tidak disokong, dan API memulangkan 404.
Aliran penggunaan
| Peringkat | Perkara yang dilakukan |
|---|---|
| 1. Terbitkan kunci | Buka Tetapan → API, pilih model, kemudian terbitkan kunci. Salin model ID dan kunci. |
| 2. Sambungkan klien | Masukkan Base URL, kunci API, dan model ID dalam aplikasi atau kod. |
| 3. Guna dan urus | Lihat penggunaan pada skrin yang sama, dan terbitkan semula atau batalkan kunci bila perlu. |
Prasyarat
| Item | Keterangan |
|---|---|
| Akaun Keural | Akaun yang boleh log masuk. |
| Menu API | Jika menu API tiada, minta pentadbir mengaktifkan ciri ini. |
| Kebenaran ahli organisasi | Untuk menerima kunci dalam ruang kerja organisasi, pentadbir organisasi mesti membenarkan penggunaan API anda. Lihat Kebenaran API ahli organisasi. |
| Base URL | Alamat API awam yang diberikan pentadbir. |
| Klien | Aplikasi atau SDK yang menyokong sambungan serasi OpenAI API. |
Menerbitkan kunci API
- Dalam menu akaun, buka Tetapan → API. Dalam aplikasi desktop dan mudah alih, menu ini berada dalam kumpulan Alat.
- Dalam tab API keys, pilih ruang kerja pemilik kunci (peribadi atau organisasi) dan Model ID.
- Jika perlu, tetapkan Tarikh luput kunci baharu. Jika dibiarkan kosong, kunci sah sehingga dibatalkan.
- Klik Terbitkan kunci, kemudian klik Salin kunci untuk menyalin kunci. Kunci penuh hanya dipaparkan sekali semasa diterbitkan dan tidak boleh dilihat semula selepas skrin ditutup.
- Kunci dipautkan kepada ruang kerja yang dipilih dan satu model. Penggunaan dikira atas nama orang yang menerbitkan kunci.
- Setiap ruang kerja dan model hanya boleh mempunyai satu kunci. Untuk kunci baharu, rotasi atau batalkan kunci sedia ada.
- Selepas diterbitkan semula, kunci sebelumnya serta-merta tidak boleh digunakan.
- Jika tiada model yang boleh diterbitkan, semak keterlihatan model, pelan, dan kebenaran API organisasi bersama pentadbir.
Kebenaran API ahli organisasi
Untuk pemilik dan pentadbir organisasi sahaja. Agar ahli boleh menerima kunci dalam ruang kerja organisasi, pentadbir mesti membenarkannya terlebih dahulu. Bagi ahli baharu dan sedia ada, akses disekat secara lalai.
Pengurusan organisasi → Organization API mengandungi tiga bahagian berikut. Jika menu ini tiada, ciri API dimatikan atau akaun anda tidak mempunyai kebenaran pengurusan organisasi.
| Bahagian | Perkara yang dilakukan |
|---|---|
| API permissions by user | Mengaktifkan atau menyahaktifkan kebenaran penggunaan API bagi setiap ahli. |
| Issued keys | Menyemak status kunci yang diterbitkan oleh organisasi dan membatalkannya. Kunci penuh tidak boleh dilihat. |
| API usage | Melihat permintaan dan penggunaan token bagi kunci yang diterbitkan oleh organisasi. |
| Tindakan | Hasil |
|---|---|
| Hidupkan kebenaran | Ahli tersebut boleh menerbitkan kunci dalam ruang kerja organisasi. |
| Matikan kebenaran | Penerbitan baharu dan panggilan dengan kunci sedia ada disekat. Kunci yang sudah diterbitkan tidak dipadam secara automatik, jadi batalkan daripada Issued keys jika perlu. |
Jika ahli keluar atau dikeluarkan daripada organisasi, kunci yang diterima melalui organisasi akan dibatalkan secara automatik.
Menyambung ke klien
Masukkan tiga nilai berikut dalam aplikasi yang serasi dengan OpenAI API (klien sembang, sambungan IDE, alat automasi, dan lain-lain).
| Nilai | Yang dimasukkan | Nama dalam aplikasi |
|---|---|---|
| Base URL | Alamat API awam daripada pentadbir (…/llm/v1) | Base URL, API Base, Endpoint, Host |
| API Key | Kunci yang diterbitkan (tanpa ruang di depan atau belakang) | API Key, Token, Secret Key, Authorization |
| Model | Model ID dari skrin penerbitan. Mesti sama tepat dengan model yang dipautkan kepada kunci | Model, Model ID, Model Name |
- Dalam tetapan aplikasi, tambah Sambungan serasi OpenAI (Connection).
- Masukkan Base URL dan API Key, kemudian simpan.
- Pilih model dalam senarai. Senarai hanya memaparkan satu model, iaitu model yang dipautkan kepada kunci.
- Hantar mesej ringkas dan semak respons.
Format permintaan adalah seperti berikut.
| Jenis | Kandungan |
|---|---|
| Permintaan sembang | POST <Base URL>/chat/completions |
| Dapatkan model | GET <Base URL>/models |
| Pengepala pengesahan | Authorization: Bearer <issued key> |
| Pengepala kandungan | Content-Type: application/json |
Permintaan pertama
export KEURAL_API_KEY='kunci_yang_diterbitkan'
export KEURAL_BASE_URL='https://<domain-api-awam-persekitaran>/llm/v1'
export MODEL_ID='model ID dari skrin penerbitan'
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\":\"Helo.\"}]}"Nilai model dalam badan permintaan mesti sama dengan model ID yang dipautkan kepada kunci. Jika ada awalan laluan seperti provider/model-ID, bahagian selepas / terakhir mesti sepadan. Jika tidak, API memulangkan 403. Dalam respons, model sentiasa berisi model ID kunci.
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": "Helo."}],
)
print(res.choices[0].message.content)Medan permintaan yang disokong
18 medan peringkat atas berikut sahaja diterima. Medan lain memulangkan 400. Medan pilihan yang bernilai null dianggap tidak dihantar.
| Medan | Peraturan |
|---|---|
model | Wajib. Model ID kunci |
messages | Wajib. 1 hingga 4,096 item |
stream · stream_options | stream_options hanya dihantar apabila stream: true. Menyokong include_usage. |
tools | Maksimum 128. Nama fungsi [A-Za-z0-9_-] 1–64 aksara |
tool_choice | none · auto · required · fungsi tertentu. required memerlukan tools. |
parallel_tool_calls | Jika model tidak menyokong, 400 |
response_format | text · json_object · json_schema |
max_tokens · max_completion_tokens | Hantar salah satu sahaja. Jika tidak dihantar, 4,096 digunakan (atau nilai lebih rendah jika had model lebih rendah). Melebihi had model memulangkan 400 |
temperature | 0–2. Jika model tidak menyokong, 400 |
top_p | 0–1 |
frequency_penalty · presence_penalty | -2 hingga 2 |
stop | Rentetan atau tatasusunan maksimum 4 |
seed | Integer |
user | Maksimum 256 aksara |
n | 1 sahaja |
Mesej
| Peranan | Medan yang diterima |
|---|---|
system · developer | content, name |
user | content (rentetan atau tatasusunan bahagian teks·imej), name |
assistant | content, name, refusal, tool_calls |
tool | content, tool_call_id |
- Mesej
toolhanya membalas sekali untuk setiapiddalamtool_callssebelumnya. - Bahagian imej (
image_url) hanya boleh dimasukkan dalam mesejuserbagi model yang menerima imej. Gunakan alamathttpatauhttps, atau data URI base64 format PNG, JPEG, GIF, atau WebP.detailialahauto·low·high.
Badan
| Item | Had |
|---|---|
| Content-Type | application/json |
| Saiz | 1 MiB |
| Struktur JSON | Satu objek peringkat atas, kedalaman sarang 64 atau kurang, tiada kunci berganda dalam satu objek |
| Masa permintaan | Maksimum 600 saat |
Jika peraturan badan dilanggar, hasilnya 400 dan param ialah body.
Penstriman
Tambahkan "stream": true dalam permintaan untuk menerima respons melalui SSE. Chunk dihantar sebagai acara data: ..., dan penstriman berakhir dengan data: [DONE]. Jika "stream_options": {"include_usage": true} ditambah, satu chunk penggunaan token dihantar sebelum [DONE].
Apabila include_usage diisi, setiap chunk mengandungi usage: null, dan chunk penggunaan terakhir mempunyai choices sebagai tatasusunan kosong. Respons bukan penstriman hanya mengandungi usage jika jumlah token input dan output telah disahkan.
ID respons berformat chatcmpl-<x-request-id>. Setiap respons menyertakan pengepala x-request-id.
Jika ralat berlaku semasa penstriman, acara data: yang mengandungi JSON ralat dihantar, kemudian sambungan ditutup tanpa [DONE]. Jika satu chunk melebihi 1 MiB atau respons melebihi 16 MiB, penstriman berakhir dengan 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\":\"Helo.\"}],\"stream\":true,\"stream_options\":{\"include_usage\":true}}"Had penggunaan
Permintaan dihadkan mengikut pengguna, organisasi, dan model, berdasarkan bilangan permintaan serentak, permintaan seminit (RPM), dan token seminit (TPM). Nilai sebenar berbeza mengikut persekitaran.
Token seminit ditolak terlebih dahulu apabila permintaan diterima. Input dikira 1 token bagi setiap 4 aksara Inggeris dan 1 token bagi setiap aksara lain. Satu imej dikira sebagai 2,000 token. Output ditolak sebanyak max_tokens (maksimum 4,096), jadi jika hanya had output yang diperlukan ditetapkan, baki had akan lebih besar.
Kod 429 | Punca | Retry-After |
|---|---|---|
rate_limit_exceeded | RPM · TPM · bilangan permintaan serentak melebihi had | RPM·TPM 60 saat, permintaan serentak 1 saat |
api_busy | Kapasiti pemprosesan pelayan sudah penuh | Tiada. Tunggu seketika, kemudian cuba semula. |
upstream_rate_limit | Pembekal model memulangkan had | Tiada |
Mengurus kunci
Dalam Tetapan → API → API keys, status kunci yang diterbitkan dipaparkan (Sah · Tamat tempoh · Dibatalkan). Kunci boleh dirotasi atau dibatalkan dari sini.
Kunci ialah rentetan 51 aksara yang bermula dengan krl_llm_. Setiap ruang kerja hanya boleh mempunyai satu kunci, dan jika sudah ada, kunci dirotasi dan bukannya diterbitkan baharu. Tarikh luput hanya boleh ditetapkan selepas hari ini.
| Tindakan | Hasil | Catatan |
|---|---|---|
| Rotasi | Menerima kunci baharu. | Kunci lama serta-merta tidak boleh digunakan. Kemas kini kunci dalam aplikasi yang telah disambungkan. |
| Batal | Menyekat kunci serta-merta. | Gunakan apabila disyaki kebocoran. Kunci yang dibatalkan tidak boleh diaktifkan semula. |
Menyemak penggunaan
Permintaan API dan penggunaan token boleh disemak di dua tempat.
| Lokasi | Yang dipaparkan |
|---|---|
| Tetapan → API → tab API usage | Penggunaan kunci yang anda terbitkan dalam ruang kerja semasa |
| Pengurusan organisasi → Organization API, bahagian bawah API usage | Penggunaan semua kunci yang diterbitkan dalam organisasi (pemilik dan pentadbir organisasi) |
Syarat carian
| Syarat | Keterangan |
|---|---|
| Masa mula · masa tamat | Masa Korea (KST). Masa mula disertakan, masa tamat tidak. Jika kosong, 7 hari terakhir dipaparkan, dan maksimum 90 hari setiap carian. |
| Model ID | Hanya memaparkan permintaan untuk model tertentu. Jika kosong, semua permintaan dipaparkan. |
| Status permintaan | Pilih daripada Semua · Sedang berjalan · Berjaya · Gagal · Dibatalkan · Belum disahkan. |
Tetapkan syarat, kemudian klik Cari. Untuk menyemak permintaan terbaru, klik Muat semula.
Nilai yang dipaparkan pada skrin
- Julat carian yang digunakan: julat yang benar-benar dicari. Jika masa dikosongkan atau melebihi 90 hari, julat yang diselaraskan oleh pelayan dipaparkan.
- Bilangan permintaan dan Token input · Token output · Jumlah token: hanya nilai yang disahkan dijumlahkan. Token yang belum disahkan dipaparkan sebagai Belum disahkan, bukan 0.
- Senarai permintaan: setiap permintaan dipaparkan dalam satu baris dengan masa permintaan, Model ID, status permintaan, serta token input, output, dan jumlah. Setiap halaman memaparkan 20 permintaan. Gunakan Sebelum dan Seterusnya untuk bertukar halaman.
Klik Butiran permintaan pada baris untuk melihat nilai berikut.
| Item | Keterangan |
|---|---|
| ID permintaan | Nilai yang diberikan semasa menghubungi sokongan. |
| Jenis respons | Penstriman atau bukan penstriman |
| Status pengesahan penggunaan | Disahkan · Disahkan sebahagian · Belum disahkan |
| Masa tamat · Latensi (ms) | Masa permintaan tamat dan masa yang diambil. |
| Token baca cache · Token cipta cache · Token penaakulan | Hanya dipaparkan jika model memulangkan nilai ini. |
Permintaan penstriman direkodkan penggunaannya walaupun stream_options.include_usage tidak dimasukkan. Jika permintaan terputus di tengah jalan, statusnya mungkin kekal sebagai Disahkan sebahagian atau Belum disahkan.
Format ralat
Ralat dipulangkan dalam format yang serasi dengan OpenAI.
{
"error": {
"message": "Penerangan ralat yang boleh dibaca manusia",
"type": "authentication_error",
"code": "invalid_api_key",
"param": null
}
}type ditentukan oleh kod status, dan code membezakan punca.
| Status | type | code | Punca |
|---|---|---|---|
400 | invalid_request_error | invalid_request | Pelanggaran medan, nilai, atau peraturan badan. param mengandungi medan yang bermasalah |
400 | invalid_request_error | upstream_rejected_request | Pembekal model menolak permintaan |
401 | authentication_error | invalid_api_key | Format kunci salah, kunci tiada, kunci tamat tempoh·dibatalkan·dirotasi, atau pengepala Authorization lebih daripada satu |
403 | permission_error | api_disabled | Ciri Keural API dimatikan |
403 | permission_error | model_api_disabled | Pendedahan API bagi model dimatikan |
403 | permission_error | model_not_allowed | model tidak sama dengan model kunci, atau ahli tiada kebenaran API |
404 | invalid_request_error | not_found | Laluan tidak wujud |
405 | invalid_request_error | method_not_allowed | Kaedah salah. Pengepala Allow mengandungi kaedah yang dibenarkan |
429 | rate_limit_error | Jadual dalam Had penggunaan di atas | Had dilampaui |
503 | server_error | upstream_timeout | Respons tidak selesai dalam masa 600 saat |
503 | server_error | invalid_upstream_response | Format respons pembekal tidak normal, saiz stream melebihi had |
503 | server_error | dependency_unavailable · unsupported_provider | Masalah dalaman sementara. Hubungi sokongan dengan x-request-id |
Penyelesaian masalah
| Gejala | Kod respons | Semak dahulu |
|---|---|---|
| Senarai model kosong atau sambungan gagal | 404 · 405 | Sama ada Base URL berakhir dengan …/llm/v1 |
| Pengesahan gagal | 401 | Kesilapan taip atau ruang di depan dan belakang kunci, kunci tamat tempoh, dibatalkan, atau dirotasi |
| Tersambung tetapi model tidak boleh digunakan | 403 | Sama ada Model ID sama dengan model kunci, dan kebenaran API organisasi |
| Respons lambat atau gagal sekali-sekala | 429 | Had penggunaan |
| Respons tidak datang buat sementara | 5xx | Cuba semula sebentar lagi |
| Penggunaan tidak kelihatan atau berbeza daripada sebenar | — | Julat masa carian dan ruang kerja tempat kunci dimiliki |
Jika masalah berterusan, hubungi pentadbir dengan maklumat berikut. Kandungan kunci dan prompt jangan dihantar.
- Masa berlaku
- Model ID yang digunakan
- Nama dan versi aplikasi klien
x-request-iddaripada pengepala respons- Mesej ralat yang dipaparkan pada skrin