Hopp til innholdet
Anthropic-format

Anthropic-format

POST /v1/messages tar en forespørsel i Anthropic Messages-formatet og svarer i samme format, strømmet eller ikke. Bruk det med Anthropic-SDK-en og verktøy bygget på den, som Claude Code: sett base-URL-en, bruk Shannon API-nøkkelen din og oppgi en Shannon-modell-id.

POST https://api.shannon-ai.com/v1/messages

Pek Anthropic-SDK-en mot Shannon-base-URL-en. SDK-en legger til /v1/messages og sender nøkkelen din i headeren 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)

Svaret er en melding der content er en liste med blokker. Finn blokkene etter type: når modellen resonnerte, er den første blokken thinking, og teksten kommer etter den.

200 JSON
{
  "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
  }
}

Headere

Header Verdi Beskrivelse
x-api-key YOUR_API_KEY API-nøkkelen din. Authorization: Bearer YOUR_API_KEY godtas i stedet.
content-type application/json Påkrevd.
anthropic-version 2023-06-01 Godtas, ikke påkrevd. Anthropic-SDK-en sender 2023-06-01; svaret har samme format uansett verdi.
anthropic-beta Godtas, ikke påkrevd.
x-request-id Valgfritt. Din egen id for forespørselen. Den kommer tilbake uendret i svaret; uten den får svaret en id på 12 heksadesimale tegn.

Forespørselsfelt

Bare messages er påkrevd. Kolonnen Brukes av nevner modellene der et felt endrer svaret. De hostede åpne vektmodellene er de tolv id-ene i modelllisten; Shannon 3-familien er shannon-3, shannon-3-pro, shannon-3.1 og shannon-3.1-pro. Modeller og priser

Felt Type Standard Beskrivelse Brukes av
model string shannon-1.6-lite En Shannon-modell-id fra modelllisten. Send den med hver forespørsel. Det skilles ikke mellom store og små bokstaver. Alle andre navn gir 400 unknown model, så et verktøy som sender egne modellnavn, må settes til en Shannon-id. Alle modeller
messages array Påkrevd. Samtalen, eldste melding først, med rollene user og assistant. Se Meldinger og innholdsblokker nedenfor. Alle modeller
system string | array Instruksjoner til modellen: en streng eller en matrise av tekstblokker. Se Systemprompt nedenfor. Hostede åpne vektmodeller, shannon-1.6-*, shannon-2-*, shannon-coder-1
max_tokens integer 4096 Øvre grense for svaret, i tokens. Valgfritt på dette endepunktet; Anthropic-SDK-en sender det alltid. En verdi utenfor 1 til 65,536 flyttes inn i dette området. Det er også beløpet som settes av fra saldoen din mens forespørselen kjører. Hostede åpne vektmodeller, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
stream boolean false true sender svaret som server-sent events. Se Strømming nedenfor. Alle modeller
temperature number Samplingtemperatur. På de hostede åpne vektmodellene holdes verdiene mellom 0 og 2. Hostede åpne vektmodeller, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
top_p number Nucleus sampling. Hostede åpne vektmodeller
stop_sequences array Opptil 4 strenger. Svaret avsluttes før den første som dukker opp. stop_reason forblir end_turn. Hostede åpne vektmodeller
tools array Verktøyene modellen kan kalle, hvert som {"name", "description", "input_schema"}. Se Verktøy nedenfor. Alle modeller
tool_choice object {"type": "auto"} lar modellen bestemme, {"type": "any"} får den til å kalle et verktøy, {"type": "tool", "name": "…"} får den til å kalle akkurat det verktøyet. Hostede åpne vektmodeller
thinking object Hvor mye modellen resonnerer før den svarer. Se Tenking nedenfor. Hostede åpne vektmodeller
web_search boolean false Et Shannon-tillegg til formatet: true lar modellen søke på nettet før den svarer. shannon-1.6-*, shannon-2-*, Shannon 3-familien

Uten max_tokens er verdien 4,096, og 65,536 på shannon-coder-1.

metadata, top_k, service_tier og cache_control-markører på blokker godtas slik at eksisterende klientkode kjører uendret. De endrer ikke svaret; prompt-caching på de hostede åpne vektmodellene er automatisk.

Et JSON-svar etter et skjema bes om med response_format på Chat Completions og med text.format på Responses. Strukturerte utdata

En forespørsel med systemprompt og tenking

Denne forespørselen sender en systemprompt, et tenkebudsjett, en temperatur og en stoppsekvens. Den bruker en hostet åpen vektmodell, som anvender alle disse.

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)

På de hostede åpne vektmodellene rapporterer usage tokens lest fra prompt-cachen separat fra de andre input-tokens.

200 JSON
{
  "usage": {
    "input_tokens": 31,
    "cache_read_input_tokens": 0,
    "cache_creation_input_tokens": 0,
    "output_tokens": 62
  }
}

