Gå til indhold
Anthropic-format

Anthropic-format

POST /v1/messages tager en anmodning i Anthropic Messages-formatet og svarer i samme format, streamet eller ej. Brug det med Anthropic SDK og med værktøjer bygget på den, f.eks. Claude Code: angiv base-URL'en, brug din Shannon API-nøgle, og angiv et Shannon-model-id.

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

Peg Anthropic SDK på Shannon-base-URL'en. SDK'en tilføjer /v1/messages og sender din nøgle 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 besked, hvis content er en liste af blokke. Find blokkene via deres type: når modellen ræsonnerede, er den første blok thinking, og teksten kommer efter 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
  }
}

Headers

Header Værdi Beskrivelse
x-api-key YOUR_API_KEY Din API-nøgle. Authorization: Bearer YOUR_API_KEY accepteres i stedet.
content-type application/json Påkrævet.
anthropic-version 2023-06-01 Accepteres, ikke påkrævet. Anthropic SDK sender 2023-06-01; svaret har samme format uanset værdien.
anthropic-beta Accepteres, ikke påkrævet.
x-request-id Valgfri. Dit eget id for anmodningen. Det kommer uændret tilbage i svaret; uden det har svaret et id på 12 hexadecimale tegn.

Anmodningsfelter

Kun messages er påkrævet. Kolonnen Anvendes af angiver de modeller, hvor et felt ændrer svaret. De hostede open-weight-modeller er de tolv id'er på modellisten; Shannon 3-familien er shannon-3, shannon-3-pro, shannon-3.1 og shannon-3.1-pro. Modeller og priser

Felt Type Standard Beskrivelse Anvendes af
model string shannon-1.6-lite Et Shannon-model-id fra modellisten. Send det med hver anmodning. Der skelnes ikke mellem store og små bogstaver. Ethvert andet navn returnerer 400 unknown model, så et værktøj, der sender sine egne modelnavne, skal sættes til et Shannon-id. Alle modeller
messages array Påkrævet. Samtalen med den ældste besked først, med rollerne user og assistant. Se Beskeder og indholdsblokke nedenfor. Alle modeller
system string | array Instruktioner til modellen: en streng eller et array af tekstblokke. Se System prompt nedenfor. Hostede open-weight-modeller, shannon-1.6-*, shannon-2-*, shannon-coder-1
max_tokens integer 4096 Øvre grænse for svaret, i tokens. Valgfri på dette endpoint; Anthropic SDK sender den altid. En værdi uden for 1 til 65,536 flyttes ind i det interval. Det er også det beløb, der reserveres fra din saldo, mens anmodningen kører. Hostede open-weight-modeller, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
stream boolean false true sender svaret som server-sent events. Se Streaming nedenfor. Alle modeller
temperature number Samplingtemperatur. På de hostede open-weight-modeller holdes værdierne mellem 0 og 2. Hostede open-weight-modeller, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
top_p number Nucleus sampling. Hostede open-weight-modeller
stop_sequences array Op til 4 strenge. Svaret slutter før den første, der forekommer. stop_reason forbliver end_turn. Hostede open-weight-modeller
tools array De værktøjer, modellen må kalde, hver som {"name", "description", "input_schema"}. Se Værktøjer nedenfor. Alle modeller
tool_choice object {"type": "auto"} lader modellen bestemme, {"type": "any"} får den til at kalde et værktøj, {"type": "tool", "name": "…"} får den til at kalde netop det værktøj. Hostede open-weight-modeller
thinking object Hvor meget modellen ræsonnerer, før den svarer. Se Thinking nedenfor. Hostede open-weight-modeller
web_search boolean false Et Shannon-tillæg til formatet: true lader modellen søge på nettet, før den svarer. shannon-1.6-*, shannon-2-*, Shannon 3-familien

Uden max_tokens er værdien 4,096, og 65,536 på shannon-coder-1.

Markørerne metadata, top_k, service_tier og cache_control på blokke accepteres, så eksisterende klientkode kører uændret. De ændrer ikke svaret; prompt caching på de hostede open-weight-modeller er automatisk.

Et JSON-svar efter et skema bestilles med response_format på Chat Completions og med text.format på Responses. Strukturerede outputs

En anmodning med system prompt og thinking

Denne anmodning sender en system prompt, et thinking-budget, en temperatur og en stopsekvens. Den bruger en hostet open-weight-model, som anvender dem alle.

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 open-weight-modeller rapporterer usage de tokens, der er læst fra prompt-cachen, adskilt fra de øvrige input-tokens.

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

