Salti al la enhavo
Anthropic

Anthropic

POST /v1/messages prenas peton en la formato Anthropic Messages kaj respondas en la sama formato, fluate aŭ ne. Uzu ĝin kun la Anthropic SDK kaj kun iloj konstruitaj sur ĝi, kiel Claude Code: agordu la bazan URL, uzu vian Shannon API-ŝlosilon kaj nomu Shannon-modelo-id.

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

Direktu la Anthropic SDK al la baza URL de Shannon. La SDK aldonas /v1/messages kaj sendas vian ŝlosilon en la kapo 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)

La respondo estas mesaĝo, kies content estas listo de blokoj. Trovu la blokojn laŭ ilia type: se la modelo rezonis, la unua bloko estas thinking kaj la teksto sekvas post ĝi.

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
  }
}

Kapoj

Kapo Valoro Priskribo
x-api-key YOUR_API_KEY Via API-ŝlosilo. Authorization: Bearer YOUR_API_KEY estas akceptata anstataŭ ĝi.
content-type application/json Deviga.
anthropic-version 2023-06-01 Akceptata, ne necesa. La Anthropic SDK sendas 2023-06-01; la respondo havas la saman formaton kia ajn estas la valoro.
anthropic-beta Akceptata, ne necesa.
x-request-id Laŭvola. Via propra id por la peto. Ĝi revenas senŝanĝe en la respondo; sen ĝi la respondo portas id de 12 deksesumaj signoj.

Kampoj de peto

Nur messages estas deviga. La kolumno Aplikata de nomas la modelojn, ĉe kiuj kampo ŝanĝas la respondon. La gastigitaj malfermpezaj modeloj estas la dek du id-oj de la modellisto; la familio Shannon 3 estas shannon-3, shannon-3-pro, shannon-3.1 kaj shannon-3.1-pro. Modeloj kaj prezoj

Kampo Tipo Defaŭlto Priskribo Aplikata de
model string shannon-1.6-lite Shannon-modelo-id el la modellisto. Sendu ĝin kun ĉiu peto. La kongruigo ne distingas majusklojn. Ĉiu alia nomo redonas 400 unknown model, do ilo, kiu sendas siajn proprajn modelnomojn, devas esti agordita al Shannon-id. Ĉiuj modeloj
messages array Deviga. La konversacio, plej malnova mesaĝo unue, kun la roloj user kaj assistant. Vidu Mesaĝoj kaj enhavaj blokoj sube. Ĉiuj modeloj
system string | array Instrukcioj por la modelo: ĉeno aŭ tabelo de tekstaj blokoj. Vidu System prompt sube. Gastigitaj malfermpezaj modeloj, shannon-1.6-*, shannon-2-*, shannon-coder-1
max_tokens integer 4096 Supra limo de la respondo, en tokenoj. Laŭvola ĉe ĉi tiu endpoint; la Anthropic SDK ĉiam sendas ĝin. Valoro ekster 1 ĝis 65,536 estas movita en tiun intervalon. Ĝi ankaŭ estas la kvanto, kiu estas rezervita el via saldo dum la peto funkcias. Gastigitaj malfermpezaj modeloj, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
stream boolean false true sendas la respondon kiel server-sent events. Vidu Streaming sube. Ĉiuj modeloj
temperature number Specimena temperaturo. Ĉe la gastigitaj malfermpezaj modeloj la valoroj estas tenataj inter 0 kaj 2. Gastigitaj malfermpezaj modeloj, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1
top_p number Specimenado per nukleo (nucleus sampling). Gastigitaj malfermpezaj modeloj
stop_sequences array Ĝis 4 ĉenoj. La respondo finiĝas antaŭ la unua, kiu aperas. stop_reason restas end_turn. Gastigitaj malfermpezaj modeloj
tools array La iloj, kiujn la modelo rajtas voki, ĉiu kiel {"name", "description", "input_schema"}. Vidu Tools sube. Ĉiuj modeloj
tool_choice object {"type": "auto"} lasas la modelon decidi, {"type": "any"} devigas ĝin voki ilon, {"type": "tool", "name": "…"} devigas ĝin voki tiun ilon. Gastigitaj malfermpezaj modeloj
thinking object Kiom la modelo rezonas antaŭ ol respondi. Vidu Thinking sube. Gastigitaj malfermpezaj modeloj
web_search boolean false Aldono de Shannon al la formato: true lasas la modelon serĉi en la reto antaŭ ol respondi. shannon-1.6-*, shannon-2-*, familio Shannon 3

