Siirry sisältöön
Responses API

Responses API

Uusi

POST /v1/responses ottaa ohjeet ja listan syötealkioita ja palauttaa vasteobjektin, joka koostuu tulostealkioista, OpenAI Responses -muodossa. Käytä sitä OpenAI-SDK:n responses-API:n kanssa ja sen päälle rakennettujen työkalujen, kuten Codex CLI:n, kanssa. Päätepiste ei säilytä tilaa: lähetä koko keskustelu jokaisen pyynnön mukana.

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

Pienin pyyntö on mallin id ja teksti. Vastaus ei ole striimattu, ellet pyydä sitä.

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)

Vastaus on vasteobjekti. Sen output sisältää päättelyn, kun malli päätteli, ja viestin:

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

Pyynnön kentät

model ja input ovat se, mitä pyyntö tarvitsee. Sarake Ottavat huomioon nimeää mallit, joilla kenttä muuttaa vastausta. Hostatut avoimen painon mallit ovat mallilistan kaksitoista id:tä; Shannon 3 -perhe on shannon-3, shannon-3-pro, shannon-3.1 ja shannon-3.1-pro. Mallit ja hinnoittelu

Kenttä Tyyppi Oletus Kuvaus Ottavat huomioon
model string Pakollinen. Mallilistan id. Vertailu ei erottele isoja ja pieniä kirjaimia. Puuttuva tai julkaisematon id palauttaa 400 unknown model. Kaikki mallit
input string | array Merkkijono, joka luetaan yhtenä käyttäjän viestinä, tai syötealkioiden taulukko. Katso Syötealkiot alla. Kaikki mallit
instructions string Ohjeet mallille, tämän muodon järjestelmäprompt. Hostatut avoimen painon mallit, shannon-1.6-*, shannon-2-*, shannon-coder-1
stream boolean false true lähettää vastauksen server-sent events -tapahtumina. Katso Striimaus alla. Kaikki mallit
max_output_tokens integer 4096 Vastauksen yläraja tokeneina. Arvo välin 1–65,536 ulkopuolella siirretään tälle välille. Se on myös määrä, joka varataan saldostasi pyynnön ajaksi. Katso Tulosteen raja alla. Hostatut avoimen painon mallit, shannon-1.6-*, shannon-2-*, shannon-coder-1
temperature number Otannan lämpötila. Hostatuilla avoimen painon malleilla arvot pidetään välillä 0–2. Hostatut avoimen painon mallit; shannon-1.6-*, shannon-2-* ja shannon-coder-1 ei-striimatuissa vastauksissa
top_p number Nucleus-otanta. Arvot pidetään välillä 0–1. Hostatut avoimen painon mallit
tools array Funktiot, joita malli voi kutsua, tämän muodon litteässä muodossa: {"type": "function", "name", "description", "parameters"}. Katso Työkalut alla. Kaikki mallit
tool_choice string | object auto "auto" antaa mallin päättää. "required" pakottaa sen kutsumaan työkalua. {"type": "function", "name": "…"} pakottaa sen kutsumaan kyseistä työkalua. Hostatut avoimen painon mallit
reasoning object {"effort": "…"} arvolla off, low, medium tai high. Mikä tahansa muu arvo palauttaa 400. Hostatut avoimen painon mallit
text object {"format": {…}} pyytää JSON-vastausta. Katso Strukturoitu tuloste alla. Kaikki Shannon-tasot; hostatut avoimen painon mallit id:kohtaisen listan mukaan

previous_response_id, store, metadata, parallel_tool_calls, truncation, include, user ja prompt_cache_key hyväksytään, jotta olemassa oleva asiakaskoodi toimii muuttumattomana. Ne eivät muuta vastausta. Koska keskustelua ei tallenneta, jatkopyyntö sisältää aiemmat vuorot kentässä input.

Syötealkiot

Syötealkio on joko viesti, jossa on role ja content, tai tyypitetty alkio, joka sisältää työkalukutsun tai sen tuloksen. content on merkkijono tai osien taulukko.

