ข้ามไปยังเนื้อหา
เริ่มต้นอย่างรวดเร็ว

เริ่มต้นอย่างรวดเร็ว

ส่งคำขอแรก: รับคีย์ ส่งหนึ่งข้อความ และอ่านคำตอบ API ใช้รูปแบบของ OpenAI และ Anthropic ดังนั้น SDK ที่คุณใช้อยู่แล้วจะทำงานได้หลังจากเปลี่ยน base URL และคีย์

1. รับคีย์ของคุณ

ทุกบัญชีมี API key หนึ่งคีย์ ลงชื่อเข้าใช้ เปิดหน้าคีย์และการใช้งาน แล้วคัดลอก คีย์ใช้ได้กับทุก endpoint และทุกโมเดล คีย์และการใช้งาน

2. ชี้ไคลเอนต์ของคุณไปที่ API

ทุก endpoint อยู่ภายใต้ base URL เดียว OpenAI SDK ใช้โดยต่อท้ายด้วย /v1 ส่วน Anthropic SDK ใช้โดยไม่มี เพราะ SDK เพิ่ม /v1/messages เอง

ไคลเอนต์ Base URL
OpenAI SDK และไคลเอนต์ที่เข้ากันได้กับ OpenAI https://api.shannon-ai.com/v1
Anthropic SDK https://api.shannon-ai.com

มีสาม endpoint ที่สร้างข้อความ ทั้งหมดเข้าถึงโมเดลชุดเดียวกัน เลือกอันที่มีรูปแบบตรงกับที่โค้ดของคุณใช้อยู่แล้ว

เอนด์พอยต์ รูปแบบ
POST /v1/chat/completions OpenAI Chat Completions
POST /v1/messages Anthropic Messages
POST /v1/responses OpenAI Responses

3. ส่งคำขอแรก

ส่งข้อความ user หนึ่งข้อความไปยัง shannon-3 บน endpoint Chat Completions แทนที่ YOUR_API_KEY ด้วยคีย์ของคุณ

POST https://api.shannon-ai.com/v1/chat/completions

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com/v1"
)

response = client.chat.completions.create(
    model="shannon-3",
    messages=[
        {"role": "user", "content": "Hello, Shannon!"}
    ],
    max_tokens=1024
)

print(response.choices[0].message.content)
ฟิลด์ ประเภท ค่าเริ่มต้น คำอธิบาย
model string id ของโมเดลที่ตอบ รายการ id อยู่ในหน้าโมเดลและราคา
messages array บทสนทนาจนถึงตอนนี้: ออบเจ็กต์ที่มี role และ content ข้อความ user ล่าสุดคือ prompt จำเป็นต้องมี
max_tokens integer 4096 งบเอาต์พุตของคำขอ ตั้งแต่ 1 ถึง 65,536 คำขอจะจองจำนวนนี้จากยอดคงเหลือของคุณ และคิดเงินตามที่ใช้จริง
stream boolean false true ส่งคำตอบทีละส่วนขณะที่เขียน

body ของคำขอเป็น JSON และต้องมีเฮดเดอร์ Content-Type: application/json รายการฟิลด์ทั้งหมดอยู่ในหน้าของ endpoint Chat Completions

คำตอบ

การเรียกที่ไม่มี stream จะคืนออบเจ็กต์ JSON หนึ่งรายการเมื่อคำตอบสมบูรณ์ ข้อความและตัวเลขด้านล่างเป็นตัวอย่าง

