ภาพรวม
แผนที่ของ API: ทุก endpoint คำขอและข้อผิดพลาดมีหน้าตาอย่างไร การชำระค่าบริการของการเรียก และสิ่งที่ควรรู้เมื่อมาจาก OpenAI หรือ Anthropic SDK
Endpoint
ทุก endpoint อยู่ภายใต้ base URL เดียวและให้บริการผ่าน HTTPS
https://api.shannon-ai.com | เอนด์พอยต์ | รูปแบบ | ใช้ทำอะไร |
|---|---|---|
POST /v1/chat/completions | OpenAI Chat Completions | ส่งบทสนทนา รับคำตอบถัดไป จะสตรีมหรือไม่ก็ได้ |
POST /v1/messages | Anthropic Messages | เหมือนกัน แต่ใช้รูปแบบคำขอและคำตอบของ Anthropic SDK |
POST /v1/responses | OpenAI Responses | เหมือนกัน แต่ใช้รูปแบบ Responses endpoint นี้ไม่เก็บสถานะ: ส่งบทสนทนาไปกับทุกคำขอ |
GET /v1/models | รายการโมเดลของ OpenAI | แสดงรายการโมเดลพร้อม context window ราคา และความสามารถ ไม่ต้องใช้คีย์ |
POST /v1/tokenize | Shannon API | นับ tokens ของข้อความหรือของคำขอแชตสำหรับโมเดล open-weight ที่โฮสต์ ไม่มีค่าใช้จ่าย |
POST /v1/messages/count_tokens | การนับ token ของ Anthropic | นับ input tokens ของคำขอ Messages สำหรับโมเดล open-weight ที่โฮสต์ ไม่มีค่าใช้จ่าย |
สาม endpoint ที่สร้างข้อความเข้าถึงโมเดลชุดเดียวกัน เลือกอันที่มีรูปแบบตรงกับที่โค้ดของคุณใช้อยู่แล้ว
พื้นฐานของคำขอ
| เฮดเดอร์ | คำอธิบาย |
|---|---|
Authorization: Bearer <key> | API key ของคุณ จำเป็นบนทุก endpoint ยกเว้น GET /v1/models เว้นแต่คุณส่ง x-api-key |
x-api-key: <key> | คีย์เดียวกันในเฮดเดอร์ที่ Anthropic SDK ส่ง อ่านได้บนทุก endpoint |
Content-Type: application/json | จำเป็นบนทุก POST หากไม่มี คำตอบจะเป็น 415 |
x-request-id: <your id> | ไม่บังคับ id ของคุณเองสำหรับคำขอ ซึ่งจะกลับมาในเฮดเดอร์คำตอบ x-request-id หากไม่ระบุ API จะสร้างให้เป็นเลขฐานสิบหก 12 ตัว |
- body ของทุก
POSTคือออบเจ็กต์ JSON หนึ่งรายการ ใหญ่ได้ถึง 32 MiB - ฟิลด์ที่ API ไม่รู้จักจะไม่ทำให้เกิดข้อผิดพลาดและไม่มีผล คำขอที่เขียนสำหรับผู้ให้บริการรายอื่นจะไม่ล้มเหลวเพราะฟิลด์เกิน
- ฟิลด์ที่รู้จักแต่มีชนิด JSON ไม่ถูกต้อง หรือขาดฟิลด์ที่จำเป็น จะได้รับ
422body ที่ไม่ใช่ JSON ที่ถูกต้องจะได้รับ400 modelคือหนึ่งใน id ในหน้าโมเดลและราคา ตัวพิมพ์ใหญ่และเล็กไม่มีผล
คำตอบเป็น JSON หรือสตรีมของ server-sent events เมื่อคำขอตั้ง stream เป็น true แต่ละ endpoint ตอบด้วยรูปแบบของตัวเอง ทุกคำตอบมีเฮดเดอร์ x-request-id
สิ่งที่คำขอต้องผ่าน
คำขอจะถูกตรวจตามลำดับที่กำหนดก่อนที่โมเดลจะทำงาน การตรวจแรกที่ไม่ผ่านจะเป็นผู้ตอบ ดังนั้น 401 จึงยังไม่บอกอะไรเกี่ยวกับ body
| ตรวจตามลำดับนี้ | สถานะเมื่อล้มเหลว |
|---|---|
| API key | 401 |
| Body: ขนาด content type, JSON, ชนิดของฟิลด์ | 413 · 415 · 400 · 422 |
| Model id | 400 |
| Flood protection: 120 คำขอต่อนาทีต่อบัญชี | 429 |
| ยอดคงเหลือ: งบเอาต์พุตของคำขอต้องพอดี | 429 |
รูปแบบของข้อผิดพลาด
ข้อผิดพลาดคือออบเจ็กต์ JSON ที่มี error ซึ่งเก็บ type และ message /v1/messages ห่อไว้ตามที่ Anthropic SDK คาดหวัง ส่วนพาธอื่นทุกพาธใช้รูปแบบของ OpenAI
{
"error": {
"type": "invalid_request_error",
"message": "unknown model: gpt-4o"
}
} {
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "unknown model: gpt-4o"
}
} - อ่าน
typeและmessageส่วนcodeและparamมีเฉพาะในข้อผิดพลาดบางประเภท: ให้ถือว่าเป็นตัวเลือกparamเป็นnullเสมอ - หลังจากสตรีมเริ่มแล้ว สถานะเป็น
200ไปแล้ว ความล้มเหลวจะมาถึงเป็นเฟรมข้อผิดพลาดภายในสตรีม - ทุกคำตอบข้อผิดพลาดมีเฮดเดอร์
x-request-id
| สถานะ | ประเภท | เมื่อใด |
|---|---|---|
400 | invalid_request_error | body ไม่ใช่ JSON ที่ถูกต้อง ไม่รู้จัก model id หรือโมเดลไม่รับอินพุตชนิดที่คุณส่ง |
401 | authentication_error | ไม่มีคีย์หรือคีย์ไม่ถูกต้อง |
404 | not_found_error | ไม่มีพาธนี้ |
405 | api_error | มีพาธนี้ แต่ใช้ method ผิด |
413 | invalid_request_error | body ใหญ่กว่า 32 MiB |
415 | invalid_request_error | Content-Type ไม่ใช่ application/json |
422 | invalid_request_error | ฟิลด์มีชนิด JSON ไม่ถูกต้อง หรือขาดฟิลด์ที่จำเป็น |
429 | rate_limit_error | ยอดคงเหลือไม่พอสำหรับคำขอ มีคำขอมากกว่า 120 รายการในหนึ่งนาที การเรียก Shannon Coder ของช่วงเวลาใช้หมดแล้ว หรือโมเดลไม่ว่าง ข้อความจะบอกว่าเป็นกรณีใด |
5xx | api_error | สถานะ 500, 502, 503 หรือ 504: คำขอถูกต้องแต่ตอบไม่ได้ ให้ส่งอีกครั้ง 500 อาจมีประเภท server_error |
การเรียกเก็บเงินและยอดคงเหลือ
- แต่ละบัญชีมียอดคงเหลือเดียว แชตและ API ใช้ร่วมกัน: โควตาแผนรายวันก่อน แล้วจึงเครดิตที่ซื้อเพิ่ม API ไม่มีโควตาของตัวเอง
- คำขอจะจองงบเอาต์พุต (
max_tokensค่าเริ่มต้น 4,096) แล้วคิดเงินตาม tokens ที่ใช้จริง ในราคาของโมเดล - ทุกคำตอบรายงานจำนวน tokens ใน
usageหน้าคีย์และการใช้งานแสดงยอดคงเหลือและค่าใช้จ่ายของแต่ละคำขอ - ทุกคำขอได้รับบริการเท่ากัน ขีดจำกัดเดียวของอัตราคำขอคือ flood protection: 120 คำขอต่อนาทีต่อบัญชี คำขอที่ส่งแบบขนานจะรอในคิว
ขีดจำกัดและยอดคงเหลือ โมเดลและราคา คีย์และการใช้งาน
ฟิลด์ที่ขึ้นกับโมเดล
ทุกโมเดลรับคำขอแบบเดียวกัน มีไม่กี่ฟิลด์ที่มีผลกับบางโมเดลเท่านั้น ตารางระบุไว้ว่าโมเดลใด หน้าของแต่ละ endpoint แสดงทุกฟิลด์
| ฟิลด์ | คำอธิบาย | ใช้โดย |
|---|---|---|
system | คำสั่งสำหรับโมเดล: ข้อความ system บน Chat Completions, system บน Messages, instructions บน Responses | โมเดล open-weight ที่โฮสต์, shannon-1.6-*, shannon-2-*, shannon-coder-1 |
temperature | temperature ของการสุ่ม | โมเดล open-weight ที่โฮสต์, shannon-1.6-*, shannon-coder-1 |
top_p | Nucleus sampling | โมเดล open-weight ที่โฮสต์ |
seed | seed คงที่สำหรับการสุ่ม | โมเดล open-weight ที่โฮสต์ |
stop | ลำดับหยุด (stop sequences) ได้สูงสุด 4 รายการ | โมเดล open-weight ที่โฮสต์ |
reasoning_effort | โมเดลให้เหตุผลมากเพียงใดก่อนตอบ reasoning.effort บน Responses, thinking บน Messages | โมเดล open-weight ที่โฮสต์ |
web_search | true ให้โมเดลค้นหาเว็บสำหรับคำขอนี้ เป็นฟิลด์ของ API นี้ บน Chat Completions และ Messages | โมเดล Shannon ยกเว้น shannon-coder-1 |
max_tokens | งบเอาต์พุต ในทุกโมเดลจะกำหนดจำนวนที่จองจากยอดคงเหลือของคุณ | ในฐานะขีดจำกัดความยาวของคำตอบ: โมเดล open-weight ที่โฮสต์, shannon-1.6-*, shannon-coder-1 |
หากมาจาก OpenAI SDK
- ตั้ง base URL เป็น
https://api.shannon-ai.com/v1และตั้งคีย์เป็นคีย์ Shannon ของคุณ จากนั้นการเรียก Chat Completions และ Responses จะทำงานกับ SDK ได้ตามเดิม modelต้องเป็น id ของ Shannon ชื่อโมเดลของผู้ให้บริการรายอื่น เช่นgpt-4oจะได้รับ400และunknown model- การให้เหตุผลมาในฟิลด์ของตัวเอง:
reasoning_contentข้างcontentทั้งในข้อความและใน stream delta - สตรีมจะมี
usageใน chunk สุดท้ายเสมอ พร้อมกับfinish_reason - การเรียก tool ในสตรีมจะมาถึงเป็น chunk เดียวพร้อมสตริง
argumentsที่สมบูรณ์ - คำตอบมีหนึ่ง choice
- พาธของ OpenAI API ที่ไม่อยู่ในตารางด้านบน เช่น
/v1/embeddingsจะได้รับ404
หากมาจาก Anthropic SDK
- ตั้ง base URL เป็น
https://api.shannon-ai.comโดยไม่มี/v1และตั้งคีย์เป็นคีย์ Shannon ของคุณ SDK จะส่งเป็นx-api-key modelต้องเป็น id ของ Shannonmax_tokensเป็นตัวเลือกใน API นี้ ค่าเริ่มต้นคือ 4,096- คำตอบมี content block ชนิด
thinking,textและtool_useบล็อกแรกไม่ได้เป็นข้อความเสมอไป: ให้เลือกบล็อกตามtype stop_reasonเป็นend_turnหรือtool_useสตรีมของโมเดล Shannon อาจจบด้วยmax_tokensได้เช่นกัน- รับ
anthropic-versionและanthropic-betaไว้ จึงใช้ SDK ได้โดยไม่ต้องแก้ แต่คำขอไม่จำเป็นต้องมี - ข้อผิดพลาดบน
/v1/messagesมีรูปแบบของ Anthropic:{"type": "error", "error": {…}}
เครื่องมือเขียนโค้ดที่ใช้รูปแบบเหล่านี้ตั้งค่าแบบเดียวกัน: base URL คีย์ และ id ของ Shannon เป็นโมเดล เครื่องมือเขียนโค้ดแบบ CLI