ข้ามไปยังเนื้อหา
KeuralDocs
นักพัฒนา

Keural API

ส่งคำขอในรูปแบบ OpenAI Chat Completions ด้วย API key

เรียกใช้โมเดลที่ลงทะเบียนใน Keural ด้วยรูปแบบ OpenAI Chat Completions

Base URL มีรูปแบบ https://<public API domain for each environment>/llm/v1 โดเมน API สาธารณะแตกต่างกันในแต่ละสภาพแวดล้อม ให้สอบถามผู้ดูแลระบบ

เมธอดพาธคำอธิบาย
POST/llm/v1/chat/completionsสร้างการสนทนา (รองรับการสตรีม)
GET/llm/v1/modelsแสดงรายการโมเดลที่เชื่อมกับคีย์
GET/llm/v1/models/{model}ดูข้อมูลโมเดลที่เชื่อมกับคีย์

ไม่รองรับพาธสำหรับ embedding, การสร้างภาพ, เสียง และ Responses API เรียกพาธเหล่านี้จะได้รับ 404

ขั้นตอนการใช้งาน

ขั้นตอนสิ่งที่ทำ
1. ออกคีย์ไปที่ การตั้งค่า → API เลือกโมเดลแล้วรับคีย์ คัดลอก Model ID และคีย์ไว้
2. เชื่อมต่อไคลเอนต์ใส่ Base URL, API key และ Model ID ลงในแอปหรือโค้ด
3. ใช้งานและจัดการตรวจสอบการใช้งานในหน้าเดียวกัน และออกคีย์ใหม่หรือเพิกถอนเมื่อจำเป็น

เตรียมการ

รายการรายละเอียด
บัญชี Keuralบัญชีที่เข้าสู่ระบบได้
เมนู APIหากไม่มีเมนู API ในการตั้งค่า ให้ขอผู้ดูแลระบบเปิดใช้ฟีเจอร์
สิทธิ์ของสมาชิกองค์กรหากต้องการออกคีย์ในพื้นที่ทำงานขององค์กร ผู้ดูแลระบบขององค์กรต้องอนุญาตการใช้ API ของคุณก่อน ดู สิทธิ์ API ของสมาชิกองค์กร
Base URLที่อยู่ API สาธารณะที่ผู้ดูแลระบบแจ้ง
ไคลเอนต์แอปหรือ SDK ที่รองรับการเชื่อมต่อแบบ OpenAI API

ออก API key

  1. เปิดเมนูบัญชี เลือก การตั้งค่า → API ในแอปเดสก์ท็อปและแอปมือถือ เมนูนี้อยู่ในส่วน เครื่องมือ
  2. ในแท็บ API keys เลือกพื้นที่ทำงานที่คีย์จะสังกัด (ส่วนตัวหรือองค์กร) และ Model ID
  3. หากต้องการ ให้กำหนด วันหมดอายุของคีย์ใหม่ หากเว้นว่างไว้ คีย์จะใช้ได้โดยไม่มีวันหมดอายุจนกว่าจะเพิกถอน
  4. คลิก ออกคีย์ แล้วคลิก คัดลอกคีย์ เพื่อคัดลอกและเก็บรักษาคีย์ คีย์ฉบับเต็มจะแสดงเพียงครั้งเดียว
  • คีย์ผูกกับพื้นที่ทำงานที่เลือกและโมเดลหนึ่งโมเดล การใช้งานจะนับให้ผู้ที่ออกคีย์
  • พื้นที่ทำงานและโมเดลคู่เดียวกันจะมีคีย์ที่ใช้งานได้เพียงหนึ่งคีย์ หากต้องการคีย์ใหม่ ให้หมุนเวียนหรือเพิกถอนคีย์เดิม
  • หากคีย์หายไป จะดูซ้ำไม่ได้ ให้ออกคีย์ใหม่ เมื่อออกคีย์ใหม่แล้ว คีย์เดิมจะใช้ไม่ได้ทันที
  • หากขึ้นว่าไม่มีโมเดลที่ออกคีย์ได้ ให้ตรวจสอบกับผู้ดูแลระบบเรื่องการเปิดให้ใช้โมเดล แพลน และสิทธิ์ API ขององค์กร

สิทธิ์ API ของสมาชิกองค์กร

สำหรับเจ้าของและผู้ดูแลระบบขององค์กรเท่านั้น ในพื้นที่ทำงานขององค์กร สมาชิกจะออกคีย์ได้ก็ต่อเมื่อผู้ดูแลระบบอนุญาตก่อน ค่าเริ่มต้นของสมาชิกทุกคนคือถูกบล็อก

