Брз почеток
Направете го првото барање: земете го вашиот клуч, испратете една порака и прочитајте го одговорот. API-то ги зборува форматите на OpenAI и Anthropic, па SDK-то што веќе го користите работи откако ќе му го смените основниот URL и клучот.
1. Земете го вашиот клуч
Секоја сметка има еден API клуч. Најавете се, отворете Клучеви и употреба и копирајте го. Клучот работи на секој ендпоинт и секој модел. Клучеви и употреба
2. Насочете го клиентот кон API-то
Сите ендпоинти се под еден основен URL. SDK на OpenAI го прима со /v1 на крајот; SDK на Anthropic го прима без него, бидејќи сам додава /v1/messages.
| Клиент | Основен URL |
|---|---|
| SDK-а на OpenAI и клиенти компатибилни со OpenAI | https://api.shannon-ai.com/v1 |
| SDK-а на Anthropic | https://api.shannon-ai.com |
Три ендпоинти создаваат текст. Стигнуваат до истите модели; изберете го оној чиј формат го користи вашиот код.
| Ендпоинт | Формат |
|---|---|
POST /v1/chat/completions | OpenAI Chat Completions |
POST /v1/messages | Anthropic Messages |
POST /v1/responses | OpenAI Responses |
3. Испратете го првото барање
Испратете една порака user до shannon-3 на ендпоинтот 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) 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 | Идот на моделот што одговара. Идовите се наведени на Модели и цени. | |
messages | array | Разговорот досега: објекти со role и content. Последната порака user е prompt-от. Задолжително. | |
max_tokens | integer | 4096 | Излезниот буџет на барањето, од 1 до 65,536. Барањето го резервира овој износ од вашето салдо и се наплатува за она што навистина го искористило. |
stream | boolean | false | true го испраќа одговорот парче по парче додека се пишува. |
Телото на барањето е JSON и бара header Content-Type: application/json. Целосната листа на полиња е на страницата на ендпоинтот. 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 | Објавениот ид на моделот што одговорил, и кога сте испратиле алијас или друг запис. |
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 | Присутно само кога моделот повикува една од алатките што сте ги декларирале. |
choices[0].finish_reason | string | stop за одговор, tool_calls кога моделот повикува алатка. |
usage.prompt_tokens | integer | Токените што моделот ги прочитал за овој одговор. На shannon-2-* и фамилијата Shannon 3 ова може да биде повеќе од текстот што сте го испратиле. |
usage.completion_tokens | integer | Токените што ги напишал моделот. |
usage.total_tokens | integer | Вкупниот збир. Наплатата на модел Shannon се пресметува од овој број. |
-
usageсодржи бројки на токени, а не пари. Што повикот зел од вашето салдо се прикажува по барање на Клучеви и употреба; како се пресметува е на Ограничувања и салдо. Ограничувања и салдо - Секој одговор, вклучително грешка и streaming, го има header-от
x-request-id. Ако вашето барање носи headerx-request-id, неговата вредност се враќа; инаку вредноста е 12 хексадецимални знаци. Чувајте го во вашите логови: го именува токму ова барање.
Истиот повик како streaming
Поставете 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
}' Секој фрејм на streaming е еден ред што започнува со 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. Нула или повеќе фрејмови. | {"reasoning_content": "…"} | null |
| Одговорот, парче по парче. Нула или повеќе фрејмови. | {"content": "…"} | null |
Последниот JSON фрејм. Носи и usage; не мора да го барате. | {} | "stop" |
Крајот на streaming-от: редот data: [DONE]. |
- Одговорот има статус
200иcontent-type: text/event-stream. Секој фрејм е редdata: <json>проследен со празен ред. - На секои 15 секунди пристигнува ред
: ping. Тоа е коментар што ја држи врската отворена; SSE клиентите го прескокнуваат. - Неуспех откако streaming-от е отворен пристигнува како фрејм
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 не е објавен ид. Користете ид од Модели и цени. |
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 | Излезниот буџет на барањето не собира во вашето салдо. |
Каде да продолжите
- Модели и цени — Изберете модел: идови, контекстни прозорци и цени.
- Chat Completions — Секое поле на барање, поле на одговор и настан на streaming на ендпоинтот што го повикавте.
- Стриминг — Фрејмовите на streaming, keep-alive редови и грешки во streaming.
- Повик на функции — Дозволете му на моделот да ги повикува вашите функции.
- Ограничувања и салдо — Што резервира и чини едно барање и колку барања смеете да испратите.
- API Playground — Пробајте барања во прелистувачот со вашиот клуч.