Alkio Kuvaus Ottavat huomioon
{"role": "user", "content": …} Se, mitä kysyt. content on merkkijono tai input_text- ja input_image-osia. Kaikki mallit
{"role": "assistant", "content": …} Mallin aiempi vastaus. content on merkkijono tai output_text-osia. Kaikki mallit
{"role": "system", "content": …}
{"role": "developer", "content": …}
Ohjeet keskustelun sisällä. Hostatut avoimen painon mallit
{"type": "function_call", "call_id": "…", "name": "…", "arguments": "…"} Työkalukutsu, jonka malli teki aiemmassa vastauksessa. arguments on JSON-merkkijono. Kaikki mallit
{"type": "function_call_output", "call_id": "…", "output": "…"} Kyseisen kutsun tulos. call_id on kutsun id ja output tulos merkkijonona. Kaikki mallit

Pane ohjeet kenttään instructions. Shannon 3 -perheen id:llä pane ohjeet, joiden on pidettävä, user-viestiin.

Vastauksen output-kentän alkiot voi palauttaa kenttään input sellaisinaan: message- ja function_call-alkiot luetaan, reasoning-alkiot ohitetaan.

Sisältöosat

Osa Kuvaus Saatavilla
{"type": "input_text", "text": "…"} Käyttäjän viestin teksti. Kaikki mallit
{"type": "output_text", "text": "…"} Avustajan viestin teksti. Kaikki mallit
{"type": "input_image", "image_url": "…"} Kuva data:-URL:na base64-sisällöllä tai http(s)-URL:na. Shannon 3 -perhe, shannon-1.6-lite, shannon-1.6-pro ja hostatut avoimen painon mallit, jotka listaavat kuvasyötteen
{"type": "input_file", "file_data": "data:application/pdf;base64,…"} Dokumentti (PDF, Word, PowerPoint tai Excel): file_data sisältää data:-URL:n tai file_url http(s)-URL:n. Shannon 3 -perhe

Shannon-tasoilla kuvat ja tiedostot luetaan input-kentän viimeisestä user-alkiosta. Koot ja rajat ovat omalla sivullaan. Kuvat ja tiedostot

Pyyntö ohjeilla ja asetuksilla

Tämä pyyntö lähettää ohjeet, keskustelun syötealkioina, tulosteen rajan, lämpötilan ja päättelytehon. Se käyttää hostattua avoimen painon mallia, joka ottaa ne kaikki huomioon.

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)

Hostatun avoimen painon mallin vastauksessa on id, object, model, created_at, status, output ja usage. Sen usage lisää välimuistista luetut tokenit ja päättelyyn kulutetut tokenit:

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

Vasteobjekti

id, object, status, output ja usage ovat jokaisessa vastauksessa. Rakenna koodisi niiden varaan.

Kenttä Tyyppi Kuvaus Lähettäjä
id string resp_ ja sen perässä 32 heksadesimaalimerkkiä. Kaikki mallit
object string Aina response. Kaikki mallit
status string completed. Striimissä se on ensin in_progress, ja failed tapahtumassa response.failed. Kaikki mallit
output array Tulostealkiot siinä järjestyksessä kuin malli tuotti ne: reasoning, message, function_call. Kaikki mallit
usage object input_tokens, output_tokens ja total_tokens. Kaikki mallit
usage.input_tokens_details object cached_tokens: prompt-välimuistista luetut syötetokenit. Hostatut avoimen painon mallit
usage.output_tokens_details object reasoning_tokens: päättelyyn kulutetut tulostetokenit. Hostatut avoimen painon mallit
model string Vastanneen mallin kanoninen id. Shannon 3 -perhe, hostatut avoimen painon mallit
created_at integer Vastauksen aika Unix-sekunteina. Shannon 3 -perhe, hostatut avoimen painon mallit
instructions, tools, temperature, … instructions, tools ja temperature toistavat pyynnön. error ja incomplete_details ovat null, metadata on {}, parallel_tool_calls on true, tool_choice on auto ja top_p on null. Shannon 3 -perhe

Tulostealkiot