Systemprompt

system er en streng eller en matrise av tekstblokker på formen [{"type": "text", "text": "…"}]. Tekstene i blokkene settes sammen med et linjeskift.

Den brukes av de hostede åpne vektmodellene, shannon-1.6-lite, shannon-1.6-pro, shannon-2-lite, shannon-2-pro og shannon-coder-1. Med en id fra Shannon 3-familien setter du instruksjoner som må gjelde, i brukermeldingen.

Meldinger og innholdsblokker

En melding har en role, user eller assistant, og et content. content er en streng eller en matrise av blokker.

Blokk Beskrivelse Tilgjengelig på
{"type": "text", "text": "…"} Tekst. Alle modeller
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": "…"}}
{"type": "image", "source": {"type": "url", "url": "…"}}
Et bilde i en user-melding, som base64 eller via URL. Shannon 3-familien, shannon-1.6-lite, shannon-1.6-pro og de hostede åpne vektmodellene som støtter bilde som input
{"type": "document", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} Et dokument (PDF, Word, PowerPoint eller Excel) i en user-melding, som base64 eller via URL. Shannon 3-familien
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} I en assistant-melding: et verktøykall modellen gjorde i et tidligere svar. Alle modeller
{"type": "tool_result", "tool_use_id": "toolu_…", "content": "…"} I en user-melding: resultatet av det kallet. content er en streng eller en liste med tekstblokker. Alle modeller

Du kan sende content fra et tidligere svar tilbake som det er: blokkene text og tool_use leses, thinking-blokker hoppes over.

På Shannon-nivåene leses bilder og dokumenter fra den siste user-meldingen. Størrelser og grenser har sin egen side. Bilder og filer

Tenking

De hostede åpne vektmodellene kobler thinking til et resonneringsnivå. Uten feltet er nivået høyt.

Form budget_tokens Effekt
{"type": "disabled"} Ingen resonnering. Svaret har ingen thinking-blokk.
{"type": "enabled", "budget_tokens": 2048} ≤ 2,048 Lav innsats.
{"type": "enabled", "budget_tokens": 8192} ≤ 8,192 Middels innsats.
{"type": "enabled", "budget_tokens": 16000} > 8,192 Høy innsats.

En modell som resonnerer, returnerer resonneringen som en blokk {"type": "thinking", "thinking": "…"} foran teksten. Shannon-nivåene som resonnerer, sender den også.

Innsatsnivåene er beskrevet på sin egen side. Resonneringsinnsats

Verktøy

Et verktøy er en funksjon koden din kjører. Beskriv hvert verktøy med name, description og input_schema. Når modellen vil bruke et verktøy, inneholder svaret en tool_use-blokk og stop_reason er tool_use.

En verktøydefinisjon i tools:

tools
[
  {
    "name": "get_weather",
    "description": "Current weather for a city.",
    "input_schema": {
      "type": "object",
      "properties": {
        "city": {
          "type": "string"
        }
      },
      "required": [
        "city"
      ]
    }
  }
]

content i et svar som kaller det:

200 content
[
  {
    "type": "text",
    "text": ""
  },
  {
    "type": "tool_use",
    "id": "toolu_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
    "name": "get_weather",
    "input": {
      "city": "Paris"
    }
  }
]

Kjør verktøyet, og send deretter forespørselen på nytt med kallet og en tool_result-blokk lagt til i messages:

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

Form Effekt Brukes av
{"type": "auto"} Modellen bestemmer om den kaller et verktøy. Dette er standard. Alle modeller
{"type": "any"} Modellen må kalle ett av verktøyene. Hostede åpne vektmodeller
{"type": "tool", "name": "…"} Modellen må kalle det navngitte verktøyet. Hostede åpne vektmodeller

Bare verktøy med en input_schema leses. Nettsøk er ikke et verktøy på dette endepunktet: sett feltet web_search.

Verktøysløyfen er beskrevet fullstendig på sin egen side. Funksjonskall

Svaret

Felt Type Beskrivelse Sendt av
id string msg_ etterfulgt av 32 heksadesimale tegn. Alle modeller
type string Alltid message. Alle modeller
role string Alltid assistant. Alle modeller
model string Den kanoniske id-en til modellen som svarte. Alle modeller
content array Blokkene i svaret, i denne rekkefølgen: thinking når modellen resonnerte, text, deretter én tool_use per verktøykall. Alle modeller
stop_reason string Hvorfor svaret tok slutt. Se verdiene nedenfor. Alle modeller
usage object input_tokens og output_tokens. Alle modeller
sources array Bare på en forespørsel med web_search: true der søket fant noe: resultatene modellen fikk, hvert med index, title og url. [1] i svaret er oppføringen med index 1. I en strøm kommer det med hendelsen message_delta. shannon-1.6-*, shannon-2-*, Shannon 3-familien
usage.cache_read_input_tokens integer cache_read_input_tokens er delen av prompten som ble lest fra cachen; input_tokens er resten. cache_creation_input_tokens er alltid 0. Hostede åpne vektmodeller