ไปที่ การจัดการองค์กร → Organization API เมนูนี้ประกอบด้วยสามส่วนต่อไปนี้ หากไม่มีเมนูนี้ แสดงว่าฟีเจอร์ API ปิดอยู่ หรือบัญชีนี้ไม่มีสิทธิ์จัดการองค์กร

ส่วนหน้าที่
สิทธิ์ API ของแต่ละสมาชิกเปิดหรือปิดการอนุญาตใช้ API ของสมาชิกแต่ละคน
Issued keysดูสถานะของคีย์ที่ออกในองค์กรและเพิกถอนได้ ไม่สามารถดูข้อความเต็มของคีย์ได้
การใช้งาน APIดูจำนวนคำขอและการใช้โทเค็นของคีย์ที่ออกในองค์กร
การดำเนินการผลลัพธ์
เปิดอนุญาตสมาชิกนั้นออกคีย์ในพื้นที่ทำงานขององค์กรได้
ปิดอนุญาตการออกคีย์ใหม่และการเรียกใช้ด้วยคีย์เดิมจะถูกบล็อก คีย์ที่ออกไปแล้วจะไม่ถูกลบอัตโนมัติ หากจำเป็นให้เพิกถอนจาก Issued keys

เมื่อสมาชิกออกจากองค์กรหรือถูกนำออกจากองค์กร คีย์ที่สมาชิกคนนั้นได้รับจากองค์กรจะถูกเพิกถอนอัตโนมัติ

เชื่อมต่อกับไคลเอนต์

ใส่ค่าสามค่าต่อไปนี้ลงในแอปที่รองรับ OpenAI API (ไคลเอนต์แชต ส่วนขยาย IDE เครื่องมืออัตโนมัติ และอื่น ๆ)

ค่าสิ่งที่ต้องใส่ชื่อในแอป
Base URLที่อยู่ API สาธารณะที่ผู้ดูแลระบบแจ้ง (…/llm/v1)Base URL, API Base, Endpoint, Host
API Keyคีย์ที่ได้รับ (ไม่มีช่องว่างหน้าหรือหลัง)API Key, Token, Secret Key, Authorization
ModelModel 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
Header การยืนยันตัวตนAuthorization: Bearer <issued key>
Header เนื้อหาContent-Type: application/json

คำขอแรก

export KEURAL_API_KEY='คีย์ที่ได้รับ'
export KEURAL_BASE_URL='https://<โดเมน API สาธารณะตามสภาพแวดล้อม>/llm/v1'
export MODEL_ID='Model 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 ในเนื้อหาคำขอต้องตรงกับ model ID ที่เชื่อมกับคีย์ หากมีพาธนำหน้า เช่น provider/model-ID ให้เปรียบเทียบส่วนหลัง / สุดท้าย หากไม่ตรงจะได้รับ 403 ในการตอบกลับ model จะเป็น 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จำเป็น model ID ของคีย์
messagesจำเป็น 1 ถึง 4,096 รายการ
stream · stream_optionsstream_options ส่งเฉพาะเมื่อ stream: true รองรับ 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 ตัวอักษร
n1 เท่านั้น

ข้อความ

บทบาทฟิลด์ที่รับ
system · developercontent, name
usercontent (สตริงหรืออาร์เรย์ของส่วนข้อความ·รูปภาพ), name
assistantcontent, name, refusal, tool_calls
toolcontent, tool_call_id
  • ข้อความ tool ตอบกลับได้เพียงครั้งเดียวต่อ id ใน tool_calls ก่อนหน้า
  • ส่วนรูปภาพ (image_url) ใส่ได้เฉพาะในข้อความ user ของโมเดลที่รับรูปภาพ ใช้ที่อยู่ http หรือ https หรือ data URI แบบ base64 ที่เป็น PNG, JPEG, GIF หรือ WebP detail ใช้ได้ auto · low · high

เนื้อหา (body)

รายการขีดจำกัด
Content-Typeapplication/json
ขนาด1 MiB
โครงสร้าง 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> ทุกการตอบกลับมี header x-request-id แนบมาด้วย

หากเกิดข้อผิดพลาดระหว่างสตรีม จะส่งอีเวนต์ data: ที่มี JSON ของข้อผิดพลาดมา แล้วการเชื่อมต่อจะปิดโดยไม่มี [DONE] หากชังค์เดียวเกิน 1 MiB หรือการตอบกลับเกิน 16 MiB สตรีมจะจบด้วย 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) ค่าจริงแตกต่างกันในแต่ละสภาพแวดล้อม

