Ugrás a tartalomra
Responses API

Responses API

Új

A POST /v1/responses utasításokat és bemeneti elemek listáját fogadja, és kimeneti elemekből álló response objektumot ad vissza, az OpenAI Responses formátumban. Használd az OpenAI SDK responses API-jával, és az arra épülő eszközökkel, például a Codex CLI-vel. A végpont nem tart fenn állapotot: minden kéréssel küldd el a teljes beszélgetést.

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

A legkisebb kérés egy modellazonosító és egy szöveg. A válasz nem streamelt, hacsak nem kéred.

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)

A válasz egy response objektum. Az output mezője a gondolkodást, ha a modell gondolkodott, és az üzenetet tartalmazza:

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

Kérésmezők

A kéréshez a model és az input kell. Az Érvényesíti oszlop megnevezi azokat a modelleket, amelyeken egy mező módosítja a választ. A hosztolt nyílt súlyú modellek a modellista tizenkét azonosítója; a Shannon 3 család a shannon-3, shannon-3-pro, shannon-3.1 és shannon-3.1-pro. Modellek és árak

Mező Típus Alapérték Leírás Érvényesíti
model string Kötelező. Egy azonosító a modelllistából. Az egyezés nem kis- és nagybetű érzékeny. A hiányzó vagy nem közzétett azonosítóra 400 unknown model a válasz. Minden modell
input string | array String, amelyet egyetlen user üzenetként olvas, vagy bemeneti elemek tömbje. Lásd lejjebb: Bemeneti elemek. Minden modell
instructions string Utasítások a modellnek, ennek a formátumnak a rendszerprompt-ja. Hosztolt nyílt súlyú modellek, shannon-1.6-*, shannon-2-*, shannon-coder-1
stream boolean false A true a választ server-sent eventként küldi. Lásd lejjebb: Streaming. Minden modell
max_output_tokens integer 4096 A válasz felső korlátja tokenben. Az 1-től 65,536-ig terjedő tartományon kívüli értéket e tartományba igazítja. Ez az a mennyiség is, amelyet a kérés futása alatt félretesz az egyenlegedből. Lásd lejjebb: Kimeneti korlát. Hosztolt nyílt súlyú modellek, shannon-1.6-*, shannon-2-*, shannon-coder-1
temperature number Mintavételezési hőmérséklet. A hosztolt nyílt súlyú modelleknél az értékeket 0 és 2 között tartja. Hosztolt nyílt súlyú modellek; a shannon-1.6-*, shannon-2-* és shannon-coder-1 a nem streamelt válaszoknál
top_p number Nucleus mintavételezés. Az értékeket 0 és 1 között tartja. Hosztolt nyílt súlyú modellek
tools array A függvények, amelyeket a modell hívhat, ennek a formátumnak az egyszerű alakjában: {"type": "function", "name", "description", "parameters"}. Lásd lejjebb: Eszközök. Minden modell
tool_choice string | object auto Az "auto" a modellre bízza a döntést. A "required" eszközhívásra kényszeríti. A {"type": "function", "name": "…"} azt az eszközt hívatja vele. Hosztolt nyílt súlyú modellek
reasoning object {"effort": "…"} az off, low, medium vagy high értékkel. Bármely más érték 400 választ ad. Hosztolt nyílt súlyú modellek
text object A {"format": {…}} JSON-választ kér. Lásd lejjebb: Strukturált kimenet. Minden Shannon szint; a hosztolt nyílt súlyú modellek azonosítónként a listának megfelelően

A previous_response_id, store, metadata, parallel_tool_calls, truncation, include, user és prompt_cache_key mezőt elfogadja, hogy a meglévő kliensprogram változtatás nélkül fusson. Nem módosítják a választ. Mivel nem tárol beszélgetést, a követő kérés a korábbi fordulókat az input mezőben hordozza.

Bemeneti elemek

A bemeneti elem vagy üzenet, role és content mezővel, vagy típusos elem, amely eszközhívást vagy annak eredményét hordozza. A content string vagy részek tömbje.