200 JSON
{
  "id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
  "object": "chat.completion",
  "created": 1791590400,
  "model": "shannon-3",
  "choices": [
    {
      "index": 0,
      "message": {
        "role": "assistant",
        "content": "Hello! What would you like to work on?",
        "reasoning_content": "A greeting. A short, friendly reply fits."
      },
      "finish_reason": "stop"
    }
  ],
  "usage": {
    "prompt_tokens": 1386,
    "completion_tokens": 74,
    "total_tokens": 1460
  }
}
ฟิลด์ ประเภท คำอธิบาย
id string chatcmpl- ตามด้วยอักขระเลขฐานสิบหก 32 ตัว
object string เป็น chat.completion เสมอ
created integer เวลาของคำตอบเป็นวินาทีแบบ Unix
model string id ที่เผยแพร่ของโมเดลที่ตอบ แม้คุณจะส่ง alias หรือการสะกดแบบอื่นมา
choices array มีหนึ่งรายการเสมอ โดย index เป็น 0
choices[0].message.role string เป็น assistant เสมอ
choices[0].message.content string | null คำตอบ อาจเป็น null เมื่อคำตอบมี tool_calls
choices[0].message.reasoning_content string | null การให้เหตุผลของโมเดลก่อนคำตอบ หรือ null เมื่อไม่มี
choices[0].message.tool_calls array มีเฉพาะเมื่อโมเดลเรียกหนึ่งใน tool ที่คุณประกาศ
choices[0].finish_reason string stop สำหรับคำตอบ tool_calls เมื่อโมเดลเรียก tool
usage.prompt_tokens integer tokens ที่โมเดลอ่านสำหรับคำตอบนี้ บน shannon-2-* และตระกูล Shannon 3 อาจมากกว่าข้อความที่คุณส่ง
usage.completion_tokens integer tokens ที่โมเดลเขียน
usage.total_tokens integer ผลรวม ค่าใช้จ่ายของโมเดล Shannon คำนวณจากตัวเลขนี้
  • usage เก็บจำนวน tokens ไม่ใช่จำนวนเงิน สิ่งที่การเรียกหักจากยอดคงเหลือของคุณแสดงแยกตามคำขอในหน้าคีย์และการใช้งาน วิธีคำนวณอยู่ในหน้าขีดจำกัดและยอดคงเหลือ ขีดจำกัดและยอดคงเหลือ
  • ทุกคำตอบ รวมทั้งข้อผิดพลาดและสตรีม มีเฮดเดอร์ x-request-id หากคำขอของคุณมีเฮดเดอร์ x-request-id ค่านั้นจะถูกส่งกลับ มิฉะนั้นค่าเป็นอักขระเลขฐานสิบหก 12 ตัว เก็บไว้ในล็อกของคุณ: ค่านี้ระบุคำขอนี้คำขอเดียว

การเรียกเดียวกันแบบสตรีม

ตั้ง stream เป็น true เพื่ออ่านคำตอบขณะที่กำลังเขียน ส่วนอื่นของคำขอเหมือนเดิมทุกอย่าง

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com/v1"
)

stream = client.chat.completions.create(
    model="shannon-3",
    messages=[
        {"role": "user", "content": "Hello, Shannon!"}
    ],
    max_tokens=1024,
    stream=True
)

for chunk in stream:
    if chunk.choices and chunk.choices[0].delta.content:
        print(chunk.choices[0].delta.content, end="", flush=True)

แต่ละเฟรมของสตรีมเป็นหนึ่งบรรทัดที่ขึ้นต้นด้วย data: และมีออบเจ็กต์ JSON หนึ่งเฟรม พิมพ์เป็นหลายบรรทัด:

หนึ่งเฟรม
{
  "id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
  "object": "chat.completion.chunk",
  "created": 1791590400,
  "model": "shannon-3",
  "choices": [
    {
      "index": 0,
      "delta": {
        "content": "Hello! "
      },
      "finish_reason": null
    }
  ]
}
เฟรม ตามลำดับ delta finish_reason
ขณะที่โมเดลให้เหตุผล ศูนย์เฟรมหรือมากกว่า {"reasoning_content": "…"} null
คำตอบ ทีละส่วน ศูนย์เฟรมหรือมากกว่า {"content": "…"} null
เฟรม JSON สุดท้าย มี usage ด้วย ไม่ต้องร้องขอ {} "stop"
จุดสิ้นสุดของสตรีม: บรรทัด data: [DONE]
  • คำตอบมีสถานะ 200 และ content-type: text/event-stream ทุกเฟรมเป็นบรรทัด data: <json> ตามด้วยบรรทัดว่าง
  • บรรทัด : ping จะมาทุก 15 วินาที เป็นคอมเมนต์ที่เปิดการเชื่อมต่อค้างไว้ ไคลเอนต์ SSE จะข้ามไป
  • ความล้มเหลวหลังจากสตรีมเปิดแล้วจะมาถึงเป็นเฟรม data: {"error": {…}} สถานะยังคงเป็น 200 ดังนั้นให้ตรวจเฟรมด้วย

สตรีมมิง

หากการเรียกล้มเหลว

ข้อผิดพลาดคือออบเจ็กต์ JSON ที่มี error ซึ่งเก็บ type และ message นี่คือคำตอบที่การเรียกครั้งแรกพบบ่อยที่สุด

สถานะ ประเภท ข้อความ ความหมาย
401 authentication_error Missing authentication ไม่มีคีย์ไปถึง API ให้ส่ง Authorization: Bearer ตามด้วยคีย์ของคุณ
401 authentication_error Invalid API key คีย์ไม่ใช่คีย์ปัจจุบันของบัญชีใด ให้คัดลอกใหม่จากหน้าคีย์และการใช้งาน
400 invalid_request_error unknown model: <id> model ไม่ใช่ id ที่เผยแพร่ ให้ใช้ id จากหน้าโมเดลและราคา
422 invalid_request_error Failed to deserialize the JSON body into the target type… ฟิลด์มีชนิด JSON ไม่ถูกต้อง หรือขาด messages
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan งบเอาต์พุตของคำขอไม่พอดีกับยอดคงเหลือของคุณ

การจัดการข้อผิดพลาด

ไปต่อที่ไหน