Sen max_tokens la valoro estas 4,096, kaj 65,536 ĉe shannon-coder-1.

metadata, top_k, service_tier kaj markoj cache_control sur blokoj estas akceptataj, por ke ekzistanta klienta kodo funkciu senŝanĝe. Ili ne ŝanĝas la respondon; prompt caching ĉe la gastigitaj malfermpezaj modeloj estas aŭtomata.

JSON-respondo laŭ skemo estas petata per response_format ĉe Chat Completions kaj per text.format ĉe Responses. Strukturitaj eligoj

Peto kun system prompt kaj thinking

Ĉi tiu peto sendas system prompt, pensbuĝeton, temperaturon kaj haltigan sekvencon. Ĝi uzas gastigitan malfermpezan modelon, kiu aplikas ĉiujn.

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)

Ĉe la gastigitaj malfermpezaj modeloj usage raportas la tokenojn legitajn el la prompt-kaŝmemoro aparte de la aliaj enirtokenoj.

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

System prompt

system estas ĉeno aŭ tabelo de tekstaj blokoj en la formo [{"type": "text", "text": "…"}]. La tekstoj de la blokoj estas kunigitaj per linisalto.

Ĝin aplikas la gastigitaj malfermpezaj modeloj, shannon-1.6-lite, shannon-1.6-pro, shannon-2-lite, shannon-2-pro kaj shannon-coder-1. Kun id de la familio Shannon 3 metu instrukciojn, kiuj devas validi, en la uzantan mesaĝon.

Mesaĝoj kaj enhavaj blokoj

Mesaĝo havas role, user aŭ assistant, kaj content. content estas ĉeno aŭ tabelo de blokoj.

Bloko Priskribo Disponebla ĉe
{"type": "text", "text": "…"} Teksto. Ĉiuj modeloj
{"type": "image", "source": {"type": "base64", "media_type": "image/png", "data": "…"}}
{"type": "image", "source": {"type": "url", "url": "…"}}
Bildo en mesaĝo user, kiel base64 aŭ per URL. Familio Shannon 3, shannon-1.6-lite, shannon-1.6-pro kaj la gastigitaj malfermpezaj modeloj, kiuj listigas bildan enigon
{"type": "document", "source": {"type": "base64", "media_type": "application/pdf", "data": "…"}} Dokumento (PDF, Word, PowerPoint aŭ Excel) en mesaĝo user, kiel base64 aŭ per URL. Familio Shannon 3
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} En mesaĝo assistant: ilovoko, kiun la modelo faris en pli frua respondo. Ĉiuj modeloj
{"type": "tool_result", "tool_use_id": "toolu_…", "content": "…"} En mesaĝo user: la rezulto de tiu voko. content estas ĉeno aŭ listo de tekstaj blokoj. Ĉiuj modeloj

Vi povas resendi la content de pli frua respondo senŝanĝe: blokoj text kaj tool_use estas legataj, blokoj thinking estas preterlasataj.

Ĉe la Shannon-niveloj bildoj kaj dokumentoj estas legataj el la lasta mesaĝo user. Grandoj kaj limoj havas sian propran paĝon. Bildoj kaj dosieroj

Thinking

La gastigitaj malfermpezaj modeloj tradukas thinking al peno de reasoning. Sen la kampo la peno estas alta.

Formo budget_tokens Efiko
{"type": "disabled"} Neniu reasoning. La respondo ne havas blokon thinking.
{"type": "enabled", "budget_tokens": 2048} ≤ 2,048 Malalta peno.
{"type": "enabled", "budget_tokens": 8192} ≤ 8,192 Meza peno.
{"type": "enabled", "budget_tokens": 16000} > 8,192 Alta peno.