Elem Leírás Érvényesíti
{"role": "user", "content": …} Amit kérdezel. A content string, vagy input_text és input_image részek. Minden modell
{"role": "assistant", "content": …} A modell egy korábbi válasza. A content string, vagy output_text részek. Minden modell
{"role": "system", "content": …}
{"role": "developer", "content": …}
Utasítások a beszélgetésen belül. Hosztolt nyílt súlyú modellek
{"type": "function_call", "call_id": "…", "name": "…", "arguments": "…"} Egy eszközhívás, amelyet a modell egy korábbi válaszban tett. Az arguments JSON-string. Minden modell
{"type": "function_call_output", "call_id": "…", "output": "…"} A hívás eredménye. A call_id a hívás azonosítója, az output pedig az eredmény stringként. Minden modell

Az utasításokat az instructions mezőbe írd. Shannon 3 családbeli azonosítónál a kötelezően betartandó utasításokat a user üzenetbe tedd.

A válasz output elemei változtatás nélkül mehetnek vissza az input mezőbe: a message és function_call elemeket olvassa, a reasoning elemeket átugorja.

Tartalmi részek

Rész Leírás Elérhető itt
{"type": "input_text", "text": "…"} A user üzenet szövege. Minden modell
{"type": "output_text", "text": "…"} Az assistant üzenet szövege. Minden modell
{"type": "input_image", "image_url": "…"} Kép, base64 tartalmú data: URL-ként vagy http(s) URL-ként. Shannon 3 család, shannon-1.6-lite, shannon-1.6-pro, valamint azok a hosztolt nyílt súlyú modellek, amelyek képbemenetet jeleznek
{"type": "input_file", "file_data": "data:application/pdf;base64,…"} Dokumentum (PDF, Word, PowerPoint vagy Excel): a file_data egy data: URL-t, a file_url egy http(s) URL-t tartalmaz. Shannon 3 család

A Shannon szinteken a képeket és fájlokat az input utolsó user eleméből olvassa. A méretek és korlátok külön oldalon vannak. Képek és fájlok

Kérés utasításokkal és beállításokkal

Ez a kérés utasításokat, bemeneti elemekként megadott beszélgetést, kimeneti korlátot, hőmérsékletet és gondolkodási effortot küld. Hosztolt nyílt súlyú modellt használ, amely mindegyiket érvényesíti.

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)

A hosztolt nyílt súlyú modell válasza tartalmazza az id, object, model, created_at, status, output és usage mezőt. A usage kiegészül a gyorsítványból olvasott és a gondolkodásra fordított tokenekkel:

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

A response objektum

Az id, object, status, output és usage minden válaszban megvan. A kódodat ezekre építsd.

Mező Típus Leírás Küldi
id string A resp_ után 32 hexadecimális karakter áll. Minden modell
object string Mindig response. Minden modell
status string completed. Streamben először in_progress, a response.failed eseményben pedig failed. Minden modell
output array A kimeneti elemek abban a sorrendben, ahogy a modell létrehozta őket: reasoning, message, function_call. Minden modell
usage object input_tokens, output_tokens és total_tokens. Minden modell
usage.input_tokens_details object cached_tokens: a prompt-gyorsítványból olvasott bemeneti tokenek. Hosztolt nyílt súlyú modellek
usage.output_tokens_details object reasoning_tokens: a gondolkodásra fordított kimeneti tokenek. Hosztolt nyílt súlyú modellek
model string A válaszoló modell kanonikus azonosítója. Shannon 3 család, hosztolt nyílt súlyú modellek
created_at integer A válasz ideje Unix-másodpercben. Shannon 3 család, hosztolt nyílt súlyú modellek
instructions, tools, temperature, … Az instructions, a tools és a temperature megismétli a kérést. Az error és az incomplete_details null, a metadata {}, a parallel_tool_calls true, a tool_choice auto, a top_p pedig null. Shannon 3 család

Kimeneti elemek

