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) import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'YOUR_API_KEY',
baseURL: 'https://api.shannon-ai.com/v1'
});
const response = await client.chat.completions.create({
model: 'shannon-3',
messages: [
{ role: 'user', content: 'Hello, Shannon!' }
],
max_tokens: 1024
});
console.log(response.choices[0].message.content); package main
import (
"context"
"fmt"
openai "github.com/sashabaranov/go-openai"
)
func main() {
config := openai.DefaultConfig("YOUR_API_KEY")
config.BaseURL = "https://api.shannon-ai.com/v1"
client := openai.NewClientWithConfig(config)
resp, err := client.CreateChatCompletion(
context.Background(),
openai.ChatCompletionRequest{
Model: "shannon-3",
Messages: []openai.ChatCompletionMessage{
{Role: "user", Content: "Hello, Shannon!"},
},
MaxTokens: 1024,
},
)
if err != nil {
panic(err)
}
fmt.Println(resp.Choices[0].Message.Content)
} curl -X POST "https://api.shannon-ai.com/v1/chat/completions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"messages": [
{"role": "user", "content": "Hello, Shannon!"}
],
"max_tokens": 1024
}' | 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.
{
"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. |
-
usagememegang 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 headerx-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) import OpenAI from 'openai';
const client = new OpenAI({
apiKey: 'YOUR_API_KEY',
baseURL: 'https://api.shannon-ai.com/v1'
});
const stream = await client.chat.completions.create({
model: 'shannon-3',
messages: [
{ role: 'user', content: 'Hello, Shannon!' }
],
max_tokens: 1024,
stream: true
});
for await (const chunk of stream) {
process.stdout.write(chunk.choices[0]?.delta?.content ?? '');
} curl -N -X POST "https://api.shannon-ai.com/v1/chat/completions" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "shannon-3",
"messages": [
{"role": "user", "content": "Hello, Shannon!"}
],
"max_tokens": 1024,
"stream": true
}' Setiap bingkai stream ialah satu baris yang bermula dengan data: dan memegang objek JSON. Satu bingkai, dicetak pada beberapa baris:
{
"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
200dancontent-type: text/event-stream. Setiap bingkai ialah barisdata: <json>diikuti baris kosong. - Baris
: pingtiba setiap 15 saat. Ia ialah komen yang mengekalkan sambungan terbuka; klien SSE melangkaunya. - Kegagalan selepas stream dibuka tiba sebagai bingkai
data: {"error": {…}}. Statusnya kekal200, jadi semak bingkai.
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. |
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.