Түргэн эхлэх
Эхний хүсэлтээ илгээнэ үү: түлхүүрээ аваад, нэг мессеж илгээж, хариуг уншина. API OpenAI ба Anthropic форматаар ярьдаг тул өөрийн ашигладаг SDK үндсэн URL, түлхүүрээ солисны дараа ажиллана.
1. Түлхүүрээ авах
Бүртгэл бүр нэг API түлхүүртэй. Нэвтэрч, Keys & usage-г нээгээд хуулна уу. Түлхүүр endpoint бүр, загвар бүр дээр ажиллана. Түлхүүр ба хэрэглээ
2. Клиентээ API руу чиглүүлэх
Бүх endpoint нэг үндсэн URL дор байна. OpenAI SDK үүнийг төгсгөлд нь /v1-тэй авна; Anthropic SDK /v1/messages-ийг өөрөө нэмдэг тул түүнгүйгээр авна.
| Клиент | Үндсэн URL |
|---|---|
| OpenAI SDK-ууд ба OpenAI-тай нийцтэй клиентүүд | https://api.shannon-ai.com/v1 |
| Anthropic SDK-ууд | https://api.shannon-ai.com |
Гурван endpoint текст үүсгэнэ. Тэд ижил загваруудад хүрнэ; таны код аль форматыг аль хэдийн ашигладаг бол түүнийг сонгоно уу.
| Endpoint | Формат |
|---|---|
POST /v1/chat/completions | OpenAI Chat Completions |
POST /v1/messages | Anthropic Messages |
POST /v1/responses | OpenAI Responses |
3. Эхний хүсэлтээ илгээх
Chat Completions endpoint дээр shannon-3 руу нэг user мессеж илгээнэ. 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) 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
}' | Талбар | Төрөл | Үндсэн утга | Тайлбар |
|---|---|---|---|
model | string | Хариулах загварын id. Id-г Models & pricing дээр жагсаасан. | |
messages | array | Одоогийн харилцан яриа: role ба content-той объектууд. Сүүлийн user мессеж нь prompt. Заавал. | |
max_tokens | integer | 4096 | Хүсэлтийн гаралтын төсөв, 1-ээс 65,536. Хүсэлт энэ хэмжээг үлдэгдлээс нөөцөлж, бодитоор ашигласнаа төлнө. |
stream | boolean | false | true нь хариултыг бичигдэх тусам хэсэг хэсгээр илгээнэ. |
Хүсэлтийн body нь JSON бөгөөд Content-Type: application/json header шаарддаг. Талбаруудын бүрэн жагсаалт endpoint-ийн хуудсанд байна. Chat Completions
Хариу
stream-гүй дуудлага хариулт бүрэн болоход нэг 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 | Хариулт. Хариу tool_calls агуулсан үед null байж болно. |
choices[0].message.reasoning_content | string | null | Загварын хариултаасаа өмнөх reasoning, байхгүй бол null. |
choices[0].message.tool_calls | array | Загвар таны зарласан tool-ийн нэгийг дуудсан үед л байна. |
choices[0].finish_reason | string | Хариултад stop, загвар tool дуудах үед tool_calls. |
usage.prompt_tokens | integer | Загварын энэ хариултад уншсан токен. shannon-2-* болон Shannon 3 гэр бүл дээр энэ нь таны илгээсэн текстээс их байж болно. |
usage.completion_tokens | integer | Загварын бичсэн токен. |
usage.total_tokens | integer | Нийт. Shannon загварын тооцоо энэ тооноос бодогдоно. |
-
usageнь мөнгө бус токены тоог агуулна. Дуудлага таны үлдэгдлээс хэчнээн авсныг Keys & usage дээр хүсэлт бүрээр харуулна; хэрхэн бодохыг Хязгаар ба үлдэгдэл хэсэгт тайлбарласан. Хязгаар ба үлдэгдэл - Хариу бүр, алдаа ба stream ч гэсэн
x-request-idheader-тэй. Таны хүсэлтx-request-idheader агуулсан бол түүний утга буцаж ирнэ; үгүй бол 12 арван зургаатын тэмдэгт. Үүнийг лог дотроо хадгална уу: энэ нэг хүсэлтийг нэрлэнэ.
Ижил дуудлага stream хэлбэрээр
Хариултыг бичигдэж байх үед нь унших бол 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) 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
}' Stream-ийн frame бүр data:-аар эхэлсэн, JSON объект агуулсан нэг мөр. Нэг frame, олон мөрөөр хэвлэсэн:
{
"id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
"object": "chat.completion.chunk",
"created": 1791590400,
"model": "shannon-3",
"choices": [
{
"index": 0,
"delta": {
"content": "Hello! "
},
"finish_reason": null
}
]
} | Frame-үүд, дарааллаар | delta | finish_reason |
|---|---|---|
| Загвар reasoning хийж байх үед. Тэг буюу түүнээс олон frame. | {"reasoning_content": "…"} | null |
| Хариулт, хэсэг хэсгээрээ. Тэг буюу түүнээс олон frame. | {"content": "…"} | null |
Сүүлийн JSON frame. Мөн usage агуулна; үүнийг тусад нь хүсэх шаардлагагүй. | {} | "stop" |
Stream-ийн төгсгөл: data: [DONE] мөр. |
- Хариу
200статус баcontent-type: text/event-stream-тэй. Frame бүрdata: <json>мөр бөгөөд араас нь хоосон мөр орно. : pingмөр 15 секунд тутам ирнэ. Энэ нь холболтыг нээлттэй байлгадаг тайлбар мөр; SSE клиентүүд алгасна.- Stream нээгдсэний дараах алдаа
data: {"error": {…}}frame хэлбэрээр ирнэ. Статус200хэвээр байх тул frame-үүдийг шалгана уу.
Дуудлага амжилтгүй бол
Алдаа нь type ба message агуулсан error-тэй JSON объект. Эдгээр нь эхний дуудлагад хамгийн их тохиолддог хариунууд.
| Төлөв | Төрөл | Мессеж | Юу гэсэн үг |
|---|---|---|---|
401 | authentication_error | Missing authentication | API-д түлхүүр хүрээгүй. Authorization: Bearer ба түүний дараа түлхүүрээ илгээнэ үү. |
401 | authentication_error | Invalid API key | Түлхүүр нь бүртгэлийн одоогийн түлхүүр биш. Keys & usage-аас дахин хуулна уу. |
400 | invalid_request_error | unknown model: <id> | model нь нийтэлсэн id биш. Models & pricing дэх 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 | Хүсэлтийн гаралтын төсөв таны үлдэгдэлд багтахгүй байна. |
Цааш хаашаа явах
- Загвар ба үнэ — Загвар сонгох: id, контекст цонх, үнэ.
- Chat Completions — Таны дуудсан endpoint-ийн хүсэлтийн талбар, хариуны талбар, stream event бүр.
- Дамжуулалт — Stream-ийн frame, keep-alive мөр, stream доторх алдаа.
- Функц дуудлага — Загварт өөрийн функцүүдийг дуудуулах.
- Хязгаар ба үлдэгдэл — Хүсэлт юу нөөцөлж, хичнээн зардалтай, хэдэн хүсэлт илгээж болох.
- API Playground — Хүсэлтүүдийг хөтөч дээр өөрийн түлхүүрээр туршина.