Langkau ke kandungan
KeuralDocs
Pembangun

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.

KaedahLaluanPenerangan
POST/llm/v1/chat/completionsCipta penyiapan chat (menyokong penstriman)
GET/llm/v1/modelsSenarai 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

PeringkatPerkara yang dilakukan
1. Terbitkan kunciBuka Tetapan → API, pilih model, kemudian terbitkan kunci. Salin model ID dan kunci.
2. Sambungkan klienMasukkan Base URL, kunci API, dan model ID dalam aplikasi atau kod.
3. Guna dan urusLihat penggunaan pada skrin yang sama, dan terbitkan semula atau batalkan kunci bila perlu.

Prasyarat

ItemKeterangan
Akaun KeuralAkaun yang boleh log masuk.
Menu APIJika menu API tiada, minta pentadbir mengaktifkan ciri ini.
Kebenaran ahli organisasiUntuk menerima kunci dalam ruang kerja organisasi, pentadbir organisasi mesti membenarkan penggunaan API anda. Lihat Kebenaran API ahli organisasi.
Base URLAlamat API awam yang diberikan pentadbir.
KlienAplikasi atau SDK yang menyokong sambungan serasi OpenAI API.

Menerbitkan kunci API

  1. Dalam menu akaun, buka Tetapan → API. Dalam aplikasi desktop dan mudah alih, menu ini berada dalam kumpulan Alat.
  2. Dalam tab API keys, pilih ruang kerja pemilik kunci (peribadi atau organisasi) dan Model ID.
  3. Jika perlu, tetapkan Tarikh luput kunci baharu. Jika dibiarkan kosong, kunci sah sehingga dibatalkan.
  4. 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.

BahagianPerkara yang dilakukan
API permissions by userMengaktifkan atau menyahaktifkan kebenaran penggunaan API bagi setiap ahli.
Issued keysMenyemak status kunci yang diterbitkan oleh organisasi dan membatalkannya. Kunci penuh tidak boleh dilihat.
API usageMelihat permintaan dan penggunaan token bagi kunci yang diterbitkan oleh organisasi.
TindakanHasil
Hidupkan kebenaranAhli tersebut boleh menerbitkan kunci dalam ruang kerja organisasi.
Matikan kebenaranPenerbitan 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).

NilaiYang dimasukkanNama dalam aplikasi
Base URLAlamat API awam daripada pentadbir (…/llm/v1)Base URL, API Base, Endpoint, Host
API KeyKunci yang diterbitkan (tanpa ruang di depan atau belakang)API Key, Token, Secret Key, Authorization
ModelModel ID dari skrin penerbitan. Mesti sama tepat dengan model yang dipautkan kepada kunciModel, Model ID, Model Name
  1. Dalam tetapan aplikasi, tambah Sambungan serasi OpenAI (Connection).
  2. Masukkan Base URL dan API Key, kemudian simpan.
  3. Pilih model dalam senarai. Senarai hanya memaparkan satu model, iaitu model yang dipautkan kepada kunci.
  4. Hantar mesej ringkas dan semak respons.

Format permintaan adalah seperti berikut.

JenisKandungan
Permintaan sembangPOST <Base URL>/chat/completions
Dapatkan modelGET <Base URL>/models
Pengepala pengesahanAuthorization: Bearer <issued key>
Pengepala kandunganContent-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.

MedanPeraturan
modelWajib. Model ID kunci
messagesWajib. 1 hingga 4,096 item
stream · stream_optionsstream_options hanya dihantar apabila stream: true. Menyokong include_usage.
toolsMaksimum 128. Nama fungsi [A-Za-z0-9_-] 1–64 aksara
tool_choicenone · auto · required · fungsi tertentu. required memerlukan tools.
parallel_tool_callsJika model tidak menyokong, 400
response_formattext · json_object · json_schema
max_tokens · max_completion_tokensHantar salah satu sahaja. Jika tidak dihantar, 4,096 digunakan (atau nilai lebih rendah jika had model lebih rendah). Melebihi had model memulangkan 400
temperature0–2. Jika model tidak menyokong, 400
top_p0–1
frequency_penalty · presence_penalty-2 hingga 2
stopRentetan atau tatasusunan maksimum 4
seedInteger
userMaksimum 256 aksara
n1 sahaja

Mesej