Elem Leírás
{"id": "rs_…", "type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} A modell gondolkodása egyetlen summary_text részként. Csak akkor van jelen, ha a modell gondolkodott.
{"id": "msg_…", "type": "message", "role": "assistant", "content": [{"type": "output_text", "text": "…"}]} A válasz: egy output_text rész a szöveggel.
{"id": "fc_…", "type": "function_call", "call_id": "call_…", "name": "…", "arguments": "…"} Eszközhívás. Az arguments JSON-string. Az eredményt ugyanazzal a call_id értékkel küldd vissza.

Az OpenAI SDK-k összefűzik helyetted az üzenet szövegét a response.output_text mezőben.

Streaming

Állítsd a stream mezőt true értékre a server-sent eventekhez. Minden frame tartalmaz egy event: sort az esemény nevével és egy data: sort JSON-objektummal; az objektum a nevet megismétli a type mezőben. A deltákat az output_index alapján párosítsd az elemükhöz.

Az OpenAI SDK-val az eseményeket a type alapján olvasd:

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")

Az események ebben a sorrendben érkeznek. A gondolkodás, az üzenet és az eszközhívások csoportjai csak akkor jelennek meg, ha a válasz tartalmazza őket.

Esemény Tartalom Mikor
response.created response Mindig az első. A response.status értéke in_progress, a response.output üres.
response.in_progress response Mindig a második, ugyanazzal az objektummal.
response.output_item.added output_index, item A gondolkodás indul: egy reasoning elem üres summary mezővel.
response.reasoning_summary_text.delta output_index, summary_index, delta A gondolkodás egy darabja.
response.reasoning_summary_text.done output_index, summary_index, text A gondolkodás teljes: a teljes text.
response.output_item.done output_index, item A kész reasoning elem.
response.output_item.added output_index, item A válasz indul: egy message elem in_progress státusszal és tartalom nélkül.
response.content_part.added output_index, content_index, part Egy üres output_text rész nyílik.
response.output_text.delta output_index, content_index, delta A válasz egy darabja.
response.output_text.done output_index, content_index, text A válasz teljes: a teljes text.
response.content_part.done output_index, content_index, part A kész output_text rész.
response.output_item.done output_index, item A kész message elem completed státusszal.
response.output_item.added output_index, item Eszközhívás indul: egy function_call elem call_id, name és üres arguments mezővel.
response.function_call_arguments.delta output_index, delta A hívás argumentumai, egy deltában, teljesen.
response.function_call_arguments.done output_index, arguments Ugyanezek az argumentumok arguments néven.
response.output_item.done output_index, item A kész function_call elem.
response.completed response Siker esetén mindig az utolsó: a teljes response objektum output és usage mezővel.
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}, …}}

Hibázó stream

A Shannon szinteken a sikertelen válasz a response.completed helyett response.failed eseménnyel végződik. A response.status értéke failed, a response.error pedig code (rate_limit_exceeded vagy server_error) és message mezőt tartalmaz.

A hosztolt nyílt súlyú modelleknél a hiba egy error esemény api_error code értékkel és egy message mezővel. Ezt még követi a response.completed.

Tekints hibásnak egy streamet, ha response.failed vagy error eseményt tartalmaz, és küldd el újra a kérést.

Eszközök

Az eszköz egy függvény, amelyet a kódod futtat. Írd le a tools mezőben; ha a modell kéri, a válasz az üzenet helyett vagy mellett egy function_call elemet tartalmaz.

Eszközdefiníció a tools mezőben:

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

A hívást tartalmazó válasz output mezője:

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

Futtasd a függvényt, majd küldd el újra a kérést úgy, hogy a hívás és az eredménye hozzá van adva az input mezőhöz:

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\"}"
  }
]

Csak a function típusú eszközöket olvassa. A shannon-1.6-*, shannon-2-* és shannon-coder-1 modelleken a parameters sémát a gyakori JSON Schema kulcsszavakra szűkíti: a oneOf értéket anyOf szerint olvassa, az olyan kulcsszavakat, mint a $ref, additionalProperties, const, default és title, nem adja át a modellnek.

A tool_choice required értékét és a megnevezett függvényt a hosztolt nyílt súlyú modellek érvényesítik.