Modelo, kiu rezonas, redonas sian reasoning kiel blokon {"type": "thinking", "thinking": "…"} antaŭ la teksto. La Shannon-niveloj, kiuj rezonas, ankaŭ sendas ĝin.

La penoj estas priskribitaj en sia propra paĝo. Peno de reasoning

Tools

Ilo estas funkcio, kiun via kodo plenumas. Priskribu ĉiun per name, description kaj input_schema. Kiam la modelo volas ilon, la respondo enhavas blokon tool_use kaj stop_reason estas tool_use.

Ilo-difino en tools:

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

La content de respondo, kiu vokas ĝin:

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

Plenumu la ilon, poste sendu la peton denove kun la voko kaj bloko tool_result aldonitaj al 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

Formo Efiko Aplikata de
{"type": "auto"} La modelo mem decidas, ĉu voki ilon. Tio estas la defaŭlto. Ĉiuj modeloj
{"type": "any"} La modelo devas voki unu el la iloj. Gastigitaj malfermpezaj modeloj
{"type": "tool", "name": "…"} La modelo devas voki la nomitan ilon. Gastigitaj malfermpezaj modeloj

Nur iloj kun input_schema estas legataj. Retserĉo ne estas ilo ĉe ĉi tiu endpoint: agordu la kampon web_search.

La ilo-buklo estas plene priskribita en sia propra paĝo. Funkci-alvokoj

La respondo

Kampo Tipo Priskribo Sendita de
id string msg_ sekvata de 32 deksesumaj signoj. Ĉiuj modeloj
type string Ĉiam message. Ĉiuj modeloj
role string Ĉiam assistant. Ĉiuj modeloj
model string La kanona id de la modelo, kiu respondis. Ĉiuj modeloj
content array La blokoj de la respondo, en ĉi tiu ordo: thinking se la modelo rezonis, text, poste unu tool_use por ĉiu ilovoko. Ĉiuj modeloj
stop_reason string Kial la respondo finiĝis. Vidu la valorojn sube. Ĉiuj modeloj
usage object input_tokens kaj output_tokens. Ĉiuj modeloj
sources array Nur ĉe peto kun web_search: true, kies serĉo trovis ion: la rezultoj, kiujn la modelo ricevis, ĉiu kun index, title kaj url. [1] en la respondo estas la enskribo kun index 1. En fluo ĝi venas kun la evento message_delta. shannon-1.6-*, shannon-2-*, familio Shannon 3
usage.cache_read_input_tokens integer cache_read_input_tokens estas la parto de la prompt legita el la kaŝmemoro; input_tokens estas la resto. cache_creation_input_tokens ĉiam estas 0. Gastigitaj malfermpezaj modeloj

Blokoj de la respondo

Bloko Priskribo
{"type": "thinking", "thinking": "…"} La reasoning de la modelo. Ne ekzistas membro signature.
{"type": "text", "text": "…"} La teksto de la respondo. Ĝi povas esti malplena, kiam la respondo estas ilovoko.
{"type": "tool_use", "id": "toolu_…", "name": "…", "input": {…}} Ilovoko. input estas JSON-objekto. Resendu la rezulton kun la sama id.

stop_reason

stop_reason Priskribo Sendita de
end_turn La modelo finis sian respondon, aŭ aperis unu el viaj stop_sequences. Ĉiuj modeloj
tool_use La respondo enhavas unu aŭ pli da ilovokoj. Ĉiuj modeloj
max_tokens La respondo estis detranĉita ĉe la eliga limo. Familio Shannon 3, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1, en fluoj

Streaming

Agordu stream al true por server-sent events. Ĉiu kadro havas linion event: kun la nomo de la evento kaj linion data: kun JSON-objekto, kiu ripetas la nomon en type. La stream-helpiloj de la Anthropic SDK legas ĉi tiujn eventojn por vi:

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)

La eventoj, laŭ la ordo de alveno:

Evento Datumoj Kiam
message_start message Ĉiam unua. message enhavas la id, la rolon, la modelon, malplenan content kaj usage, kiu komenciĝas je nulo.
content_block_start index, content_block Bloko malfermiĝas. content_block estas malplena bloko text aŭ thinking, aŭ bloko tool_use kun sia id kaj name.
content_block_delta index, delta {"type": "thinking_delta", "thinking"} Peco de la reasoning, por bloko thinking.
content_block_delta index, delta {"type": "text_delta", "text"} Peco de la respondo, por bloko text.
content_block_delta index, delta {"type": "input_json_delta", "partial_json"} La argumentoj de ilovoko, kompletaj en unu delta, por bloko tool_use.
content_block_stop index La bloko kun ĉi tiu index estas kompleta.
message_delta delta {stop_reason, stop_sequence}, usage La fino de la respondo: delta.stop_reason, kaj la usage de la peto.
message_stop Ĉiam lasta.

La blokoj estas numeritaj per index laŭ la ordo de malfermo, kaj unu bloko estas kompleta antaŭ ol la sekva malfermiĝas. Legu ĉiun blokon laŭ ĝia tipo, ne laŭ ĝia numero: fluo povas unue malfermi malplenan blokon text, poste la blokon thinking, kaj liveri la respondon en pli posta bloko text.

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

Sendita de Priskribo
Familio Shannon 3, shannon-1.6-lite, shannon-1.6-pro, shannon-coder-1 Evento ping kun la datumoj {"type": "ping"}, ĉiujn 15 sekundojn.
Gastigitaj malfermpezaj modeloj Komenta linio : keepalive, ĉiujn 15 sekundojn dum la modelo laboras.

Fluo, kiu malsukcesas

Malsukceso post la komenco de la fluo estas evento error kun la sama korpo kiel erarrespondo: {"type": "error", "error": {"type", "message"}}. La fermaj eventoj, message_delta kaj message_stop, ankoraŭ sekvas. Traktu la respondon kiel malsukcesan kaj sendu la peton denove.

Eraroj

Eraroj uzas la erarkorpon de Anthropic: type estas error, kaj la objekto error enhavas type kaj message. La tabelo listigas tion, kion ĉi tiu endpoint plej ofte redonas. La plena listo, kun indiko kiam reprovi, havas sian propran paĝon. Erarotraktado

400 JSON
{
  "type": "error",
  "error": {
    "type": "invalid_request_error",
    "message": "unknown model: no-such-model"
  }
}
Stato Tipo Mesaĝo Kiam
401 authentication_error Missing authentication
Invalid API key
Neniu API-ŝlosilo estis sendita, aŭ la ŝlosilo estas nekonata aŭ revokita.
400 invalid_request_error unknown model: <id> model ne estas Shannon-modelo-id.
400 invalid_request_error No user message provided Shannon-niveloj: la peto havas nek uzantan tekston nek tools.
400 invalid_request_error <id> does not accept image input Bildo estis sendita al gastigita malfermpeza modelo sen bilda enigo.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … messages mankas, aŭ kampo havas malĝustan JSON-tipon.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_tokens estas pli granda ol tio, kio restas el via saldo.
429 rate_limit_error Too many requests. Retry in <n>s. Flood protection: pli ol 120 petoj en unu minuto en via konto.
429 rate_limit_error Shannon Coder call quota reached. Upgrade your plan at shannon-ai.com/plan shannon-coder-1: la vokoj de Shannon Coder de via plano por la nuna 4-hora fenestro estas elĉerpitaj.
500 server_error The model backend failed to answer. Please retry. La modelo ne produktis respondon. Sendu la peton denove.
502 api_error The model backend failed to answer. Please retry. La modelo ne produktis respondon. Sendu la peton denove.

Kalkulado de tokenoj

POST /v1/messages/count_tokens prenas la saman korpon kiel peto de mesaĝo (model, system, messages, tools) kaj redonas {"input_tokens": n}: la nombron de enirtokenoj, kiujn la peto kostus. Ĝi validas por la gastigitaj malfermpezaj modeloj, estas senpaga kaj ne estas kalkulata de la 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)

Kalkulado havas sian propran paĝon, kun la endpoint por simpla teksto kaj la limoj. Kalkulado de tokenoj