System prompt

system er en streng eller et array af tekstblokke på formen [{"type": "text", "text": "…"}]. Blokkenes tekster sammenføjes med et linjeskift.

Den anvendes af de hostede open-weight-modeller, shannon-1.6-lite, shannon-1.6-pro, shannon-2-lite, shannon-2-pro og shannon-coder-1. Med et id fra Shannon 3-familien skal du lægge instruktioner, der skal overholdes, i brugerbeskeden.

Beskeder og indholdsblokke

En besked har en role, user eller assistant, og et content. content er en streng eller et array af blokke.

Blok Beskrivelse Tilgængelig på
{"type": "text", "text": "…"} Tekst. Alle modeller
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": "…"}}
{"type": "image", "source": {"type": "url", "url": "…"}}
Et billede i en user-besked, som base64 eller via URL. Shannon 3-familien, shannon-1.6-lite, shannon-1.6-pro og de hostede open-weight-modeller, der angiver billedinput
{"type": "document", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} Et dokument (PDF, Word, PowerPoint eller Excel) i en user-besked, som base64 eller via URL. Shannon 3-familien
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} I en assistant-besked: et værktøjskald, som modellen foretog i et tidligere svar. Alle modeller
{"type": "tool_result", "tool_use_id": "toolu_…", "content": "…"} I en user-besked: resultatet af det kald. content er en streng eller en liste af tekstblokke. Alle modeller

Du kan sende content fra et tidligere svar tilbage uændret: blokkene text og tool_use læses, blokkene thinking springes over.

På Shannon-niveauerne læses billeder og dokumenter fra den sidste user-besked. Størrelser og grænser har deres egen side. Billeder og filer

Thinking

De hostede open-weight-modeller afbilder thinking på en reasoning effort. Uden feltet er effort høj.

Form budget_tokens Effekt
{"type": "disabled"} Ingen reasoning. Svaret har ingen thinking-blok.
{"type": "enabled", "budget_tokens": 2048} ≤ 2,048 Lav effort.
{"type": "enabled", "budget_tokens": 8192} ≤ 8,192 Middel effort.
{"type": "enabled", "budget_tokens": 16000} > 8,192 Høj effort.

En model, der ræsonnerer, returnerer sin reasoning som en blok {"type": "thinking", "thinking": "…"} foran teksten. De Shannon-niveauer, der ræsonnerer, sender den også.

Effort-niveauerne er beskrevet på deres egen side. Reasoning effort

Værktøjer

Et værktøj er en funktion, som din kode kører. Beskriv hvert enkelt med et name, en description og et input_schema. Når modellen vil bruge et værktøj, indeholder svaret en tool_use-blok, og stop_reason er tool_use.

En værktøjsdefinition 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, der kalder det:

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

Kør værktøjet, og send derefter anmodningen igen med kaldet og en tool_result-blok tilføjet til 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 Anvendes af
{"type": "auto"} Modellen afgør, om den vil kalde et værktøj. Dette er standarden. Alle modeller
{"type": "any"} Modellen skal kalde et af værktøjerne. Hostede open-weight-modeller
{"type": "tool", "name": "…"} Modellen skal kalde det angivne værktøj. Hostede open-weight-modeller

Kun værktøjer med et input_schema læses. Websøgning er ikke et værktøj på dette endpoint: sæt feltet web_search.

Værktøjsløkken er beskrevet fuldt ud på sin egen side. Funktionskald

Svaret

Felt Type Beskrivelse Sendt af
id string msg_ efterfulgt af 32 hexadecimale tegn. Alle modeller
type string Altid message. Alle modeller
role string Altid assistant. Alle modeller
model string Det kanoniske id for den model, der svarede. Alle modeller
content array Svarets blokke i denne rækkefølge: thinking, når modellen ræsonnerede, text og derefter én tool_use per værktøjskald. Alle modeller
stop_reason string Hvorfor svaret sluttede. Se værdierne nedenfor. Alle modeller
usage object input_tokens og output_tokens. Alle modeller
sources array Kun på en anmodning med web_search: true, hvis søgning fandt noget: de resultater, modellen fik, hver med index, title og url. [1] i svaret er posten med index 1. I en stream kommer det med message_delta-hændelsen. shannon-1.6-*, shannon-2-*, Shannon 3-familien
usage.cache_read_input_tokens integer cache_read_input_tokens er den del af prompten, der er læst fra cachen; input_tokens er resten. cache_creation_input_tokens er altid 0. Hostede open-weight-modeller

Svarblokke

