Přeskočit na obsah
Responses API

Responses API

Nové

POST /v1/responses přijímá instrukce a seznam vstupních položek a vrací objekt odpovědi složený z výstupních položek, ve formátu OpenAI Responses. Použijte jej s API responses v SDK OpenAI a s nástroji, které na něm stojí, například Codex CLI. Endpoint si nic nepamatuje: celou konverzaci pošlete s každým požadavkem.

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

Nejmenší požadavek je id modelu a text. Odpověď není streamovaná, pokud o to nepožádáte.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com/v1",
)

response = client.responses.create(
    model="shannon-3",
    input="Say hello in one sentence.",
)

print(response.output_text)

Odpověď je objekt odpovědi. Jeho output obsahuje uvažování, pokud model uvažoval, a zprávu:

200 JSON
{
  "id": "resp_5f0c1e7a9b3d4c62a8e1f07d2b46c9a3",
  "object": "response",
  "created_at": 1791625200,
  "model": "shannon-3",
  "status": "completed",
  "error": null,
  "incomplete_details": null,
  "instructions": null,
  "metadata": {},
  "parallel_tool_calls": true,
  "temperature": null,
  "tool_choice": "auto",
  "tools": [],
  "top_p": null,
  "output": [
    {
      "id": "rs_8a2e6c1f4b7d4e03b9c5a1d70f3e2b64",
      "type": "reasoning",
      "summary": [
        {
          "type": "summary_text",
          "text": "The user wants a greeting in one sentence. Keep it short and friendly."
        }
      ]
    },
    {
      "id": "msg_1c7b9e3a5d2f4a86b0e4c8d19a6f7e25",
      "type": "message",
      "role": "assistant",
      "status": "completed",
      "content": [
        {
          "type": "output_text",
          "text": "Hello, it is good to meet you.",
          "annotations": []
        }
      ]
    }
  ],
  "usage": {
    "input_tokens": 1184,
    "output_tokens": 46,
    "total_tokens": 1230
  }
}

Pole požadavku

Požadavek potřebuje model a input. Sloupec Uplatňují uvádí modely, u kterých pole mění odpověď. Hostované modely s otevřenými váhami jsou dvanáct id ze seznamu modelů; rodina Shannon 3 je shannon-3, shannon-3-pro, shannon-3.1 a shannon-3.1-pro. Modely a ceny

Pole Typ Výchozí Popis Uplatňují
model string Povinné. Id ze seznamu modelů. Na velikosti písmen se nehledí. Chybějící nebo nezveřejněné id vrátí 400 unknown model. Všechny modely
input string | array Řetězec, který se čte jako jedna zpráva uživatele, nebo pole vstupních položek. Viz Vstupní položky níže. Všechny modely
instructions string Instrukce pro model, systémový prompt tohoto formátu. Hostované modely s otevřenými váhami, shannon-1.6-*, shannon-2-*, shannon-coder-1
stream boolean false true pošle odpověď jako server-sent events. Viz Streamování níže. Všechny modely
max_output_tokens integer 4096 Horní limit odpovědi v tokenech. Hodnota mimo 1 až 65,536 se posune do tohoto rozsahu. Je to také částka odložená ze zůstatku po dobu běhu požadavku. Viz Limit výstupu níže. Hostované modely s otevřenými váhami, shannon-1.6-*, shannon-2-*, shannon-coder-1
temperature number Teplota vzorkování. U hostovaných modelů s otevřenými váhami se hodnoty drží mezi 0 a 2. Hostované modely s otevřenými váhami; shannon-1.6-*, shannon-2-* a shannon-coder-1 u nestreamovaných odpovědí
top_p number Nucleus sampling. Hodnoty se drží mezi 0 a 1. Hostované modely s otevřenými váhami
tools array Funkce, které může model volat, v plochém tvaru tohoto formátu: {"type": "function", "name", "description", "parameters"}. Viz Nástroje níže. Všechny modely
tool_choice string | object auto "auto" nechá rozhodnout model. "required" ho přiměje zavolat nástroj. {"type": "function", "name": "…"} ho přiměje zavolat tento nástroj. Hostované modely s otevřenými váhami
reasoning object {"effort": "…"} s off, low, medium nebo high. Jakákoli jiná hodnota vrátí 400. Hostované modely s otevřenými váhami
text object {"format": {…}} žádá o odpověď v JSON. Viz Strukturovaný výstup níže. Všechny úrovně Shannon; hostované modely s otevřenými váhami podle uvedení u každého id