โทเค็นต่อนาทีจะถูกหักไว้ล่วงหน้าตั้งแต่รับคำขอ อินพุตนับ 1 โทเค็นต่อตัวอักษรภาษาอังกฤษ 4 ตัว และนับ 1 โทเค็นต่อตัวอักษรอื่น ๆ รูปภาพ 1 รูปนับ 2,000 โทเค็น เอาต์พุตหักเท่ากับ max_tokens (สูงสุด 4,096) ดังนั้นหากกำหนดขีดจำกัดเอาต์พุตเท่าที่จำเป็น โควตาคงเหลือจะมากขึ้น

รหัส 429สาเหตุRetry-After
rate_limit_exceededเกิน RPM · TPM · จำนวนคำขอพร้อมกันRPM·TPM 60 วินาที, คำขอพร้อมกัน 1 วินาที
api_busyเซิร์ฟเวอร์รับคำขอเกินความจุไม่มี ลองใหม่อีกครั้งในภายหลัง
upstream_rate_limitผู้ให้บริการโมเดลเกินขีดจำกัดไม่มี

การจัดการคีย์

ในแท็บ API keys ของ การตั้งค่า → API ตรวจสอบสถานะคีย์ (ใช้ได้ · หมดอายุ · เพิกถอนแล้ว) และหมุนเวียนหรือเพิกถอนคีย์ได้ที่นี่

คีย์เป็นสตริง 51 ตัวอักษรที่ขึ้นต้นด้วย krl_llm_ แต่ละพื้นที่ทำงานมีคีย์ได้หนึ่งคีย์ หากมีอยู่แล้ว จะหมุนเวียนคีย์แทนการออกใหม่ วันหมดอายุตั้งได้เฉพาะหลังวันนี้เท่านั้น

การดำเนินการผลลัพธ์หมายเหตุ
หมุนเวียนได้รับคีย์ใหม่คีย์เดิมใช้ไม่ได้ทันที ให้เปลี่ยนคีย์ในแอปที่เชื่อมต่อไว้ด้วย
เพิกถอนบล็อกคีย์ทันทีใช้เมื่อสงสัยว่าคีย์รั่วไหล คีย์ที่เพิกถอนแล้วไม่สามารถกู้คืนได้

ตรวจสอบการใช้งาน

คำขอที่ส่งผ่าน API และโทเค็นที่ใช้ไปดูได้จากสองที่

ที่แสดงอะไร
การตั้งค่า → API → แท็บ API usageการใช้งานของคีย์ที่คุณออกในพื้นที่ทำงานปัจจุบัน
การจัดการองค์กร → Organization API ด้านล่าง API usageการใช้งานของคีย์ทั้งหมดที่ออกในองค์กร (สำหรับเจ้าของและผู้ดูแลระบบขององค์กร)

เงื่อนไขการค้นหา

เงื่อนไขคำอธิบาย
เวลาเริ่ม · เวลาสิ้นสุดเวลาเกาหลี (KST) รวมเวลาเริ่มแต่ไม่รวมเวลาสิ้นสุด หากเว้นว่างจะแสดง 7 วันล่าสุด และดูได้สูงสุด 90 วันต่อครั้ง
Model IDดูเฉพาะคำขอของโมเดลที่ระบุ หากเว้นว่างจะแสดงทั้งหมด
สถานะคำขอเลือกจาก ทั้งหมด · กำลังทำงาน · สำเร็จ · ล้มเหลว · ยกเลิก · ยังไม่ยืนยัน

กำหนดเงื่อนไขแล้วคลิก ค้นหา หากต้องการดูคำขอที่เพิ่งส่งไป ให้คลิก รีเฟรช

ค่าที่แสดงบนหน้าจอ

  • ช่วงเวลาที่ใช้ค้นหา (KST): ช่วงเวลาที่ค้นหาจริง หากเว้นเวลาว่างไว้ หรือเกิน 90 วัน จะแสดงช่วงที่เซิร์ฟเวอร์ปรับให้
  • จำนวนคำขอ และ โทเค็นอินพุต · โทเค็นเอาต์พุต · โทเค็นรวม: รวมเฉพาะค่าที่ยืนยันแล้ว โทเค็นที่ยังไม่ยืนยันจะไม่นับเป็น 0 แต่แสดงเป็น ยังไม่ยืนยัน
  • รายการคำขอ: แต่ละคำขอแสดงเป็นหนึ่งแถว ประกอบด้วยเวลาที่ส่ง Model ID สถานะคำขอ และโทเค็นอินพุต เอาต์พุต และรวม แต่ละหน้าแสดง 20 คำขอ เลื่อนหน้าด้วย ก่อนหน้า และ ถัดไป