Alkio Kuvaus
{"id": "rs_…", "type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} Mallin päättely yhtenä summary_text-osana. Mukana vain, kun malli päätteli.
{"id": "msg_…", "type": "message", "role": "assistant", "content": [{"type": "output_text", "text": "…"}]} Vastaus: yksi output_text-osa, jossa on teksti.
{"id": "fc_…", "type": "function_call", "call_id": "call_…", "name": "…", "arguments": "…"} Työkalukutsu. arguments on JSON-merkkijono. Lähetä tulos takaisin samalla call_id-arvolla.

OpenAI-SDK:t yhdistävät viestin tekstin puolestasi kenttään response.output_text.

Striimaus

Aseta stream arvoon true saadaksesi server-sent events -tapahtumat. Jokaisessa kehyksessä on event:-rivi tapahtuman nimellä ja data:-rivi JSON-objektilla; objekti toistaa nimen kentässä type. Yhdistä deltat alkioonsa kentän output_index mukaan.

OpenAI-SDK:lla lue tapahtumat niiden type-kentän mukaan:

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

Tapahtumat saapuvat tässä järjestyksessä. Päättelyn, viestin ja työkalukutsujen ryhmät ilmestyvät vain, kun vastauksessa on niitä.

Tapahtuma Data Milloin
response.created response Aina ensimmäinen. response.status on in_progress ja response.output on tyhjä.
response.in_progress response Aina toinen, samalla objektilla.
response.output_item.added output_index, item Päättely alkaa: reasoning-alkio, jonka summary on tyhjä.
response.reasoning_summary_text.delta output_index, summary_index, delta Pala päättelyä.
response.reasoning_summary_text.done output_index, summary_index, text Päättely on valmis: sen koko text.
response.output_item.done output_index, item Valmis reasoning-alkio.
response.output_item.added output_index, item Vastaus alkaa: message-alkio, jonka tila on in_progress ja jossa ei ole sisältöä.
response.content_part.added output_index, content_index, part Tyhjä output_text-osa avautuu.
response.output_text.delta output_index, content_index, delta Pala vastausta.
response.output_text.done output_index, content_index, text Vastaus on valmis: sen koko text.
response.content_part.done output_index, content_index, part Valmis output_text-osa.
response.output_item.done output_index, item Valmis message-alkio, tila completed.
response.output_item.added output_index, item Työkalukutsu alkaa: function_call-alkio, jossa on call_id, name ja tyhjä arguments.
response.function_call_arguments.delta output_index, delta Kutsun argumentit, kokonaan yhdessä deltassa.
response.function_call_arguments.done output_index, arguments Samat argumentit kenttänä arguments.
response.output_item.done output_index, item Valmis function_call-alkio.
response.completed response Aina viimeinen onnistuessa: koko vasteobjekti, jossa on output ja 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}, …}}

Striimi, joka epäonnistuu

Shannon-tasoilla epäonnistunut vastaus päättyy tapahtumaan response.failed tapahtuman response.completed sijaan. Sen response.status on failed ja response.error sisältää code-kentän, rate_limit_exceeded tai server_error, sekä message-kentän.

Hostatuilla avoimen painon malleilla virhe on error-tapahtuma, jossa on code api_error ja message. response.completed seuraa sitä silti.

Pidä striimiä epäonnistuneena, kun siinä on response.failed- tai error-tapahtuma, ja lähetä pyyntö uudelleen.

Työkalut

Työkalu on funktio, jonka koodisi suorittaa. Kuvaa se kentässä tools; kun malli haluaa sen, vastauksessa on function_call-alkio viestin tilalla tai sen vieressä.

Työkalumääritys kentässä tools:

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

Sen kutsuvan vastauksen output:

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

Suorita funktio ja lähetä sitten pyyntö uudelleen niin, että kutsu ja sen tulos on lisätty kenttään 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\"}"
  }
]

Vain tyypin function työkalut luetaan. Malleilla shannon-1.6-*, shannon-2-* ja shannon-coder-1 parameters-skeema supistetaan yleisiin JSON Schema -avainsanoihin: oneOf luetaan kuten anyOf, eikä avainsanoja, kuten $ref, additionalProperties, const, default ja title, välitetä mallille.