previous_response_id, store, metadata, parallel_tool_calls, truncation, include, user a prompt_cache_key se přijímají, aby stávající klientský kód běžel beze změn. Odpověď nemění. Protože se žádná konverzace neukládá, navazující požadavek nese dřívější kola v input.

Vstupní položky

Vstupní položka je buď zpráva s role a content, nebo typovaná položka, která nese volání nástroje nebo jeho výsledek. content je řetězec nebo pole částí.

Položka Popis Uplatňují
{"role": "user", "content": …} Na co se ptáte. content je řetězec, nebo části input_text a input_image. Všechny modely
{"role": "assistant", "content": …} Dřívější odpověď modelu. content je řetězec, nebo části output_text. Všechny modely
{"role": "system", "content": …}
{"role": "developer", "content": …}
Instrukce uvnitř konverzace. Hostované modely s otevřenými váhami
{"type": "function_call", "call_id": "…", "name": "…", "arguments": "…"} Volání nástroje, které model provedl v dřívější odpovědi. arguments je řetězec JSON. Všechny modely
{"type": "function_call_output", "call_id": "…", "output": "…"} Výsledek tohoto volání. call_id je id volání a output výsledek jako řetězec. Všechny modely

Instrukce dejte do pole instructions. S id z rodiny Shannon 3 dejte instrukce, které musí platit, do zprávy user.

Položky output odpovědi mohou jít zpět do input tak, jak jsou: položky message a function_call se čtou, položky reasoning se přeskakují.

Části obsahu

Část Popis Dostupné na
{"type": "input_text", "text": "…"} Text zprávy uživatele. Všechny modely
{"type": "output_text", "text": "…"} Text zprávy asistenta. Všechny modely
{"type": "input_image", "image_url": "…"} Obrázek, jako URL data: s obsahem base64 nebo jako URL http(s). Rodina Shannon 3, shannon-1.6-lite, shannon-1.6-pro a hostované modely s otevřenými váhami, které uvádějí obrazový vstup
{"type": "input_file", "file_data": "data:application/pdf;base64,…"} Dokument (PDF, Word, PowerPoint nebo Excel): file_data obsahuje URL data:, nebo file_url URL http(s). Rodina Shannon 3

Na úrovních Shannon se obrázky a soubory čtou z poslední položky user v input. Velikosti a limity mají vlastní stránku. Obrázky a soubory

Požadavek s instrukcemi a volbami

Tento požadavek posílá instrukce, konverzaci jako vstupní položky, limit výstupu, teplotu a úsilí o uvažování. Používá hostovaný model s otevřenými váhami, který uplatní všechno z toho.

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com/v1",
)

response = client.responses.create(
    model="DeepSeek-V4-Flash-0731-W4A16-AUTOROUND-REAP",
    instructions="You are a physics teacher. Answer in two sentences.",
    input=[
        {"role": "user", "content": "Why is the sky blue?"},
        {"role": "assistant", "content": "Air scatters blue light more than red light."},
        {"role": "user", "content": "And why are sunsets red?"},
    ],
    max_output_tokens=512,
    temperature=0.3,
    reasoning={"effort": "low"},
)

for item in response.output:
    if item.type == "reasoning":
        print("reasoning:", item.summary[0].text)
    elif item.type == "message":
        print("answer:", item.content[0].text)
print(response.usage)

Odpověď hostovaného modelu s otevřenými váhami má id, object, model, created_at, status, output a usage. Jeho usage přidává tokeny přečtené z cache a tokeny vynaložené na uvažování:

200 JSON
{
  "usage": {
    "input_tokens": 58,
    "input_tokens_details": {
      "cached_tokens": 0
    },
    "output_tokens": 67,
    "output_tokens_details": {
      "reasoning_tokens": 19
    },
    "total_tokens": 125
  }
}

Objekt odpovědi

