Langkau ke kandungan
Mula Pantas

Mula Pantas

Buat permintaan pertama: dapatkan kunci anda, hantar satu mesej dan baca balasannya. API bertutur dalam format OpenAI dan Anthropic, jadi SDK yang sudah anda gunakan berfungsi selepas anda menukar base URL dan kuncinya.

1. Dapatkan kunci anda

Setiap akaun mempunyai satu kunci API. Log masuk, buka Kunci & penggunaan dan salin kunci itu. Kunci berfungsi pada setiap endpoint dan setiap model. Kunci & penggunaan

2. Halakan klien anda ke API

Semua endpoint berada di bawah satu base URL. SDK OpenAI menerimanya dengan /v1 di hujung; SDK Anthropic menerimanya tanpa, kerana ia menambah /v1/messages sendiri.

Klien Base URL
SDK OpenAI dan klien yang serasi dengan OpenAI https://api.shannon-ai.com/v1
SDK Anthropic https://api.shannon-ai.com

Tiga endpoint menghasilkan teks. Ia mencapai model yang sama; pilih yang formatnya sudah digunakan oleh kod anda.

Endpoint Format
POST /v1/chat/completions OpenAI Chat Completions
POST /v1/messages Anthropic Messages
POST /v1/responses OpenAI Responses

3. Hantar permintaan pertama

Hantar satu mesej user kepada shannon-3 pada endpoint Chat Completions. Gantikan YOUR_API_KEY dengan kunci anda.

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)
Medan Jenis Lalai Penerangan
model string Id model yang menjawab. Id disenaraikan pada Model & harga.
messages array Perbualan setakat ini: objek dengan role dan content. Mesej user yang terakhir ialah prompt. Wajib.
max_tokens integer 4096 Bajet output permintaan, daripada 1 hingga 65,536. Permintaan menempah jumlah ini daripada baki anda dan dicaj untuk apa yang benar-benar digunakannya.
stream boolean false true menghantar jawapan sedikit demi sedikit semasa ia ditulis.

Badan permintaan ialah JSON dan memerlukan header Content-Type: application/json. Senarai penuh medan terdapat pada halaman endpoint. Chat Completions

Balasan

Panggilan tanpa stream memulangkan satu objek JSON apabila jawapan lengkap. Teks dan nombor di bawah ialah contoh.

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
  }
}
Medan Jenis Penerangan
id string chatcmpl- diikuti 32 aksara heksadesimal.
object string Sentiasa chat.completion.
created integer Masa balasan dalam saat Unix.
model string Id model yang menjawab seperti yang diterbitkan, juga apabila anda menghantar alias atau ejaan lain.
choices array Sentiasa satu entri, dengan index 0.
choices[0].message.role string Sentiasa assistant.
choices[0].message.content string | null Jawapannya. Ia boleh null apabila balasan membawa tool_calls.
choices[0].message.reasoning_content string | null Penaakulan model sebelum jawapannya, atau null apabila tiada.
choices[0].message.tool_calls array Wujud hanya apabila model memanggil salah satu alat yang anda isytiharkan.
choices[0].finish_reason string stop untuk jawapan, tool_calls apabila model memanggil alat.
usage.prompt_tokens integer Token yang dibaca oleh model untuk jawapan ini. Pada shannon-2-* dan keluarga Shannon 3, ini boleh lebih banyak daripada teks yang anda hantar.
usage.completion_tokens integer Token yang ditulis oleh model.
usage.total_tokens integer Jumlah. Caj model Shannon dikira daripada nombor ini.
  • usage memegang bilangan token, bukan wang. Apa yang diambil oleh panggilan daripada baki anda ditunjukkan bagi setiap permintaan pada Kunci & penggunaan; cara ia dikira terdapat pada Had dan baki. Had dan baki
  • Setiap balasan, juga ralat dan stream, mempunyai header x-request-id. Jika permintaan anda membawa header x-request-id, nilainya dikembalikan; jika tidak, nilainya 12 aksara heksadesimal. Simpan dalam log anda: ia menamakan satu permintaan ini.

Panggilan yang sama sebagai stream

Tetapkan stream kepada true untuk membaca jawapan semasa ia ditulis. Segala-galanya dalam permintaan kekal sama.

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)

Setiap bingkai stream ialah satu baris yang bermula dengan data: dan memegang objek JSON. Satu bingkai, dicetak pada beberapa baris:

Satu bingkai
{
  "id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
  "object": "chat.completion.chunk",
  "created": 1791590400,
  "model": "shannon-3",
  "choices": [
    {
      "index": 0,
      "delta": {
        "content": "Hello! "
      },
      "finish_reason": null
    }
  ]
}
Bingkai, mengikut urutan delta finish_reason
Semasa model bernalar. Sifar atau lebih bingkai. {"reasoning_content": "…"} null
Jawapan, sedikit demi sedikit. Sifar atau lebih bingkai. {"content": "…"} null
Bingkai JSON yang terakhir. Ia turut membawa usage; anda tidak perlu memintanya. {} "stop"
Penghujung stream: baris data: [DONE].
  • Balasan mempunyai status 200 dan content-type: text/event-stream. Setiap bingkai ialah baris data: <json> diikuti baris kosong.
  • Baris : ping tiba setiap 15 saat. Ia ialah komen yang mengekalkan sambungan terbuka; klien SSE melangkaunya.
  • Kegagalan selepas stream dibuka tiba sebagai bingkai data: {"error": {…}}. Statusnya kekal 200, jadi semak bingkai.

Penstriman

Jika panggilan gagal

Ralat ialah objek JSON dengan error yang memegang type dan message. Ini ialah balasan yang paling kerap ditemui oleh panggilan pertama.

Status Jenis Mesej Maksudnya
401 authentication_error Missing authentication Tiada kunci sampai kepada API. Hantar Authorization: Bearer diikuti kunci anda.
401 authentication_error Invalid API key Kunci bukan kunci semasa sesebuah akaun. Salin semula daripada Kunci & penggunaan.
400 invalid_request_error unknown model: <id> model bukan id yang diterbitkan. Gunakan id daripada Model & harga.
422 invalid_request_error Failed to deserialize the JSON body into the target type… Medan mempunyai jenis JSON yang salah, atau messages tiada.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan Bajet output permintaan tidak muat dalam baki anda.

Pengendalian Ralat

Ke mana seterusnya

  • Model & harga — Pilih model: id, tetingkap konteks dan harga.
  • Chat Completions — Setiap medan permintaan, medan balasan dan peristiwa stream bagi endpoint yang anda panggil.
  • Penstriman — Bingkai stream, baris keep-alive dan ralat di dalam stream.
  • Panggilan Fungsi — Biarkan model memanggil fungsi anda.
  • Had dan baki — Apa yang ditempah dan dikos oleh permintaan, dan berapa banyak permintaan yang boleh anda hantar.
  • Taman Permainan API — Cuba permintaan dalam pelayar dengan kunci anda.