Sürətli başlanğıc
İlk sorğunu edin: açarınızı alın, bir mesaj göndərin və cavabı oxuyun. API OpenAI və Anthropic formatlarında danışır, ona görə artıq istifadə etdiyiniz SDK əsas URL-i və açarı dəyişdikdən sonra işləyir.
1. Açarınızı alın
Hər hesabın bir API açarı var. Daxil olun, Keys & usage səhifəsini açın və kopyalayın. Açar hər endpoint-də və hər modeldə işləyir. Keys & usage
2. Klientinizi API-yə yönəldin
Bütün endpoint-lər bir əsas URL altındadır. OpenAI SDK onu sonunda /v1 ilə qəbul edir; Anthropic SDK onsuz qəbul edir, çünki /v1/messages-i özü əlavə edir.
| Klient | Əsas URL |
|---|---|
| OpenAI SDK-ları və OpenAI ilə uyğun klientlər | https://api.shannon-ai.com/v1 |
| Anthropic SDK-ları | https://api.shannon-ai.com |
Mətni üç endpoint yaradır. Onlar eyni modellərə çıxış verir; kodunuzun artıq istifadə etdiyi formatı seçin.
| Endpoint | Format |
|---|---|
POST /v1/chat/completions | OpenAI Chat Completions |
POST /v1/messages | Anthropic Messages |
POST /v1/responses | OpenAI Responses |
3. İlk sorğunu göndərin
Chat Completions endpoint-ində shannon-3-ə bir user mesajı göndərin. YOUR_API_KEY-i öz açarınızla əvəz edin.
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
}' | Sahə | Tip | Defolt | Təsvir |
|---|---|---|---|
model | string | Cavab verən modelin id-si. İd-lər Models & pricing səhifəsində siyahıya alınıb. | |
messages | array | Hələlik söhbət: role və content olan obyektlər. Son user mesajı prompt-dur. Məcburidir. | |
max_tokens | integer | 4096 | Sorğunun output büdcəsi, 1-dən 65,536-ya qədər. Sorğu bu miqdarı balansınızdan rezerv edir və real istifadə etdiyi üçün hesablanır. |
stream | boolean | false | true cavabı yazıldıqca hissə-hissə göndərir. |
Sorğu gövdəsi JSON-dur və Content-Type: application/json başlığı tələb edir. Sahələrin tam siyahısı endpoint səhifəsindədir. Chat Completions
Cavab
stream-siz çağırış cavab tamamlandıqda bir JSON obyekti qaytarır. Aşağıdakı mətnlər və ədədlər nümunədir.
{
"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
}
} | Sahə | Tip | Təsvir |
|---|---|---|
id | string | chatcmpl- və ardınca 32 hexadecimal simvol. |
object | string | Həmişə chat.completion. |
created | integer | Cavabın vaxtı Unix saniyələri ilə. |
model | string | Cavab verən modelin dərc edilmiş id-si, alias və ya başqa yazılış göndərdiyiniz zaman da. |
choices | array | Həmişə bir element, index 0. |
choices[0].message.role | string | Həmişə assistant. |
choices[0].message.content | string | null | Cavab. Cavab tool_calls daşıdıqda null ola bilər. |
choices[0].message.reasoning_content | string | null | Modelin cavabından əvvəlki reasoning-i, yoxdursa null. |
choices[0].message.tool_calls | array | Yalnız model elan etdiyiniz alətlərdən birini çağırdıqda olur. |
choices[0].finish_reason | string | Cavab üçün stop, model alət çağırdıqda tool_calls. |
usage.prompt_tokens | integer | Modelin bu cavab üçün oxuduğu tokenlər. shannon-2-* və Shannon 3 ailəsində bu, göndərdiyiniz mətndən çox ola bilər. |
usage.completion_tokens | integer | Modelin yazdığı tokenlər. |
usage.total_tokens | integer | Cəmi. Shannon modelinin ödənişi bu ədəddən hesablanır. |
-
usagetoken saylarını saxlayır, pulu yox. Çağırışın balansınızdan nə götürdüyü Keys & usage səhifəsində hər sorğu üzrə göstərilir; necə hesablandığı Limitlər və balans səhifəsindədir. Limitlər və balans - Hər cavabda, xəta və axında da,
x-request-idbaşlığı var. Sorğunuzx-request-idbaşlığı daşıyırsa, onun dəyəri geri qayıdır; əks halda dəyər 12 hexadecimal simvoldur. Onu loglarınızda saxlayın: o, məhz bu sorğunu adlandırır.
Eyni çağırış axın kimi
Cavabı yazıldıqca oxumaq üçün stream-i true təyin edin. Sorğuda qalan hər şey eyni qalır.
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
}' Axının hər frame-i data: ilə başlayan və JSON obyekti saxlayan bir sətirdir. Bir neçə sətirdə çap edilmiş bir frame:
{
"id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
"object": "chat.completion.chunk",
"created": 1791590400,
"model": "shannon-3",
"choices": [
{
"index": 0,
"delta": {
"content": "Hello! "
},
"finish_reason": null
}
]
} | Frame-lər, ardıcıllıqla | delta | finish_reason |
|---|---|---|
| Model reasoning edərkən. Sıfır və ya daha çox frame. | {"reasoning_content": "…"} | null |
| Cavab, hissə-hissə. Sıfır və ya daha çox frame. | {"content": "…"} | null |
Son JSON frame-i. O, həmçinin usage daşıyır; onu istəməyə ehtiyac yoxdur. | {} | "stop" |
Axının sonu: data: [DONE] sətri. |
- Cavabın statusu
200,content-type: text/event-stream-dir. Hər framedata: <json>sətri və ardınca boş sətirdir. : pingsətri hər 15 saniyədən bir gəlir. Bu, bağlantını açıq saxlayan şərhdir; SSE klientləri onu keçir.- Axın açıldıqdan sonrakı uğursuzluq
data: {"error": {…}}frame-i kimi gəlir. Status200olaraq qalır, ona görə frame-ləri yoxlayın.
Çağırış uğursuz olduqda
Xəta type və message saxlayan error olan JSON obyektidir. Bunlar ilk çağırışın ən çox rastlaşdığı cavablardır.
| Status | Tip | Mesaj | Mənası |
|---|---|---|---|
401 | authentication_error | Missing authentication | API-yə heç bir açar çatmadı. Authorization: Bearer və ardınca açarınızı göndərin. |
401 | authentication_error | Invalid API key | Açar hesabın cari açarı deyil. Onu Keys & usage səhifəsindən yenidən kopyalayın. |
400 | invalid_request_error | unknown model: <id> | model dərc edilmiş id deyil. Models & pricing səhifəsindən id istifadə edin. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type… | Sahənin JSON tipi yanlışdır və ya messages yoxdur. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | Sorğunun output büdcəsi balansınıza sığmır. |
Sonra hara getmək
- Modellər və qiymətlər — Model seçin: id-lər, kontekst pəncərələri və qiymətlər.
- Chat Completions — Çağırdığınız endpoint-in hər sorğu sahəsi, cavab sahəsi və axın hadisəsi.
- Axın — Axının frame-ləri, keep-alive sətirləri və axın daxilindəki xətalar.
- Funksiya çağırışı — Modelin funksiyalarınızı çağırmasına icazə verin.
- Limitlər və balans — Sorğunun nəyi rezerv etdiyi və nəyə başa gəldiyi, neçə sorğu göndərə biləcəyiniz.
- API oyun meydanı — Sorğuları brauzerdə açarınızla sınayın.