Svarblokker

Blokk Beskrivelse
{"type": "thinking", "thinking": "…"} Modellens resonnering. Det finnes ikke noe signature-medlem.
{"type": "text", "text": "…"} Svarteksten. Den kan være tom når svaret er et verktøykall.
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} Et verktøykall. input er et JSON-objekt. Send resultatet tilbake med samme id.

stop_reason

stop_reason Beskrivelse Sendt av
end_turn Modellen fullførte svaret sitt, eller en av dine stop_sequences dukket opp. Alle modeller
tool_use Svaret inneholder ett eller flere verktøykall. Alle modeller
max_tokens Svaret ble kuttet ved output-grensen. Shannon 3-familien, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1, i strømmer

Strømming

Sett stream til true for server-sent events. Hver ramme har en event:-linje med navnet på hendelsen og en data:-linje med et JSON-objekt som gjentar navnet i type. Strøm-hjelperne i Anthropic-SDK-en leser disse hendelsene for deg:

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)

Hendelsene, i den rekkefølgen de kommer:

Hendelse Data Når
message_start message Alltid først. message inneholder id, rolle, modell, et tomt content og en usage som starter på null.
content_block_start index, content_block En blokk åpnes. content_block er en tom text- eller thinking-blokk, eller en tool_use-blokk med id og name.
content_block_delta index, delta {"type": "thinking_delta", "thinking"} En del av resonneringen, for en thinking-blokk.
content_block_delta index, delta {"type": "text_delta", "text"} En del av svaret, for en text-blokk.
content_block_delta index, delta {"type": "input_json_delta", "partial_json"} Argumentene til et verktøykall, komplette i én delta, for en tool_use-blokk.
content_block_stop index Blokken med denne index er ferdig.
message_delta delta {stop_reason, stop_sequence}, usage Slutten på svaret: delta.stop_reason og usage for forespørselen.
message_stop Alltid sist.

Blokker nummereres med index i den rekkefølgen de åpnes, og én blokk er ferdig før den neste åpnes. Les hver blokk etter typen, ikke etter nummeret: en strøm kan først åpne en tom text-blokk, deretter thinking-blokken, og levere svaret i en senere text-blokk.

200 text/event-stream
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

Sendt av Beskrivelse
Shannon 3-familien, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 En ping-hendelse med dataene {"type": "ping"}, hvert 15. sekund.
Hostede åpne vektmodeller En kommentarlinje : keepalive, hvert 15. sekund mens modellen jobber.

En strøm som feiler

En feil etter at strømmen har startet, er en error-hendelse med samme kropp som et feilsvar: {"type": "error", "error": {"type", "message"}}. De avsluttende hendelsene, message_delta og message_stop, kommer likevel etterpå. Behandle svaret som mislykket og send forespørselen på nytt.

Feil

Feil bruker Anthropics feilkropp: type er error, og error-objektet har en type og en message. Tabellen viser det dette endepunktet oftest returnerer. Den fullstendige listen, med hva som kan prøves på nytt, har sin egen side. Feilhåndtering

400 JSON
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}
Status Type Melding Når
401 authentication_error Missing authentication
Invalid API key
Ingen API-nøkkel ble sendt, eller nøkkelen er ukjent eller tilbakekalt.
400 invalid_request_error unknown model: <id> model er ikke en Shannon-modell-id.
400 invalid_request_error No user message provided Shannon-nivåer: forespørselen har ingen brukertekst og ingen tools.
400 invalid_request_error <id> does not accept image input Et bilde ble sendt til en hostet åpen vektmodell uten støtte for bilde som input.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … messages mangler, eller et felt har feil JSON-type.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_tokens er større enn det som er igjen av saldoen din.
429 rate_limit_error Too many requests. Retry in <n>s. Flood protection: mer enn 120 forespørsler i løpet av ett minutt på kontoen din.
429 rate_limit_error Shannon Coder call quota reached. Upgrade your plan at shannon-ai.com/plan shannon-coder-1: Shannon Coder-kallene i planen din for gjeldende 4-timersvindu er brukt opp.
500 server_error The model backend failed to answer. Please retry. Modellen ga ikke noe svar. Send forespørselen på nytt.
502 api_error The model backend failed to answer. Please retry. Modellen ga ikke noe svar. Send forespørselen på nytt.

Telling av tokens

POST /v1/messages/count_tokens tar samme kropp som en meldingsforespørsel (model, system, messages, tools) og returnerer {"input_tokens": n}: antall input-tokens forespørselen ville bli belastet for. Det gjelder for de hostede åpne vektmodellene, er gratis og telles ikke av flood protection.

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)

Telling har sin egen side, med ren tekst-endepunktet og grensene. Token-telling