Format Anthropic
POST /v1/messages sprejme zahtevek v formatu Anthropic Messages in odgovori v istem formatu, pretočno ali ne. Uporabite ga z Anthropic SDK in z orodji, zgrajenimi na njem, kot je Claude Code: nastavite osnovni URL, uporabite svoj API ključ Shannon in navedite id modela Shannon.
POST https://api.shannon-ai.com/v1/messages
Usmerite Anthropic SDK na osnovni URL Shannon. SDK doda /v1/messages in pošlje vaš ključ v glavi x-api-key.
import anthropic
client = anthropic.Anthropic(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com",
)
message = client.messages.create(
model="shannon-3",
max_tokens=1024,
messages=[{"role": "user", "content": "Say hello in one sentence."}],
)
for block in message.content:
if block.type == "text":
print(block.text) import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com",
});
const message = await client.messages.create({
model: "shannon-3",
max_tokens: 1024,
messages: [{ role: "user", content: "Say hello in one sentence." }],
});
for (const block of message.content) {
if (block.type === "text") console.log(block.text);
} curl https://api.shannon-ai.com/v1/messages \
-H "x-api-key: YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{
"model": "shannon-3",
"max_tokens": 1024,
"messages": [{"role": "user", "content": "Say hello in one sentence."}]
}' Odgovor je sporočilo, katerega content je seznam blokov. Bloke prepoznate po type: ko je model razmišljal, je prvi blok thinking, besedilo pa sledi za njim.
{
"id": "msg_5f0c1e7a9b3d4c62a8e1f07d2b46c9a3",
"type": "message",
"role": "assistant",
"model": "shannon-3",
"content": [
{
"type": "thinking",
"thinking": "The user wants a greeting in one sentence. Keep it short and friendly."
},
{
"type": "text",
"text": "Hello, it is good to meet you."
}
],
"stop_reason": "end_turn",
"usage": {
"input_tokens": 1184,
"output_tokens": 46
}
} Glave
| Glava | Vrednost | Opis |
|---|---|---|
x-api-key | YOUR_API_KEY | Vaš API ključ. Namesto njega se sprejme Authorization: Bearer YOUR_API_KEY. |
content-type | application/json | Obvezno. |
anthropic-version | 2023-06-01 | Sprejeto, ni obvezno. Anthropic SDK pošlje 2023-06-01; odgovor ima isti format ne glede na vrednost. |
anthropic-beta | Sprejeto, ni obvezno. | |
x-request-id | Neobvezno. Vaš lasten id zahtevka. V odgovoru se vrne nespremenjen; brez njega odgovor nosi id z 12 šestnajstiškimi znaki. |
Polja zahtevka
Zahtevano je samo messages. Stolpec Uporabljajo navaja modele, pri katerih polje spremeni odgovor. Gostovani modeli z odprtimi utežmi so dvanajst id-jev s seznama modelov; družina Shannon 3 so shannon-3, shannon-3-pro, shannon-3.1 in shannon-3.1-pro. Modeli in cene
| Polje | Tip | Privzeto | Opis | Uporabljajo |
|---|---|---|---|---|
model | string | shannon-1.6-lite | Id modela Shannon s seznama modelov. Pošljite ga z vsakim zahtevkom. Ujemanje ne razlikuje velikih in malih črk. Vsako drugo ime vrne 400 unknown model, zato morate orodje, ki pošilja lastna imena modelov, nastaviti na id Shannon. | Vsi modeli |
messages | array | Obvezno. Pogovor, najstarejše sporočilo prvo, z vlogama user in assistant. Glejte spodaj Sporočila in bloki vsebine. | Vsi modeli | |
system | string | array | Navodila za model: niz ali polje besedilnih blokov. Glejte spodaj Sistemski prompt. | Gostovani modeli z odprtimi utežmi, shannon-1.6-*, shannon-2-*, shannon-coder-1 | |
max_tokens | integer | 4096 | Zgornja meja odgovora v tokenih. Na tem endpointu neobvezno; Anthropic SDK ga vedno pošlje. Vrednost zunaj obsega od 1 do 65,536 se premakne v ta obseg. To je tudi znesek, ki se med izvajanjem zahtevka odloži z vašega stanja. | Gostovani modeli z odprtimi utežmi, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 |
stream | boolean | false | true pošlje odgovor kot dogodke, ki jih pošilja strežnik. Glejte spodaj Pretakanje. | Vsi modeli |
temperature | number | Temperatura vzorčenja. Pri gostovanih modelih z odprtimi utežmi se vrednosti omejijo med 0 in 2. | Gostovani modeli z odprtimi utežmi, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | |
top_p | number | Jedrno vzorčenje (nucleus sampling). | Gostovani modeli z odprtimi utežmi | |
stop_sequences | array | Do 4 nizi. Odgovor se konča pred prvim, ki se pojavi. stop_reason ostane end_turn. | Gostovani modeli z odprtimi utežmi | |
tools | array | Orodja, ki jih model lahko pokliče, vsako kot {"name", "description", "input_schema"}. Glejte spodaj Orodja. | Vsi modeli | |
tool_choice | object | {"type": "auto"} prepusti odločitev modelu, {"type": "any"} ga prisili, da pokliče orodje, {"type": "tool", "name": "…"} ga prisili, da pokliče to orodje. | Gostovani modeli z odprtimi utežmi | |
thinking | object | Koliko model razmišlja, preden odgovori. Glejte spodaj Razmišljanje. | Gostovani modeli z odprtimi utežmi | |
web_search | boolean | false | Dodatek Shannon k formatu: true omogoči modelu iskanje po spletu, preden odgovori. | shannon-1.6-*, shannon-2-*, družina Shannon 3 |
Brez max_tokens je vrednost 4,096, pri shannon-coder-1 pa 65,536.
metadata, top_k, service_tier in oznake cache_control na blokih so sprejeti, da obstoječa koda odjemalca deluje nespremenjena. Odgovora ne spremenijo; predpomnjenje promptov na gostovanih modelih z odprtimi utežmi je samodejno.
Odgovor JSON po shemi zahtevate s response_format pri Chat Completions in s text.format pri Responses. Strukturirani izhodi
Zahtevek s sistemskim promptom in razmišljanjem
Ta zahtevek pošlje sistemski prompt, proračun razmišljanja, temperaturo in zaporedje za ustavitev. Uporablja gostovani model z odprtimi utežmi, ki upošteva vse našteto.
import anthropic
client = anthropic.Anthropic(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com",
)
message = client.messages.create(
model="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
max_tokens=4096,
system="You are a physics teacher. Answer in two sentences.",
thinking={"type": "enabled", "budget_tokens": 2048},
temperature=0.3,
stop_sequences=["\n\n"],
messages=[{"role": "user", "content": "Why is the sky blue?"}],
)
for block in message.content:
if block.type == "thinking":
print("reasoning:", block.thinking)
elif block.type == "text":
print("answer:", block.text)
print(message.usage) import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com",
});
const message = await client.messages.create({
model: "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
max_tokens: 4096,
system: "You are a physics teacher. Answer in two sentences.",
thinking: { type: "enabled", budget_tokens: 2048 },
temperature: 0.3,
stop_sequences: ["\n\n"],
messages: [{ role: "user", content: "Why is the sky blue?" }],
});
for (const block of message.content) {
if (block.type === "thinking") console.log("reasoning:", block.thinking);
if (block.type === "text") console.log("answer:", block.text);
}
console.log(message.usage); curl https://api.shannon-ai.com/v1/messages \
-H "x-api-key: YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"max_tokens": 4096,
"system": "You are a physics teacher. Answer in two sentences.",
"thinking": {"type": "enabled", "budget_tokens": 2048},
"temperature": 0.3,
"stop_sequences": ["\n\n"],
"messages": [{"role": "user", "content": "Why is the sky blue?"}]
}' Pri gostovanih modelih z odprtimi utežmi usage poroča o tokenih, prebranih iz predpomnilnika promptov, ločeno od drugih vhodnih tokenov.
{
"usage": {
"input_tokens": 31,
"cache_read_input_tokens": 0,
"cache_creation_input_tokens": 0,
"output_tokens": 62
}
} Sistemski prompt
system je niz ali polje besedilnih blokov v obliki [{"type": "text", "text": "…"}]. Besedila blokov se združijo s prelomom vrstice.
Upoštevajo ga gostovani modeli z odprtimi utežmi, shannon-1.6-lite, shannon-1.6-pro, shannon-2-lite, shannon-2-pro in shannon-coder-1. Pri id-ju iz družine Shannon 3 navodila, ki morajo veljati, vstavite v uporabnikovo sporočilo.
Sporočila in bloki vsebine
Sporočilo ima role, to je user ali assistant, in content. content je niz ali polje blokov.
| Blok | Opis | Na voljo pri |
|---|---|---|
{"type": "text", "text": "…"} | Besedilo. | Vsi modeli |
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": "…"}}{"type": "image", "source": {"type": "url", "url": "…"}} | Slika v sporočilu user, kot base64 ali prek URL-ja. | Družina Shannon 3, shannon-1.6-lite, shannon-1.6-pro in gostovani modeli z odprtimi utežmi, ki navajajo vhod s slikami |
{"type": "document", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} | Dokument (PDF, Word, PowerPoint ali Excel) v sporočilu user, kot base64 ali prek URL-ja. | Družina Shannon 3 |
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} | V sporočilu assistant: klic orodja, ki ga je model naredil v prejšnjem odgovoru. | Vsi modeli |
{"type": "tool_result", "tool_use_id": "toolu_…", "content": "…"} | V sporočilu user: rezultat tega klica. content je niz ali seznam besedilnih blokov. | Vsi modeli |
content prejšnjega odgovora lahko pošljete nazaj nespremenjen: bloka text in tool_use se preberejo, bloki thinking se preskočijo.
Pri ravneh Shannon se slike in dokumenti preberejo iz zadnjega sporočila user. Velikosti in omejitve imajo svojo stran. Slike in datoteke
Razmišljanje
Gostovani modeli z odprtimi utežmi preslikajo thinking v napor razmišljanja. Brez polja je napor visok.
| Oblika | budget_tokens | Učinek |
|---|---|---|
{"type": "disabled"} | Brez razmišljanja. Odgovor nima bloka thinking. | |
{"type": "enabled", "budget_tokens": 2048} | ≤ 2,048 | Nizek napor. |
{"type": "enabled", "budget_tokens": 8192} | ≤ 8,192 | Srednji napor. |
{"type": "enabled", "budget_tokens": 16000} | > 8,192 | Visok napor. |
Model, ki razmišlja, vrne svoje razmišljanje kot blok {"type": "thinking", "thinking": "…"} pred besedilom. Ravni Shannon, ki razmišljajo, ga prav tako pošljejo.
Napori so opisani na svoji strani. Napor razmišljanja
Orodja
Orodje je funkcija, ki jo izvaja vaša koda. Vsako opišite z name, description in input_schema. Ko model želi orodje, odgovor vsebuje blok tool_use, stop_reason pa je tool_use.
Definicija orodja v tools:
[
{
"name": "get_weather",
"description": "Current weather for a city.",
"input_schema": {
"type": "object",
"properties": {
"city": {
"type": "string"
}
},
"required": [
"city"
]
}
}
] content odgovora, ki ga pokliče:
[
{
"type": "text",
"text": ""
},
{
"type": "tool_use",
"id": "toolu_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
"name": "get_weather",
"input": {
"city": "Paris"
}
}
] Zaženite orodje, nato zahtevek pošljite znova s klicem in blokom tool_result, dodanima v messages:
[
{
"role": "user",
"content": "What is the weather in Paris?"
},
{
"role": "assistant",
"content": [
{
"type": "tool_use",
"id": "toolu_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
"name": "get_weather",
"input": {
"city": "Paris"
}
}
]
},
{
"role": "user",
"content": [
{
"type": "tool_result",
"tool_use_id": "toolu_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
"content": "{\"temperature_c\": 18, \"sky\": \"cloudy\"}"
}
]
}
] tool_choice
| Oblika | Učinek | Uporabljajo |
|---|---|---|
{"type": "auto"} | Model sam odloči, ali bo poklical orodje. To je privzeto. | Vsi modeli |
{"type": "any"} | Model mora poklicati eno od orodij. | Gostovani modeli z odprtimi utežmi |
{"type": "tool", "name": "…"} | Model mora poklicati imenovano orodje. | Gostovani modeli z odprtimi utežmi |
Prebrana so samo orodja z input_schema. Spletno iskanje na tem endpointu ni orodje: nastavite polje web_search.
Zanka orodij je v celoti opisana na svoji strani. Klicanje funkcij
Odgovor
| Polje | Tip | Opis | Pošilja |
|---|---|---|---|
id | string | msg_, ki mu sledi 32 šestnajstiških znakov. | Vsi modeli |
type | string | Vedno message. | Vsi modeli |
role | string | Vedno assistant. | Vsi modeli |
model | string | Kanonični id modela, ki je odgovoril. | Vsi modeli |
content | array | Bloki odgovora v tem vrstnem redu: thinking, če je model razmišljal, text, nato po en tool_use za vsak klic orodja. | Vsi modeli |
stop_reason | string | Zakaj se je odgovor končal. Glejte vrednosti spodaj. | Vsi modeli |
usage | object | input_tokens in output_tokens. | Vsi modeli |
sources | array | Samo pri zahtevku z web_search: true, katerega iskanje je kaj našlo: rezultati, ki jih je model dobil, vsak z index, title in url. [1] v odgovoru je vnos z index 1. V toku pride z dogodkom message_delta. | shannon-1.6-*, shannon-2-*, družina Shannon 3 |
usage.cache_read_input_tokens | integer | cache_read_input_tokens je del prompta, prebran iz predpomnilnika; input_tokens je ostalo. cache_creation_input_tokens je vedno 0. | Gostovani modeli z odprtimi utežmi |
Bloki odgovora
| Blok | Opis |
|---|---|
{"type": "thinking", "thinking": "…"} | Razmišljanje modela. Člana signature ni. |
{"type": "text", "text": "…"} | Besedilo odgovora. Lahko je prazno, kadar je odgovor klic orodja. |
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} | Klic orodja. input je objekt JSON. Rezultat pošljite nazaj z istim id. |
stop_reason
| stop_reason | Opis | Pošilja |
|---|---|---|
end_turn | Model je dokončal odgovor ali pa se je pojavil eden od vaših stop_sequences. | Vsi modeli |
tool_use | Odgovor vsebuje enega ali več klicev orodij. | Vsi modeli |
max_tokens | Odgovor je bil odrezan na omejitvi izhoda. | Družina Shannon 3, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1, v tokovih |
Pretakanje
Nastavite stream na true za dogodke, ki jih pošilja strežnik. Vsak okvir ima vrstico event: z imenom dogodka in vrstico data: z objektom JSON, ki ponovi ime v type. Pomočniki za tokove v Anthropic SDK te dogodke preberejo namesto vas:
import anthropic
client = anthropic.Anthropic(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com",
)
with client.messages.stream(
model="shannon-3",
max_tokens=1024,
messages=[{"role": "user", "content": "Explain server-sent events in three sentences."}],
) as stream:
for text in stream.text_stream:
print(text, end="", flush=True)
message = stream.get_final_message()
print()
print(message.stop_reason, message.usage) import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com",
});
const stream = client.messages.stream({
model: "shannon-3",
max_tokens: 1024,
messages: [{ role: "user", content: "Explain server-sent events in three sentences." }],
});
stream.on("text", (text) => process.stdout.write(text));
const message = await stream.finalMessage();
console.log("\n", message.stop_reason, message.usage); curl -N https://api.shannon-ai.com/v1/messages \
-H "x-api-key: YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{
"model": "shannon-3",
"max_tokens": 1024,
"stream": true,
"messages": [{"role": "user", "content": "Explain server-sent events in three sentences."}]
}' Dogodki v vrstnem redu prihoda:
| Dogodek | Podatki | Kdaj |
|---|---|---|
message_start | message | Vedno prvi. message vsebuje id, vlogo, model, prazen content in usage, ki se začne pri nič. |
content_block_start | index, content_block | Blok se odpre. content_block je prazen blok text ali thinking ali blok tool_use z id in name. |
content_block_delta | index, delta {"type": "thinking_delta", "thinking"} | Del razmišljanja za blok thinking. |
content_block_delta | index, delta {"type": "text_delta", "text"} | Del odgovora za blok text. |
content_block_delta | index, delta {"type": "input_json_delta", "partial_json"} | Argumenti klica orodja, v celoti v eni delti, za blok tool_use. |
content_block_stop | index | Blok s tem index je končan. |
message_delta | delta {stop_reason, stop_sequence}, usage | Konec odgovora: delta.stop_reason in usage zahtevka. |
message_stop | Vedno zadnji. |
Bloki so oštevilčeni z index po vrstnem redu odpiranja, vsak blok pa je končan, preden se odpre naslednji. Vsak blok berite po njegovem tipu, ne po številki: tok lahko najprej odpre prazen blok text, nato blok thinking, odgovor pa dostavi v poznejšem bloku text.
event: message_start
data: {"type":"message_start","message":{"id":"msg_5f0c…","type":"message","role":"assistant","model":"shannon-3","content":[],"usage":{"input_tokens":0,"output_tokens":0}}}
event: content_block_start
data: {"type":"content_block_start","index":0,"content_block":{"type":"text","text":""}}
event: content_block_stop
data: {"type":"content_block_stop","index":0}
event: content_block_start
data: {"type":"content_block_start","index":1,"content_block":{"type":"thinking","thinking":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":1,"delta":{"type":"thinking_delta","thinking":"Three sentences: what it is, how it is framed, why it is used."}}
event: ping
data: {"type": "ping"}
event: content_block_stop
data: {"type":"content_block_stop","index":1}
event: content_block_start
data: {"type":"content_block_start","index":2,"content_block":{"type":"text","text":""}}
event: content_block_delta
data: {"type":"content_block_delta","index":2,"delta":{"type":"text_delta","text":"Server-sent events let a server push text over one HTTP reply."}}
event: content_block_stop
data: {"type":"content_block_stop","index":2}
event: message_delta
data: {"type":"message_delta","delta":{"stop_reason":"end_turn","stop_sequence":null},"usage":{"input_tokens":1190,"output_tokens":84}}
event: message_stop
data: {"type":"message_stop"} Keep-alive
| Pošilja | Opis |
|---|---|
Družina Shannon 3, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 | Dogodek ping s podatki {"type": "ping"} vsakih 15 sekund. |
| Gostovani modeli z odprtimi utežmi | Komentarna vrstica : keepalive vsakih 15 sekund, medtem ko model dela. |
Tok, ki ne uspe
Napaka po začetku toka je dogodek error z istim telesom kot odgovor z napako: {"type": "error", "error": {"type", "message"}}. Sledijo še sklepni dogodki, message_delta in message_stop. Odgovor obravnavajte kot neuspel in zahtevek pošljite znova.
Napake
Napake uporabljajo telo napake Anthropic: type je error, objekt error pa vsebuje type in message. Tabela navaja, kaj ta endpoint najpogosteje vrne. Celoten seznam s priporočili, kaj ponoviti, ima svojo stran. Obravnava napak
{
"type": "error",
"error": {
"type": "invalid_request_error",
"message": "unknown model: no-such-model"
}
} | Status | Tip | Sporočilo | Kdaj |
|---|---|---|---|
401 | authentication_error | Missing authenticationInvalid API key | API ključ ni bil poslan ali pa je ključ neznan ali preklican. |
400 | invalid_request_error | unknown model: <id> | model ni id modela Shannon. |
400 | invalid_request_error | No user message provided | Ravni Shannon: zahtevek nima besedila uporabnika in nima tools. |
400 | invalid_request_error | <id> does not accept image input | Slika je bila poslana gostovanemu modelu z odprtimi utežmi brez vhoda s slikami. |
422 | invalid_request_error | Failed to deserialize the JSON body into the target type: … | messages manjka ali ima polje napačen tip JSON. |
429 | rate_limit_error | Quota exceeded. Upgrade your plan at shannon-ai.com/plan | max_tokens je večji od tega, kar je ostalo na vašem stanju. |
429 | rate_limit_error | Too many requests. Retry in <n>s. | Zaščita pred poplavo zahtevkov: več kot 120 zahtevkov v eni minuti na vašem računu. |
429 | rate_limit_error | Shannon Coder call quota reached. Upgrade your plan at shannon-ai.com/plan | shannon-coder-1: klici Shannon Coder vašega paketa za trenutno 4-urno okno so porabljeni. |
500 | server_error | The model backend failed to answer. Please retry. | Model ni ustvaril odgovora. Pošljite zahtevek znova. |
502 | api_error | The model backend failed to answer. Please retry. | Model ni ustvaril odgovora. Pošljite zahtevek znova. |
Štetje tokenov
POST /v1/messages/count_tokens sprejme isto telo kot zahtevek za sporočilo (model, system, messages, tools) in vrne {"input_tokens": n}: število vhodnih tokenov, ki bi jih zahtevek obračunal. Šteje za gostovane modele z odprtimi utežmi, je brezplačno in ga zaščita pred poplavo zahtevkov ne všteva.
import anthropic
client = anthropic.Anthropic(
api_key="YOUR_API_KEY",
base_url="https://api.shannon-ai.com",
)
count = client.messages.count_tokens(
model="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
system="You are a physics teacher. Answer in two sentences.",
messages=[{"role": "user", "content": "Why is the sky blue?"}],
)
print(count.input_tokens) import Anthropic from "@anthropic-ai/sdk";
const client = new Anthropic({
apiKey: "YOUR_API_KEY",
baseURL: "https://api.shannon-ai.com",
});
const count = await client.messages.countTokens({
model: "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
system: "You are a physics teacher. Answer in two sentences.",
messages: [{ role: "user", content: "Why is the sky blue?" }],
});
console.log(count.input_tokens); curl https://api.shannon-ai.com/v1/messages/count_tokens \
-H "x-api-key: YOUR_API_KEY" \
-H "content-type: application/json" \
-d '{
"model": "DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
"system": "You are a physics teacher. Answer in two sentences.",
"messages": [{"role": "user", "content": "Why is the sky blue?"}]
}'
# {"input_tokens": 31} Štetje ima svojo stran, z endpointom za navadno besedilo in omejitvami. Štetje tokenov