id, object, status, output a usage jsou v každé odpovědi. Na nich stavějte svůj kód.

Pole Typ Popis Odesílá
id string resp_ následované 32 hexadecimálními znaky. Všechny modely
object string Vždy response. Všechny modely
status string completed. Ve streamu je nejdřív in_progress a v události response.failed je failed. Všechny modely
output array Výstupní položky v pořadí, v jakém je model vytvořil: reasoning, message, function_call. Všechny modely
usage object input_tokens, output_tokens a total_tokens. Všechny modely
usage.input_tokens_details object cached_tokens: vstupní tokeny přečtené z cache promptu. Hostované modely s otevřenými váhami
usage.output_tokens_details object reasoning_tokens: výstupní tokeny vynaložené na uvažování. Hostované modely s otevřenými váhami
model string Kanonické id modelu, který odpověděl. Rodina Shannon 3, hostované modely s otevřenými váhami
created_at integer Čas odpovědi v sekundách Unixu. Rodina Shannon 3, hostované modely s otevřenými váhami
instructions, tools, temperature, … instructions, tools a temperature opakují požadavek. error a incomplete_details jsou null, metadata je {}, parallel_tool_calls je true, tool_choice je auto a top_p je null. Rodina Shannon 3

Výstupní položky

Položka Popis
{"id": "rs_…", "type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} Uvažování modelu jako jedna část summary_text. Přítomno, jen když model uvažoval.
{"id": "msg_…", "type": "message", "role": "assistant", "content": [{"type": "output_text", "text": "…"}]} Odpověď: jedna část output_text s textem.
{"id": "fc_…", "type": "function_call", "call_id": "call_…", "name": "…", "arguments": "…"} Volání nástroje. arguments je řetězec JSON. Výsledek pošlete zpět se stejným call_id.

SDK OpenAI za vás spojí text zprávy do response.output_text.

Streamování

Nastavte stream na true pro server-sent events. Každý rámec má řádek event: s názvem události a řádek data: s objektem JSON; objekt název opakuje v type. Delty přiřazujte k jejich položce podle output_index.

V SDK OpenAI čtěte události podle jejich type:

from openai import OpenAI

client = OpenAI(
    api_key="YOUR_API_KEY",
    base_url="https://api.shannon-ai.com/v1",
)

stream = client.responses.create(
    model="shannon-3",
    input="Explain server-sent events in three sentences.",
    stream=True,
)

for event in stream:
    kind = getattr(event, "type", "error")     # an event without a type is an error event
    if kind == "response.reasoning_summary_text.delta":
        pass                                   # a piece of reasoning: event.delta
    elif kind == "response.output_text.delta":
        print(event.delta, end="", flush=True)
    elif kind == "response.output_item.done" and event.item.type == "function_call":
        print("\ntool call:", event.item.name, event.item.arguments)
    elif kind == "response.completed":
        print("\n", event.response.usage)
    elif kind in ("response.failed", "error"):
        raise RuntimeError("the stream failed, send the request again")

Události přicházejí v tomto pořadí. Skupiny pro uvažování, zprávu a volání nástrojů se objeví, jen když je odpověď má.

Událost Obsah Kdy
response.created response Vždy první. response.status je in_progress a response.output je prázdné.
response.in_progress response Vždy druhá, se stejným objektem.
response.output_item.added output_index, item Začíná uvažování: položka reasoning s prázdným summary.
response.reasoning_summary_text.delta output_index, summary_index, delta Kousek uvažování.
response.reasoning_summary_text.done output_index, summary_index, text Uvažování je kompletní: jeho celý text.
response.output_item.done output_index, item Dokončená položka reasoning.
response.output_item.added output_index, item Začíná odpověď: položka message se statusem in_progress a bez obsahu.
response.content_part.added output_index, content_index, part Otevře se prázdná část output_text.
response.output_text.delta output_index, content_index, delta Kousek odpovědi.
response.output_text.done output_index, content_index, text Odpověď je kompletní: její celý text.
response.content_part.done output_index, content_index, part Dokončená část output_text.
response.output_item.done output_index, item Dokončená položka message se statusem completed.
response.output_item.added output_index, item Začíná volání nástroje: položka function_call s call_id, name a prázdnými arguments.
response.function_call_arguments.delta output_index, delta Argumenty volání, kompletní v jedné deltě.
response.function_call_arguments.done output_index, arguments Stejné argumenty, jako arguments.
response.output_item.done output_index, item Dokončená položka function_call.
response.completed response Při úspěchu vždy poslední: celý objekt odpovědi s output a usage.
200 text/event-stream
event: response.created
data: {"type":"response.created","response":{"id":"resp_5f0c…","object":"response","status":"in_progress","output":[], …}}

event: response.in_progress
data: {"type":"response.in_progress","response":{"id":"resp_5f0c…","object":"response","status":"in_progress","output":[], …}}

event: response.output_item.added
data: {"type":"response.output_item.added","output_index":0,"item":{"id":"msg_1c7b…","type":"message","role":"assistant","status":"in_progress","content":[]}}

event: response.content_part.added
data: {"type":"response.content_part.added","output_index":0,"content_index":0,"part":{"type":"output_text","text":""}}

event: response.output_text.delta
data: {"type":"response.output_text.delta","output_index":0,"content_index":0,"delta":"Server-sent"}

event: response.output_text.delta
data: {"type":"response.output_text.delta","output_index":0,"content_index":0,"delta":" events let a server push text over one HTTP reply."}

event: response.output_text.done
data: {"type":"response.output_text.done","output_index":0,"content_index":0,"text":"Server-sent events let a server push text over one HTTP reply."}

event: response.content_part.done
data: {"type":"response.content_part.done","output_index":0,"content_index":0,"part":{"type":"output_text","text":"Server-sent events let a server push text over one HTTP reply."}}

event: response.output_item.done
data: {"type":"response.output_item.done","output_index":0,"item":{"id":"msg_1c7b…","type":"message","role":"assistant","status":"completed","content":[{"type":"output_text","text":"Server-sent events let a server push text over one HTTP reply.","annotations":[]}]}}

event: response.completed
data: {"type":"response.completed","response":{"id":"resp_5f0c…","object":"response","status":"completed","output":[…],"usage":{"input_tokens":1190,"output_tokens":18,"total_tokens":1208}, …}}

Stream, který selže

Na úrovních Shannon končí neúspěšná odpověď událostí response.failed místo response.completed. Její response.status je failed a response.error obsahuje code, rate_limit_exceeded nebo server_error, a message.

U hostovaných modelů s otevřenými váhami je selhání událost error s code api_error a message. Po ní stále následuje response.completed.

Stream považujte za neúspěšný, když obsahuje událost response.failed nebo error, a pošlete požadavek znovu.

Nástroje

Nástroj je funkce, kterou spouští váš kód. Popište ji v tools; když ji model chce, odpověď obsahuje položku function_call místo zprávy nebo vedle ní.

Definice nástroje v tools:

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

output odpovědi, která jej volá:

200 output
[
  {
    "id": "call_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
    "type": "function_call",
    "name": "get_weather",
    "call_id": "call_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
    "arguments": "{\"city\":\"Paris\"}"
  }
]

Spusťte funkci a pak pošlete požadavek znovu s přidaným voláním a jeho výsledkem v input:

input
[
  {
    "role": "user",
    "content": "What is the weather in Paris?"
  },
  {
    "type": "function_call",
    "call_id": "call_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
    "name": "get_weather",
    "arguments": "{\"city\":\"Paris\"}"
  },
  {
    "type": "function_call_output",
    "call_id": "call_3d9a7c1e5b2f4a60c8e1d7f09b24a6c5",
    "output": "{\"temperature_c\": 18, \"sky\": \"cloudy\"}"
  }
]

Čtou se jen nástroje typu function. U shannon-1.6-*, shannon-2-* a shannon-coder-1 se schéma parameters zredukuje na běžná klíčová slova JSON Schema: oneOf se čte jako anyOf a klíčová slova jako $ref, additionalProperties, const, default a title se modelu nepředávají.

Hodnoty tool_choice required a pojmenovaná funkce uplatňují hostované modely s otevřenými váhami.

Smyčka nástrojů je popsána celá na vlastní stránce. Volání funkcí

Strukturovaný výstup

Tento formát zapisuje strukturovaný výstup jako text.format. Schéma leží přímo v format, vedle name a strict, ne pod členem json_schema jako u Chat Completions.

  • {"type": "json_object"} žádá o libovolný objekt JSON.
  • {"type": "json_schema", "name", "schema", "strict"} žádá o JSON podle vašeho schématu. strict je true, když jej vynecháte.
POST /v1/responses
{
  "model": "shannon-1.6-lite",
  "input": "Extract the city and the date: 'The conference opens in Lisbon on 12 May 2027.'",
  "text": {
    "format": {
      "type": "json_schema",
      "name": "event",
      "strict": true,
      "schema": {
        "type": "object",
        "properties": {
          "city": {
            "type": "string"
          },
          "date": {
            "type": "string",
            "description": "ISO 8601 date"
          }
        },
        "required": [
          "city",
          "date"
        ]
      }
    }
  }
}

JSON přichází jako text v části output_text zprávy; zpracujte jej sami. Hostovaný model s otevřenými váhami bez strukturovaného výstupu vrací 400.

output_text
{"city": "Lisbon", "date": "2027-05-12"}

Který model přijímá kterou formu, je uvedeno na vlastní stránce. Strukturované výstupy

Uvažování

Model, který uvažuje, vrací své uvažování jako výstupní položku typu reasoning, před zprávou. Ve streamu přichází jako události response.reasoning_summary_text.delta.

Hostované modely s otevřenými váhami uplatňují reasoning.effort: off, low, medium nebo high, přičemž high platí, když nic neposíláte. off nevrací žádnou položku uvažování. Pošlete jej jako objekt; holý řetězec se na tomto endpointu nečte.

Úrovně úsilí jsou popsány na vlastní stránce. Úsilí uvažování

Limit výstupu

max_output_tokens je 4,096, když jej neposíláte. Je to počet tokenů odložených ze zůstatku na začátku požadavku; když je odpověď kompletní, tato částka se nahradí tím, co požadavek použil. Hodnota, která se nevejde do zbývajícího zůstatku, vrátí 429 Quota exceeded.

Omezuje délku odpovědi u shannon-1.6-*, shannon-2-* a shannon-coder-1 a délku textu odpovědi u hostovaných modelů s otevřenými váhami.

Na tomto endpointu se shannon-coder-1 účtuje v tokenech ze zůstatku, jako každý jiný model.

Tělo požadavku může mít až 32 MiB. Limity a zůstatek

Chyby

Chyby používají tělo chyby OpenAI: objekt error s type a message; některé nesou také code a param s hodnotou null. Tabulka uvádí, co tento endpoint vrací nejčastěji. Úplný seznam, včetně toho, co opakovat, má vlastní stránku. Zpracování chyb

Status Typ Zpráva Kdy
401 authentication_error Missing authentication
Invalid API key
Nebyl poslán žádný klíč API, nebo je klíč neznámý či zrušený.
400 invalid_request_error unknown model: <id> model chybí, nebo není zveřejněné id.
400 invalid_request_error No user message provided. Úrovně Shannon: input neobsahuje žádný text uživatele.
400 invalid_request_error <id> does not accept image input Obrázek byl poslán hostovanému modelu s otevřenými váhami bez obrazového vstupu.
400 invalid_request_error <id> does not accept response_format text.format byl poslán hostovanému modelu s otevřenými váhami bez strukturovaného výstupu.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning.effort obsahuje hodnotu mimo seznam.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Tělo je platný JSON, ale některé pole má špatný typ.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_output_tokens je větší než to, co zbývá ve vašem zůstatku.
429 rate_limit_error Too many requests. Retry in <n>s. Ochrana proti zahlcení: více než 120 požadavků za jednu minutu na vašem účtu.
500 api_error The model backend failed to answer. Please retry. Model nevytvořil odpověď. Pošlete požadavek znovu.
502 api_error The model backend failed to answer. Please retry. Totéž, u hostovaných modelů s otevřenými váhami.
504 api_error upstream timed out Hostovanému modelu s otevřenými váhami trvalo déle, než je časový limit nestreamované odpovědi. Pošlete požadavek s stream nastaveným na true.