tool_choice-arvot required ja nimetty funktio otetaan huomioon hostatuilla avoimen painon malleilla.

Työkaluilla toimiva silmukka on kuvattu kokonaan omalla sivullaan. Toiminto kutsu

Strukturoitu tuloste

Tämä muoto kirjoittaa strukturoidun tulosteen muodossa text.format. Skeema on suoraan kentässä format, kenttien name ja strict vieressä, ei json_schema-jäsenen alla kuten Chat Completionsissa.

  • {"type": "json_object"} pyytää mitä tahansa JSON-objektia.
  • {"type": "json_schema", "name", "schema", "strict"} pyytää JSONia, joka noudattaa skeemaasi. strict on true, kun jätät sen pois.
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 saapuu tekstinä viestin output_text-osassa; jäsennä se itse. Hostattu avoimen painon malli ilman strukturoitua tulostetta palauttaa 400.

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

Mikä malli ottaa minkä muodon, on listattu omalla sivullaan. Strukturoidut lähdöt

Päättely

Päättelevä malli palauttaa päättelynsä tyypin reasoning tulostealkiona ennen viestiä. Striimissä se saapuu response.reasoning_summary_text.delta-tapahtumina.

Hostatut avoimen painon mallit ottavat huomioon reasoning.effort: off, low, medium tai high, ja high, kun et lähetä mitään. off ei palauta päättelyalkiota. Lähetä se objektina; pelkkää merkkijonoa ei lueta tässä päätepisteessä.

Tehot on kuvattu omalla sivullaan. Päättelyn teho

Tulosteen raja

max_output_tokens on 4,096, kun et lähetä sitä. Se on tokenmäärä, joka varataan saldostasi pyynnön alkaessa; kun vastaus on valmis, tämä määrä korvataan pyynnön käyttämällä määrällä. Arvo, joka ei mahdu jäljellä olevaan saldoosi, palauttaa 429 Quota exceeded.

Se rajaa vastauksen pituutta malleilla shannon-1.6-*, shannon-2-* ja shannon-coder-1 sekä vastaustekstin pituutta hostatuilla avoimen painon malleilla.

Tässä päätepisteessä shannon-coder-1 veloitetaan tokeneina saldostasi, kuten kaikki muutkin mallit.

Pyynnön runko voi olla enintään 32 MiB. Rajat ja saldo

Virheet

Virheet käyttävät OpenAI:n virherunkoa: error-objekti, jossa on type ja message; joissakin on myös code ja param arvolla null. Taulukossa on yleisimmin palautuvat virheet tästä päätepisteestä. Täydellinen lista uudelleenyrityksineen on omalla sivullaan. Virheiden käsittely

Tila Tyyppi Viesti Milloin
401 authentication_error Missing authentication
Invalid API key
API-avainta ei lähetetty, tai avain on tuntematon tai peruutettu.
400 invalid_request_error unknown model: <id> model puuttuu tai ei ole julkaistu id.
400 invalid_request_error No user message provided. Shannon-tasot: input ei sisällä käyttäjän tekstiä.
400 invalid_request_error <id> does not accept image input Kuva lähetettiin hostatulle avoimen painon mallille, jolla ei ole kuvasyötettä.
400 invalid_request_error <id> does not accept response_format text.format lähetettiin hostatulle avoimen painon mallille, jolla ei ole strukturoitua tulostetta.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning.effort sisältää listan ulkopuolisen arvon.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Runko on kelvollista JSONia, mutta kentän tyyppi on väärä.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_output_tokens on suurempi kuin saldostasi jäljellä oleva osa.
429 rate_limit_error Too many requests. Retry in <n>s. Tulvasuoja: tililtäsi tuli yli 120 pyyntöä minuutissa.
500 api_error The model backend failed to answer. Please retry. Malli ei tuottanut vastausta. Lähetä pyyntö uudelleen.
502 api_error The model backend failed to answer. Please retry. Sama hostatuilla avoimen painon malleilla.
504 api_error upstream timed out Hostattu avoimen painon malli kesti kauemmin kuin ei-striimatun vastauksen aikaraja. Lähetä pyyntö asettamalla stream arvoon true.