Brzi početak
Pošaljite prvi zahtjev: uzmite svoj ključ, pošaljite jednu poruku i pročitajte odgovor. API govori OpenAI i Anthropic formate, pa SDK koji već koristite radi nakon što promijenite njegov base URL i ključ.
1. Uzmite svoj ključ
Svaki račun ima jedan API ključ. Prijavite se, otvorite Ključevi i upotreba i kopirajte ga. Ključ radi na svakom endpointu i svakom modelu. Ključevi i upotreba
2. Usmjerite klijent na API
Svi endpointi nalaze se pod jednim base URL-om. OpenAI SDK ga prima sa /v1 na kraju; Anthropic SDK ga prima bez toga, jer sam dodaje /v1/messages.
| Klijent | Base URL |
|---|---|
| OpenAI SDK-ovi i klijenti kompatibilni s OpenAI-jem | https://api.shannon-ai.com/v1 |
| Anthropic SDK-ovi | https://api.shannon-ai.com |
Tri endpointa proizvode tekst. Dosežu iste modele; odaberite onaj čiji format vaš kod već koristi.
| Endpoint | Format |
|---|---|
POST /v1/chat/completions | OpenAI Chat Completions |
POST /v1/messages | Anthropic Messages |
POST /v1/responses | OpenAI Responses |
3. Pošaljite prvi zahtjev
Pošaljite jednu poruku user na shannon-3 na endpointu Chat Completions. Zamijenite YOUR_API_KEY svojim ključ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
}' | Polje | Tip | Zadano | Opis |
|---|---|---|---|
model | string | Id modela koji odgovara. Id-ovi su navedeni na stranici Modeli i cijene. | |
messages | array | Dosadašnji razgovor: objekti s role i content. Zadnja poruka user je prompt. Obavezno. | |
max_tokens | integer | 4096 | Izlazni proračun zahtjeva, od 1 do 65,536. Zahtjev rezervira taj iznos sa vašeg stanja i naplaćuje se za ono što je stvarno iskoristio. |
stream | boolean | false | true šalje odgovor dio po dio dok se piše. |
Tijelo zahtjeva je JSON i treba zaglavlje Content-Type: application/json. Potpuni popis polja nalazi se na stranici endpointa. Chat Completions
Odgovor
Poziv bez stream vraća jedan JSON objekt kada je odgovor potpun. Tekstovi i brojevi u nastavku su primjeri.
{
"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
}
} | Polje | Tip | Opis |
|---|---|---|
id | string | chatcmpl- iza kojeg slijedi 32 heksadecimalna znaka. |
object | string | Uvijek chat.completion. |
created | integer | Vrijeme odgovora u Unix sekundama. |
model | string | Objavljeni id modela koji je odgovorio, i kada ste poslali alias ili drugi zapis. |
choices | array | Uvijek jedan unos, s index 0. |
choices[0].message.role | string | Uvijek assistant. |
choices[0].message.content | string | null | Odgovor. Može biti null kada odgovor nosi tool_calls. |
choices[0].message.reasoning_content | string | null | Razmišljanje modela prije odgovora ili null kada ga nema. |
choices[0].message.tool_calls | array | Prisutno samo kada model pozove jedan od alata koje ste deklarirali. |
choices[0].finish_reason | string | stop za odgovor, tool_calls kada model poziva alat. |
usage.prompt_tokens | integer | Tokeni koje je model pročitao za ovaj odgovor. Na shannon-2-* i obitelji Shannon 3 to može biti više od teksta koji ste poslali. |
usage.completion_tokens | integer | Tokeni koje je model napisao. |
usage.total_tokens | integer | Zbroj. Naplata Shannon modela izračunava se iz ovog broja. |
-
usagesadrži brojeve tokena, a ne novac. Što je poziv uzeo s vašeg stanja prikazuje se po zahtjevu na Ključevi i upotreba; kako se izračunava nalazi se na Ograničenja i stanje. Ograničenja i stanje - Svaki odgovor, i greška i stream, ima zaglavlje
x-request-id. Ako vaš zahtjev nosi zaglavljex-request-id, vraća se njegova vrijednost; inače je vrijednost 12 heksadecimalnih znakova. Čuvajte ga u svojim zapisnicima: imenuje upravo ovaj zahtjev.
Isti poziv kao stream
Postavite stream na true da čitate odgovor dok se piše. Sve ostalo u zahtjevu ostaje isto.
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
}' Svaki okvir streama je jedan redak koji počinje s data: i sadrži JSON objekt. Jedan okvir, ispisan u više redaka:
{
"id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
"object": "chat.completion.chunk",
"created": 1791590400,
"model": "shannon-3",
"choices": [
{
"index": 0,
"delta": {
"content": "Hello! "
},
"finish_reason": null
}
]
} | Okviri, redom | delta | finish_reason |
|---|---|---|
| Dok model razmišlja. Nula ili više okvira. | {"reasoning_content": "…"} | null |
| Odgovor, dio po dio. Nula ili više okvira. | {"content": "…"} | null |
Zadnji JSON okvir. Nosi i usage; ne morate ga tražiti. | {} | "stop" |
Kraj streama: redak data: [DONE]. |
- Odgovor ima status
200icontent-type: text/event-stream. Svaki okvir je redakdata: <json>iza kojeg slijedi prazan redak. - Redak
: pingstiže svakih 15 sekundi. To je komentar koji drži vezu otvorenom; SSE klijenti ga preskaču. - Greška nakon otvaranja streama stiže kao okvir
data: {"error": {…}}. Status ostaje200, zato provjeravajte okvire.
Ako poziv ne uspije
Greška je JSON objekt s poljem error koje sadrži type i message. Ovo su odgovori na koje prvi poziv najčešće naiđe.
| Status | Tip | Poruka | Što znači |
|---|---|---|---|
401 | authentication_error | Missing authentication | Nijedan ključ nije stigao do API-ja. Pošaljite Authorization: Bearer iza kojeg slijedi vaš ključ. |
401 | authentication_error | Invalid API key | Ključ nije trenutačni ključ nijednog računa. Ponovno ga kopirajte sa stranice Ključevi i upotreba. |
400 | invalid_request_error | unknown model: <id> | model nije objavljeni id. Koristite id sa stranice Modeli i cijene. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type… | Polje ima pogrešan JSON tip ili messages nedostaje. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | Izlazni proračun zahtjeva ne stane u vaše stanje. |
Kamo dalje
- Modeli i cijene — Odaberite model: id-ovi, kontekstni prozori i cijene.
- Chat Completions — Svako polje zahtjeva, polje odgovora i događaj streama endpointa koji ste pozvali.
- Streaming — Okviri streama, keep-alive retci i greške unutar streama.
- Pozivanje funkcija — Pustite model da poziva vaše funkcije.
- Ograničenja i stanje — Što zahtjev rezervira i koliko košta te koliko zahtjeva smijete poslati.
- Playground — Isprobajte zahtjeve u pregledniku sa svojim ključem.