Az eszközciklust külön oldal írja le teljes egészében. Funkcióhívás

Strukturált kimenet

Ez a formátum a strukturált kimenetet text.format néven írja. A séma közvetlenül a format mezőben áll, a name és a strict mellett, nem json_schema tag alatt, mint a Chat Completions végponton.

  • A {"type": "json_object"} tetszőleges JSON-objektumot kér.
  • A {"type": "json_schema", "name", "schema", "strict"} a sémádat követő JSON-t kér. A strict értéke true, ha kihagyod.
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"
        ]
      }
    }
  }
}

A JSON szövegként érkezik az üzenet output_text részében; értelmezd (parse) magad. A strukturált kimenet nélküli hosztolt nyílt súlyú modell 400 választ ad.

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

Hogy melyik modell melyik formát fogadja, külön oldalon van felsorolva. Strukturált kimenetek

Gondolkodás (reasoning)

A gondolkodó modell a gondolkodását reasoning típusú kimeneti elemként adja vissza, az üzenet előtt. Streamben response.reasoning_summary_text.delta eseményekként érkezik.

A hosztolt nyílt súlyú modellek a reasoning.effort mezőt érvényesítik: off, low, medium vagy high, és high, ha semmit nem küldesz. Az off nem ad vissza gondolkodási elemet. Objektumként küldd; a sima stringet ezen a végponton nem olvassa.

Az effortokat külön oldal írja le. Reasoning effort

Kimeneti korlát

A max_output_tokens alapértéke 4,096, ha nem küldöd. Ennyi tokent tesz félre az egyenlegedből a kérés indulásakor; amikor a válasz teljes, ezt a mennyiséget a kérés tényleges felhasználása váltja fel. Az az érték, amely nem fér bele a megmaradt egyenlegedbe, 429 Quota exceeded választ ad.

A shannon-1.6-*, shannon-2-* és shannon-coder-1 modelleken a válasz hosszát, a hosztolt nyílt súlyú modelleken a válaszszöveg hosszát korlátozza.

Ezen a végponton a shannon-coder-1 tokenben számolódik az egyenlegedből, mint minden más modell.

A kérés törzse legfeljebb 32 MiB lehet. Korlátok és egyenleg

Hibák

A hibák az OpenAI hibatörzset használják: egy error objektum type és message mezővel; némelyik code és param mezőt is hordoz null értékkel. A táblázat azt sorolja fel, amit ez a végpont leggyakrabban visszaad. A teljes lista, a megismétlendő esetekkel, külön oldalon van. Hibakezelés

Státusz Típus Üzenet Mikor
401 authentication_error Missing authentication
Invalid API key
Nem küldtél API-kulcsot, vagy a kulcs ismeretlen vagy visszavont.
400 invalid_request_error unknown model: <id> A model hiányzik, vagy nem közzétett azonosító.
400 invalid_request_error No user message provided. Shannon szintek: az input nem tartalmaz user szöveget.
400 invalid_request_error <id> does not accept image input Képet küldtél egy képbemenet nélküli hosztolt nyílt súlyú modellnek.
400 invalid_request_error <id> does not accept response_format text.format mezőt küldtél egy strukturált kimenet nélküli hosztolt nyílt súlyú modellnek.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high A reasoning.effort a listán kívüli értéket tartalmaz.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … A törzs érvényes JSON, de egy mező típusa hibás.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan A max_output_tokens nagyobb, mint az egyenleged megmaradt része.
429 rate_limit_error Too many requests. Retry in <n>s. Flood protection: a fiókodon egy perc alatt több mint 120 kérés.
500 api_error The model backend failed to answer. Please retry. A modell nem hozott létre választ. Küldd el újra a kérést.
502 api_error The model backend failed to answer. Please retry. Ugyanez a hosztolt nyílt súlyú modelleknél.
504 api_error upstream timed out Egy hosztolt nyílt súlyú modell tovább tartott, mint a nem streamelt válasz időkorlátja. Küldd el stream true értékre állítva.