Blok Beskrivelse
{"type": "thinking", "thinking": "…"} Modellens reasoning. Der er intet signature-medlem.
{"type": "text", "text": "…"} Svarteksten. Den kan være tom, når svaret er et værktøjskald.
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} Et værktøjskald. input er et JSON-objekt. Send resultatet tilbage med samme id.

stop_reason

stop_reason Beskrivelse Sendt af
end_turn Modellen afsluttede sit svar, eller en af dine stop_sequences forekom. Alle modeller
tool_use Svaret indeholder ét eller flere værktøjskald. Alle modeller
max_tokens Svaret blev afbrudt ved outputgrænsen. Shannon 3-familien, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1, i streams

Streaming

Sæt stream til true for server-sent events. Hver ramme har en event:-linje med hændelsens navn og en data:-linje med et JSON-objekt, der gentager navnet i type. Stream-hjælperne i Anthropic SDK læser disse hændelser for dig:

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)

Hændelserne i den rækkefølge, de kommer:

Hændelse Data Hvornår
message_start message Altid først. message indeholder id, rolle, model, et tomt content og en usage, der starter ved nul.
content_block_start index, content_block En blok åbnes. content_block er en tom text- eller thinking-blok eller en tool_use-blok med sit id og name.
content_block_delta index, delta {"type": "thinking_delta", "thinking"} Et stykke af reasoning, for en thinking-blok.
content_block_delta index, delta {"type": "text_delta", "text"} Et stykke af svaret, for en text-blok.
content_block_delta index, delta {"type": "input_json_delta", "partial_json"} Argumenterne til et værktøjskald, komplette i én delta, for en tool_use-blok.
content_block_stop index Blokken med dette index er færdig.
message_delta delta {stop_reason, stop_sequence}, usage Svarets afslutning: delta.stop_reason og anmodningens usage.
message_stop Altid sidst.

Blokke nummereres med index i den rækkefølge, de åbnes, og én blok er færdig, før den næste åbnes. Læs hver blok efter dens type, ikke efter dens nummer: en stream kan først åbne en tom text-blok, derefter thinking-blokken og levere svaret i en senere text-blok.

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 af Beskrivelse
Shannon 3-familien, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 En ping-hændelse med dataene {"type": "ping"} hvert 15. sekund.
Hostede open-weight-modeller En kommentarlinje : keepalive hvert 15. sekund, mens modellen arbejder.

En stream, der fejler

En fejl, efter at streamen er startet, er en error-hændelse med samme body som et fejlsvar: {"type": "error", "error": {"type", "message"}}. De afsluttende hændelser, message_delta og message_stop, følger stadig. Behandl svaret som mislykket, og send anmodningen igen.

Fejl

Fejl bruger Anthropics fejlindhold: type er error, og objektet error indeholder en type og en message. Tabellen viser, hvad dette endpoint oftest returnerer. Den fulde liste med, hvad der kan prøves igen, har sin egen side. Fejlhåndtering

400 JSON
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}
Status Type Besked Hvornår
401 authentication_error Missing authentication
Invalid API key
Der blev ikke sendt nogen API-nøgle, eller nøglen er ukendt eller tilbagekaldt.
400 invalid_request_error unknown model: <id> model er ikke et Shannon-model-id.
400 invalid_request_error No user message provided Shannon-niveauer: anmodningen har ingen brugertekst og ingen tools.
400 invalid_request_error <id> does not accept image input Et billede blev sendt til en hostet open-weight-model uden billedinput.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … messages mangler, eller et felt har den forkerte JSON-type.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_tokens er større end det, der er tilbage af din saldo.
429 rate_limit_error Too many requests. Retry in <n>s. Flood protection: mere end 120 anmodninger på ét minut på din konto.
429 rate_limit_error Shannon Coder call quota reached. Upgrade your plan at shannon-ai.com/plan shannon-coder-1: din plans Shannon Coder-kald for det aktuelle 4-timers vindue er brugt.
500 server_error The model backend failed to answer. Please retry. Modellen gav ikke noget svar. Send anmodningen igen.
502 api_error The model backend failed to answer. Please retry. Modellen gav ikke noget svar. Send anmodningen igen.

Tælling af tokens

POST /v1/messages/count_tokens tager samme body som en beskedanmodning (model, system, messages, tools) og returnerer {"input_tokens": n}: antallet af input-tokens, som anmodningen ville blive afregnet for. Den tæller for de hostede open-weight-modeller, er gratis og tælles ikke med i 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)

Tælling har sin egen side med plain-text-endpointet og grænserne. Tælling af tokens