Rychlý start
Pošlete první požadavek: získejte klíč, pošlete jednu zprávu a přečtěte odpověď. API mluví formáty OpenAI a Anthropic, takže SDK, které už používáte, funguje po změně základní URL a klíče.
1. Získejte klíč
Každý účet má jeden klíč API. Přihlaste se, otevřete Klíče a využití a zkopírujte jej. Klíč funguje na každém endpointu a u každého modelu. Klíče a využití
2. Nasměrujte klienta na API
Všechny endpointy leží pod jednou základní URL. SDK OpenAI ji přijímá s /v1 na konci; SDK Anthropic bez něj, protože /v1/messages přidává samo.
| Klient | Základní URL |
|---|---|
| SDK OpenAI a klienti kompatibilní s OpenAI | https://api.shannon-ai.com/v1 |
| SDK Anthropic | https://api.shannon-ai.com |
Text vytvářejí tři endpointy. Dosáhnou na stejné modely; zvolte ten, jehož formát už váš kód používá.
| Endpoint | Formát |
|---|---|
POST /v1/chat/completions | OpenAI Chat Completions |
POST /v1/messages | Anthropic Messages |
POST /v1/responses | OpenAI Responses |
3. Pošlete první požadavek
Pošlete jednu zprávu user modelu shannon-3 na endpoint Chat Completions. YOUR_API_KEY nahraďte svým klíčem.
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
}' | Pole | Typ | Výchozí | Popis |
|---|---|---|---|
model | string | Id modelu, který odpoví. Id jsou vypsána na stránce Modely a ceny. | |
messages | array | Dosavadní konverzace: objekty s role a content. Poslední zpráva user je prompt. Povinné. | |
max_tokens | integer | 4096 | Výstupní rozpočet požadavku, od 1 do 65,536. Požadavek si tuto částku rezervuje ze zůstatku a účtuje se mu to, co skutečně použil. |
stream | boolean | false | true posílá odpověď po kouscích, jak se píše. |
Tělo požadavku je JSON a vyžaduje hlavičku Content-Type: application/json. Úplný seznam polí je na stránce endpointu. Chat Completions
Odpověď
Volání bez stream vrátí jeden objekt JSON, když je odpověď kompletní. Texty a čísla níže jsou příklady.
{
"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
}
} | Pole | Typ | Popis |
|---|---|---|
id | string | chatcmpl- následované 32 hexadecimálními znaky. |
object | string | Vždy chat.completion. |
created | integer | Čas odpovědi v sekundách Unixu. |
model | string | Zveřejněné id modelu, který odpověděl, i když jste poslali alias nebo jiný zápis. |
choices | array | Vždy jedna položka, s index 0. |
choices[0].message.role | string | Vždy assistant. |
choices[0].message.content | string | null | Odpověď. Může být null, když odpověď nese tool_calls. |
choices[0].message.reasoning_content | string | null | Uvažování modelu před odpovědí, nebo null, když žádné není. |
choices[0].message.tool_calls | array | Přítomno, jen když model volá některý z nástrojů, které jste deklarovali. |
choices[0].finish_reason | string | stop pro odpověď, tool_calls, když model volá nástroj. |
usage.prompt_tokens | integer | Tokeny, které model pro tuto odpověď přečetl. U shannon-2-* a rodiny Shannon 3 to může být víc než text, který jste poslali. |
usage.completion_tokens | integer | Tokeny, které model napsal. |
usage.total_tokens | integer | Součet. Poplatek modelu Shannon se počítá z tohoto čísla. |
-
usageobsahuje počty tokenů, ne peníze. Co volání ze zůstatku vzalo, je u každého požadavku vidět na stránce Klíče a využití; jak se to počítá, je na stránce Limity a zůstatek. Limity a zůstatek - Každá odpověď, také chybová a stream, má hlavičku
x-request-id. Pokud váš požadavek nese hlavičkux-request-id, vrátí se její hodnota; jinak je hodnotou 12 hexadecimálních znaků. Uchovejte ji ve svých logech: pojmenovává tento jeden požadavek.
Totéž volání jako stream
Nastavte stream na true a odpověď čtěte, zatímco se píše. Vše ostatní v požadavku zůstává stejné.
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
}' Každý rámec streamu je jeden řádek, který začíná data: a obsahuje objekt JSON. Jeden rámec, vypsaný na několika řádcích:
{
"id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
"object": "chat.completion.chunk",
"created": 1791590400,
"model": "shannon-3",
"choices": [
{
"index": 0,
"delta": {
"content": "Hello! "
},
"finish_reason": null
}
]
} | Rámce, v pořadí | delta | finish_reason |
|---|---|---|
| Zatímco model uvažuje. Nula nebo více rámců. | {"reasoning_content": "…"} | null |
| Odpověď, po kouscích. Nula nebo více rámců. | {"content": "…"} | null |
Poslední rámec JSON. Nese také usage; nemusíte o něj žádat. | {} | "stop" |
Konec streamu: řádek data: [DONE]. |
- Odpověď má status
200acontent-type: text/event-stream. Každý rámec je řádekdata: <json>následovaný prázdným řádkem. - Řádek
: pingpřichází každých 15 sekund. Je to komentář, který udržuje spojení otevřené; klienti SSE jej přeskakují. - Selhání po otevření streamu přichází jako rámec
data: {"error": {…}}. Status zůstává200, proto kontrolujte rámce.
Když volání selže
Chyba je objekt JSON s polem error, které obsahuje type a message. Toto jsou odpovědi, na které první volání nejčastěji narazí.
| Stav | Typ | Zpráva | Co to znamená |
|---|---|---|---|
401 | authentication_error | Missing authentication | Na API nedorazil žádný klíč. Pošlete Authorization: Bearer a za ním svůj klíč. |
401 | authentication_error | Invalid API key | Klíč není aktuálním klíčem žádného účtu. Zkopírujte jej znovu ze stránky Klíče a využití. |
400 | invalid_request_error | unknown model: <id> | model není zveřejněné id. Použijte id ze stránky Modely a ceny. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type… | Pole má špatný typ JSON, nebo chybí messages. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | Výstupní rozpočet požadavku se nevejde do vašeho zůstatku. |
Kam dál
- Modely a ceny — Vyberte model: id, kontextová okna a ceny.
- Chat Completions — Každé pole požadavku, pole odpovědi a událost streamu endpointu, který jste volali.
- Streamování — Rámce streamu, keep-alive řádky a chyby uvnitř streamu.
- Volání funkcí — Nechte model volat vaše funkce.
- Limity a zůstatek — Co požadavek rezervuje a kolik stojí a kolik požadavků smíte poslat.
- Playground — Vyzkoušejte požadavky v prohlížeči se svým klíčem.