คลิก รายละเอียดคำขอ ในแถวเพื่อดูค่าต่อไปนี้

รายการคำอธิบาย
Request IDค่าที่ให้ไว้เมื่อติดต่อฝ่ายสนับสนุน
รูปแบบการตอบกลับสตรีมหรือไม่ใช่สตรีม
สถานะการยืนยันการใช้งานยืนยันแล้ว · ยืนยันบางส่วน · ยังไม่ยืนยัน
เวลาสิ้นสุด · เวลาตอบสนอง (ms)เวลาที่คำขอจบและเวลาที่ใช้
โทเค็นอ่านแคช · โทเค็นสร้างแคช · โทเค็นการให้เหตุผลแสดงเฉพาะเมื่อโมเดลส่งค่านี้กลับมา

คำขอแบบสตรีมจะถูกบันทึกการใช้งานแม้ไม่ได้ใส่ stream_options.include_usage หากคำขอขาดหายกลางทาง สถานะอาจค้างเป็น ยืนยันบางส่วน หรือ ยังไม่ยืนยัน

รูปแบบข้อผิดพลาด

ข้อผิดพลาดจะถูกส่งกลับในรูปแบบที่เข้ากันได้กับ 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รูปแบบคีย์ผิด ไม่มีคีย์ คีย์หมดอายุ·ถูกเพิกถอน·ถูกหมุนเวียน หรือมี header Authorization มากกว่าหนึ่ง
403permission_errorapi_disabledฟีเจอร์ Keural API ถูกปิดอยู่
403permission_errormodel_api_disabledการเปิดให้ใช้ API ของโมเดลถูกปิดอยู่
403permission_errormodel_not_allowedmodel ไม่ตรงกับโมเดลของคีย์ หรือสมาชิกไม่มีสิทธิ์ API
404invalid_request_errornot_foundไม่มีพาธนี้
405invalid_request_errormethod_not_allowedเมธอดไม่ถูกต้อง header Allow ระบุเมธอดที่อนุญาต
429rate_limit_errorตารางใน ขีดจำกัดการใช้งาน ด้านบนเกินขีดจำกัด
503server_errorupstream_timeoutการตอบกลับไม่เสร็จภายใน 600 วินาที
503server_errorinvalid_upstream_responseรูปแบบการตอบกลับของผู้ให้บริการผิดปกติ หรือขนาดสตรีมเกิน
503server_errordependency_unavailable · unsupported_providerปัญหาภายในชั่วคราว แจ้งฝ่ายสนับสนุนพร้อม x-request-id

การแก้ปัญหา

อาการรหัสตอบกลับตรวจสอบก่อน
รายการโมเดลว่างหรือเชื่อมต่อไม่ได้404 · 405Base URL ลงท้ายด้วย …/llm/v1 หรือไม่
การยืนยันตัวตนล้มเหลว401พิมพ์คีย์ผิดหรือมีช่องว่างหน้าหลัง คีย์หมดอายุ ถูกเพิกถอน หรือถูกหมุนเวียนหรือไม่
เชื่อมต่อได้แต่ใช้โมเดลไม่ได้403Model ID ตรงกับโมเดลของคีย์หรือไม่ และสิทธิ์ API ขององค์กร
ตอบกลับช้าหรือล้มเหลวเป็นครั้งคราว429ขีดจำกัดการใช้งาน
ไม่มีการตอบกลับชั่วคราว5xxลองใหม่อีกครั้งในภายหลัง
ไม่เห็นการใช้งาน หรือตัวเลขไม่ตรงกับที่ใช้จริง—ช่วงเวลาที่ค้นหาและพื้นที่ทำงานที่คีย์สังกัด

หากยังไม่หายให้ติดต่อผู้ดูแลระบบ พร้อมข้อมูลต่อไปนี้เพื่อให้หาสาเหตุได้เร็วขึ้น ไม่ต้องส่งค่าคีย์ฉบับเต็มหรือเนื้อหา prompt

  • เวลาที่เกิดเหตุ
  • Model ID ที่ใช้
  • ชื่อและเวอร์ชันของแอปไคลเอนต์
  • x-request-id จาก header การตอบกลับ
  • ข้อความข้อผิดพลาดที่แสดงบนหน้าจอ

ในหน้านี้