Hiter začetek
Naredite prvi zahtevek: pridobite ključ, pošljite eno sporočilo in preberite odgovor. API govori formata OpenAI in Anthropic, zato SDK, ki ga že uporabljate, deluje, ko spremenite njegov osnovni URL in ključ.
1. Pridobite svoj ključ
Vsak račun ima en API ključ. Prijavite se, odprite Ključi in poraba ter ga kopirajte. Ključ deluje na vsaki končni točki in z vsakim modelom. Ključi in poraba
2. Usmerite odjemalca na API
Vse končne točke so pod enim osnovnim URL-jem. SDK OpenAI ga sprejme s /v1 na koncu; SDK Anthropic ga sprejme brez, ker /v1/messages doda sam.
| Odjemalec | Osnovni URL |
|---|---|
| SDK-ji OpenAI in odjemalci, združljivi z OpenAI | https://api.shannon-ai.com/v1 |
| SDK-ji Anthropic | https://api.shannon-ai.com |
Besedilo ustvarjajo tri končne točke. Dosegajo iste modele; izberite tisto, katere format vaša koda že uporablja.
| Končni točka (Endpoint) | Format |
|---|---|
POST /v1/chat/completions | OpenAI Chat Completions |
POST /v1/messages | Anthropic Messages |
POST /v1/responses | OpenAI Responses |
3. Pošljite prvi zahtevek
Pošljite eno sporočilo user modelu shannon-3 na končni točki Chat Completions. YOUR_API_KEY zamenjajte s 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 | Privzeto | Opis |
|---|---|---|---|
model | string | Id modela, ki odgovori. Id so navedeni na strani Models & pricing. | |
messages | array | Pogovor do zdaj: objekti z role in content. Zadnje sporočilo user je prompt. Obvezno. | |
max_tokens | integer | 4096 | Izhodni proračun zahtevka, od 1 do 65,536. Zahtevek ta znesek rezervira z vašega stanja in mu je obračunano, kar je res porabil. |
stream | boolean | false | true pošilja odgovor po koščkih, medtem ko se piše. |
Telo zahtevka je JSON in potrebuje glavo Content-Type: application/json. Celoten seznam polj je na strani končne točke. Chat Completions
Odgovor
Klic brez stream vrne en objekt JSON, ko je odgovor popoln. Spodnja besedila in števila so primeri.
{
"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-, ki mu sledi 32 šestnajstiških znakov. |
object | string | Vedno chat.completion. |
created | integer | Čas odgovora v sekundah Unix. |
model | string | Objavljeni id modela, ki je odgovoril, tudi kadar ste poslali vzdevek ali drug zapis. |
choices | array | Vedno en vnos, z index 0. |
choices[0].message.role | string | Vedno assistant. |
choices[0].message.content | string | null | Odgovor. Je lahko null, kadar odgovor vsebuje tool_calls. |
choices[0].message.reasoning_content | string | null | Razmišljanje modela pred odgovorom ali null, če ga ni. |
choices[0].message.tool_calls | array | Prisotno samo, kadar model pokliče eno od orodij, ki ste jih deklarirali. |
choices[0].finish_reason | string | stop za odgovor, tool_calls, kadar model pokliče orodje. |
usage.prompt_tokens | integer | Tokeni, ki jih je model prebral za ta odgovor. Pri shannon-2-* in družini Shannon 3 je lahko več, kot je besedila, ki ste ga poslali. |
usage.completion_tokens | integer | Tokeni, ki jih je model napisal. |
usage.total_tokens | integer | Skupni znesek. Obračun modela Shannon se izračuna iz tega števila. |
-
usagevsebuje števila tokenov, ne denarja. Kaj je klic vzel z vašega stanja, je prikazano po zahtevkih na strani Ključi in poraba; kako se izračuna, je na strani Omejitve in stanje. Omejitve in stanje - Vsak odgovor, tudi napaka in tok, ima glavo
x-request-id. Če vaš zahtevek vsebuje glavox-request-id, se vrne njena vrednost; sicer je vrednost 12 šestnajstiških znakov. Hranite jo v dnevnikih: označuje ta en zahtevek.
Isti klic kot tok
Nastavite stream na true, da odgovor berete, medtem ko se piše. Vse drugo v zahtevku ostane enako.
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
}' Vsak okvir toka je ena vrstica, ki se začne z data: in vsebuje objekt JSON. En okvir, izpisan v več vrsticah:
{
"id": "chatcmpl-9b2f6c1e4a7d4f0f8a3c5d2e1b6a7c90",
"object": "chat.completion.chunk",
"created": 1791590400,
"model": "shannon-3",
"choices": [
{
"index": 0,
"delta": {
"content": "Hello! "
},
"finish_reason": null
}
]
} | Okvirji, po vrsti | delta | finish_reason |
|---|---|---|
| Medtem ko model razmišlja. Nič ali več okvirjev. | {"reasoning_content": "…"} | null |
| Odgovor, po koščkih. Nič ali več okvirjev. | {"content": "…"} | null |
Zadnji okvir JSON. Vsebuje tudi usage; zanj vam ni treba zaprositi. | {} | "stop" |
Konec toka: vrstica data: [DONE]. |
- Odgovor ima status
200incontent-type: text/event-stream. Vsak okvir je vrsticadata: <json>, ki ji sledi prazna vrstica. - Vrstica
: pingprispe vsakih 15 sekund. Je komentar, ki ohranja povezavo odprto; odjemalci SSE jo preskočijo. - Napaka po odprtju toka prispe kot okvir
data: {"error": {…}}. Status ostane200, zato preverjajte okvirje.
Če klic ne uspe
Napaka je objekt JSON z error, ki vsebuje type in message. To so odgovori, na katere prvi klic najpogosteje naleti.
| Stanje | Vrsta | Sporočilo | Kaj pomeni |
|---|---|---|---|
401 | authentication_error | Missing authentication | Noben ključ ni prispel do API-ja. Pošljite Authorization: Bearer, ki mu sledi vaš ključ. |
401 | authentication_error | Invalid API key | Ključ ni trenutni ključ nobenega računa. Znova ga kopirajte na strani Ključi in poraba. |
400 | invalid_request_error | unknown model: <id> | model ni objavljen id. Uporabite id s strani Models & pricing. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type… | Polje ima napačen tip JSON ali manjka messages. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | Izhodni proračun zahtevka se ne prilega v vaše stanje. |
Kam naprej
- Modeli in cene — Izberite model: id, kontekstna okna in cene.
- Chat Completions — Vsako polje zahtevka, polje odgovora in dogodek toka končne točke, ki ste jo poklicali.
- Pretakanje — Okvirji toka, vrstice za ohranjanje povezave in napake znotraj toka.
- Klicanje funkcij — Dovolite, da model kliče vaše funkcije.
- Omejitve in stanje — Kaj zahtevek rezervira in koliko stane ter koliko zahtevkov lahko pošljete.
- Igrišče API — Preizkusite zahtevke v brskalniku s svojim ključem.