PerananMedan yang diterima
system · developercontent, name
usercontent (rentetan atau tatasusunan bahagian teks·imej), name
assistantcontent, name, refusal, tool_calls
toolcontent, tool_call_id
  • Mesej tool hanya membalas sekali untuk setiap id dalam tool_calls sebelumnya.
  • Bahagian imej (image_url) hanya boleh dimasukkan dalam mesej user bagi model yang menerima imej. Gunakan alamat http atau https, atau data URI base64 format PNG, JPEG, GIF, atau WebP. detail ialah auto · low · high.

Badan

ItemHad
Content-Typeapplication/json
Saiz1 MiB
Struktur JSONSatu objek peringkat atas, kedalaman sarang 64 atau kurang, tiada kunci berganda dalam satu objek
Masa permintaanMaksimum 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 429PuncaRetry-After
rate_limit_exceededRPM · TPM · bilangan permintaan serentak melebihi hadRPM·TPM 60 saat, permintaan serentak 1 saat
api_busyKapasiti pemprosesan pelayan sudah penuhTiada. Tunggu seketika, kemudian cuba semula.
upstream_rate_limitPembekal model memulangkan hadTiada

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.

TindakanHasilCatatan
RotasiMenerima kunci baharu.Kunci lama serta-merta tidak boleh digunakan. Kemas kini kunci dalam aplikasi yang telah disambungkan.
BatalMenyekat 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.

LokasiYang dipaparkan
Tetapan → API → tab API usagePenggunaan kunci yang anda terbitkan dalam ruang kerja semasa
Pengurusan organisasi → Organization API, bahagian bawah API usagePenggunaan semua kunci yang diterbitkan dalam organisasi (pemilik dan pentadbir organisasi)

Syarat carian

SyaratKeterangan
Masa mula · masa tamatMasa Korea (KST). Masa mula disertakan, masa tamat tidak. Jika kosong, 7 hari terakhir dipaparkan, dan maksimum 90 hari setiap carian.
Model IDHanya memaparkan permintaan untuk model tertentu. Jika kosong, semua permintaan dipaparkan.
Status permintaanPilih 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.

ItemKeterangan
ID permintaanNilai yang diberikan semasa menghubungi sokongan.
Jenis responsPenstriman atau bukan penstriman
Status pengesahan penggunaanDisahkan · Disahkan sebahagian · Belum disahkan
Masa tamat · Latensi (ms)Masa permintaan tamat dan masa yang diambil.
Token baca cache · Token cipta cache · Token penaakulanHanya 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.

StatustypecodePunca
400invalid_request_errorinvalid_requestPelanggaran medan, nilai, atau peraturan badan. param mengandungi medan yang bermasalah
400invalid_request_errorupstream_rejected_requestPembekal model menolak permintaan
401authentication_errorinvalid_api_keyFormat kunci salah, kunci tiada, kunci tamat tempoh·dibatalkan·dirotasi, atau pengepala Authorization lebih daripada satu
403permission_errorapi_disabledCiri Keural API dimatikan
403permission_errormodel_api_disabledPendedahan API bagi model dimatikan
403permission_errormodel_not_allowedmodel tidak sama dengan model kunci, atau ahli tiada kebenaran API
404invalid_request_errornot_foundLaluan tidak wujud
405invalid_request_errormethod_not_allowedKaedah salah. Pengepala Allow mengandungi kaedah yang dibenarkan
429rate_limit_errorJadual dalam Had penggunaan di atasHad dilampaui
503server_errorupstream_timeoutRespons tidak selesai dalam masa 600 saat
503server_errorinvalid_upstream_responseFormat respons pembekal tidak normal, saiz stream melebihi had
503server_errordependency_unavailable · unsupported_providerMasalah dalaman sementara. Hubungi sokongan dengan x-request-id

Penyelesaian masalah

GejalaKod responsSemak dahulu
Senarai model kosong atau sambungan gagal404 · 405Sama ada Base URL berakhir dengan …/llm/v1
Pengesahan gagal401Kesilapan taip atau ruang di depan dan belakang kunci, kunci tamat tempoh, dibatalkan, atau dirotasi
Tersambung tetapi model tidak boleh digunakan403Sama ada Model ID sama dengan model kunci, dan kebenaran API organisasi
Respons lambat atau gagal sekali-sekala429Had penggunaan
Respons tidak datang buat sementara5xxCuba 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-id daripada pengepala respons
  • Mesej ralat yang dipaparkan pada skrin

Pada halaman ini