Hopp til innholdet
Responses API

Responses API

Ny

POST /v1/responses tar instruksjoner og en liste med input-elementer og returnerer et respons-objekt satt sammen av output-elementer, i OpenAI Responses-formatet. Bruk det med responses-API-et i OpenAI-SDK-en og med verktøy bygget på det, som Codex CLI. Endepunktet holder ingen tilstand: send hele samtalen med hver forespørsel.

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

Den minste forespørselen er en modell-id og en tekst. Svaret sendes ikke som strøm med mindre du ber om det.

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)

Svaret er et respons-objekt. Dets output inneholder resonneringen, når modellen resonnerte, og meldingen:

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

Forespørselsfelt

model og input er det en forespørsel trenger. Kolonnen Brukes av oppgir modellene der et felt endrer svaret. De hostede åpne vektmodellene er de tolv id-ene i modelllisten; Shannon 3-familien er shannon-3, shannon-3-pro, shannon-3.1 og shannon-3.1-pro. Modeller og priser

Felt Type Standard Beskrivelse Brukes av
model string Påkrevd. En id fra modelllisten. Sammenligningen skiller ikke mellom store og små bokstaver. En manglende eller upublisert id returnerer 400 unknown model. Alle modeller
input string | array En streng, som leses som én brukermelding, eller en matrise av input-elementer. Se Input-elementer nedenfor. Alle modeller
instructions string Instruksjoner til modellen, system prompten i dette formatet. Hostede åpne vektmodeller, shannon-1.6-*, shannon-2-*, shannon-coder-1
stream boolean false true sender svaret som server-sent events. Se Streaming nedenfor. Alle modeller
max_output_tokens integer 4096 Øvre grense for svaret, i tokens. En verdi utenfor 1 til 65,536 flyttes inn i dette området. Det er også beløpet som settes av fra saldoen din mens forespørselen kjører. Se Utdatagrense nedenfor. Hostede åpne vektmodeller, shannon-1.6-*, shannon-2-*, shannon-coder-1
temperature number Samplingtemperatur. På de hostede åpne vektmodellene holdes verdiene mellom 0 og 2. Hostede åpne vektmodeller; shannon-1.6-*, shannon-2-* og shannon-coder-1 i svar uten streaming
top_p number Nucleus-sampling. Verdiene holdes mellom 0 og 1. Hostede åpne vektmodeller
tools array Funksjonene modellen kan kalle, i den flate formen i dette formatet: {"type": "function", "name", "description", "parameters"}. Se Verktøy nedenfor. Alle modeller
tool_choice string | object auto "auto" lar modellen bestemme. "required" får den til å kalle et verktøy. {"type": "function", "name": "…"} får den til å kalle det verktøyet. Hostede åpne vektmodeller
reasoning object {"effort": "…"} med off, low, medium eller high. Enhver annen verdi returnerer 400. Hostede åpne vektmodeller
text object {"format": {…}} ber om et JSON-svar. Se Strukturert utdata nedenfor. Alle Shannon-nivåer; hostede åpne vektmodeller som oppgitt per id

previous_response_id, store, metadata, parallel_tool_calls, truncation, include, user og prompt_cache_key godtas, slik at eksisterende klientkode kjører uendret. De endrer ikke svaret. Fordi ingen samtale lagres, har en oppfølgingsforespørsel de tidligere rundene i input.

Input-elementer

Et input-element er enten en melding, med en role og en content, eller et typet element som bærer et verktøykall eller resultatet av det. content er en streng eller en matrise av deler.

Element Beskrivelse Brukes av
{"role": "user", "content": …} Det du spør om. content er en streng, eller input_text- og input_image-deler. Alle modeller
{"role": "assistant", "content": …} Et tidligere svar fra modellen. content er en streng, eller output_text-deler. Alle modeller
{"role": "system", "content": …}
{"role": "developer", "content": …}
Instruksjoner inne i samtalen. Hostede åpne vektmodeller
{"type": "function_call", "call_id": "…", "name": "…", "arguments": "…"} Et verktøykall modellen gjorde i et tidligere svar. arguments er en JSON-streng. Alle modeller
{"type": "function_call_output", "call_id": "…", "output": "…"} Resultatet av det kallet. call_id er id-en til kallet og output resultatet som en streng. Alle modeller

Legg instruksjoner i feltet instructions. Med en id fra Shannon 3-familien legger du instruksjoner som må gjelde, i user-meldingen.

Elementene i output fra et svar kan sendes tilbake i input som de er: message- og function_call-elementer leses, reasoning-elementer hoppes over.

Innholdsdeler

Del Beskrivelse Tilgjengelig på
{"type": "input_text", "text": "…"} Tekst i en brukermelding. Alle modeller
{"type": "output_text", "text": "…"} Tekst i en assistentmelding. Alle modeller
{"type": "input_image", "image_url": "…"} Et bilde, som en data:-URL med base64-innhold eller som en http(s)-URL. Shannon 3-familien, shannon-1.6-lite, shannon-1.6-pro og de hostede åpne vektmodellene som oppgir bildeinput
{"type": "input_file", "file_data": "data:application/pdf;base64,…"} Et dokument (PDF, Word, PowerPoint eller Excel): file_data inneholder en data:-URL, eller file_url en http(s)-URL. Shannon 3-familien

På Shannon-nivåene leses bilder og filer fra det siste user-elementet i input. Størrelser og grenser har en egen side. Bilder og filer

En forespørsel med instruksjoner og valg

Denne forespørselen sender instruksjoner, en samtale som input-elementer, en utdatagrense, en temperatur og en resonneringsinnsats. Den bruker en hostet åpen vektmodell, som tar hensyn til alle.

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)

Svaret fra en hostet åpen vektmodell har id, object, model, created_at, status, output og usage. Dens usage legger til tokens lest fra cachen og tokens brukt på resonnering:

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

Respons-objektet

id, object, status, output og usage finnes i hvert svar. Bygg koden din på dem.

Felt Type Beskrivelse Sendes av
id string resp_ etterfulgt av 32 heksadesimale tegn. Alle modeller
object string Alltid response. Alle modeller
status string completed. I en strøm er den først in_progress, og failed i en response.failed-hendelse. Alle modeller
output array Output-elementene i den rekkefølgen modellen produserte dem: reasoning, message, function_call. Alle modeller
usage object input_tokens, output_tokens og total_tokens. Alle modeller
usage.input_tokens_details object cached_tokens: input-tokens lest fra prompt-cachen. Hostede åpne vektmodeller
usage.output_tokens_details object reasoning_tokens: output-tokens brukt på resonnering. Hostede åpne vektmodeller
model string Den kanoniske id-en til modellen som svarte. Shannon 3-familien, hostede åpne vektmodeller
created_at integer Tidspunktet for svaret, i Unix-sekunder. Shannon 3-familien, hostede åpne vektmodeller
instructions, tools, temperature, … instructions, tools og temperature gjentar forespørselen. error og incomplete_details er null, metadata er {}, parallel_tool_calls er true, tool_choice er auto og top_p er null. Shannon 3-familien

Output-elementer

Element Beskrivelse
{"id": "rs_…", "type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} Modellens resonnering som én summary_text-del. Finnes bare når modellen resonnerte.
{"id": "msg_…", "type": "message", "role": "assistant", "content": [{"type": "output_text", "text": "…"}]} Svaret: én output_text-del med teksten.
{"id": "fc_…", "type": "function_call", "call_id": "call_…", "name": "…", "arguments": "…"} Et verktøykall. arguments er en JSON-streng. Send resultatet tilbake med samme call_id.

OpenAI-SDK-ene slår sammen teksten i meldingen for deg i response.output_text.

Streaming

Sett stream til true for server-sent events. Hver ramme har en event:-linje med navnet på hendelsen og en data:-linje med et JSON-objekt; objektet gjentar navnet i type. Knytt deltaer til elementet sitt med output_index.

Med OpenAI-SDK-en leser du hendelsene etter 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")

Hendelsene kommer i denne rekkefølgen. Gruppene for resonnering, meldingen og verktøykall finnes bare når svaret har dem.

Hendelse Nyttelast Når
response.created response Alltid først. response.status er in_progress og response.output er tom.
response.in_progress response Alltid nummer to, med det samme objektet.
response.output_item.added output_index, item Resonneringen starter: et reasoning-element med en tom summary.
response.reasoning_summary_text.delta output_index, summary_index, delta Et stykke av resonneringen.
response.reasoning_summary_text.done output_index, summary_index, text Resonneringen er fullført: hele text.
response.output_item.done output_index, item Det ferdige reasoning-elementet.
response.output_item.added output_index, item Svaret starter: et message-element med status in_progress og uten innhold.
response.content_part.added output_index, content_index, part En tom output_text-del åpnes.
response.output_text.delta output_index, content_index, delta Et stykke av svaret.
response.output_text.done output_index, content_index, text Svaret er fullført: hele text.
response.content_part.done output_index, content_index, part Den ferdige output_text-delen.
response.output_item.done output_index, item Det ferdige message-elementet, med status completed.
response.output_item.added output_index, item Et verktøykall starter: et function_call-element med call_id, name og tomme arguments.
response.function_call_arguments.delta output_index, delta Argumentene til kallet, komplette i én delta.
response.function_call_arguments.done output_index, arguments De samme argumentene, som arguments.
response.output_item.done output_index, item Det ferdige function_call-elementet.
response.completed response Alltid sist ved suksess: hele respons-objektet med output og 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}, …}}

En strøm som feiler

På Shannon-nivåene ender et mislykket svar med response.failed i stedet for response.completed. Dets response.status er failed, og response.error inneholder en code, rate_limit_exceeded eller server_error, og en message.

På de hostede åpne vektmodellene er en feil en error-hendelse med code api_error og en message. response.completed følger likevel etter den.

Behandle en strøm som mislykket når den inneholder en response.failed- eller en error-hendelse, og send forespørselen på nytt.

Verktøy

Et verktøy er en funksjon koden din kjører. Beskriv det i tools; når modellen vil bruke det, inneholder svaret et function_call-element i stedet for meldingen, eller ved siden av den.

En verktøydefinisjon i tools:

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

output i et svar som kaller det:

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

Kjør funksjonen, og send så forespørselen på nytt med kallet og resultatet lagt til i 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\"}"
  }
]

Bare verktøy av typen function leses. På shannon-1.6-*, shannon-2-* og shannon-coder-1 reduseres parameters-skjemaet til de vanlige JSON Schema-nøkkelordene: oneOf leses som anyOf, og nøkkelord som $ref, additionalProperties, const, default og title videresendes ikke til modellen.

tool_choice-verdiene required og en navngitt funksjon brukes av de hostede åpne vektmodellene.

Verktøysløyfen er beskrevet fullt ut på sin egen side. Funksjonskall

Strukturert utdata

Dette formatet skriver strukturert utdata som text.format. Skjemaet ligger direkte i format, ved siden av name og strict, ikke under et json_schema-medlem som på Chat Completions.

  • {"type": "json_object"} ber om et vilkårlig JSON-objekt.
  • {"type": "json_schema", "name", "schema", "strict"} ber om JSON som følger skjemaet ditt. strict er true når du utelater det.
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-en kommer som tekst i output_text-delen av meldingen; parse den selv. En hostet åpen vektmodell uten strukturert utdata returnerer 400.

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

Hvilken modell som tar hvilken form, er listet på sin egen side. Strukturerte utdata

Resonnering

En modell som resonnerer, returnerer resonneringen som et output-element av typen reasoning, før meldingen. I en strøm kommer den som response.reasoning_summary_text.delta-hendelser.

De hostede åpne vektmodellene bruker reasoning.effort: off, low, medium eller high, med high når du ikke sender noe. off returnerer ikke noe resonneringselement. Send det som et objekt; en ren streng leses ikke på dette endepunktet.

Innsatsnivåene er beskrevet på sin egen side. Resonneringsinnsats

Utdatagrense

max_output_tokens er 4,096 når du ikke sender det. Det er antallet tokens som settes av fra saldoen din når forespørselen starter; når svaret er fullført, erstattes dette beløpet av det forespørselen brukte. En verdi som ikke får plass i den resterende saldoen din, returnerer 429 Quota exceeded.

Den begrenser lengden på svaret på shannon-1.6-*, shannon-2-* og shannon-coder-1, og lengden på svarteksten på de hostede åpne vektmodellene.

På dette endepunktet belastes shannon-coder-1 i tokens fra saldoen din, som alle andre modeller.

En forespørselskropp kan være opptil 32 MiB. Grenser og saldo

Feil

Feil bruker OpenAI-feilkroppen: et error-objekt med type og message; noen har også code og param med verdien null. Tabellen lister det dette endepunktet oftest returnerer. Den fullstendige listen, med hva som kan prøves på nytt, har en egen side. Feilhåndtering

Status Type Melding Når
401 authentication_error Missing authentication
Invalid API key
Ingen API-nøkkel ble sendt, eller nøkkelen er ukjent eller trukket tilbake.
400 invalid_request_error unknown model: <id> model mangler eller er ikke en publisert id.
400 invalid_request_error No user message provided. Shannon-nivåer: input inneholder ingen brukertekst.
400 invalid_request_error <id> does not accept image input Et bilde ble sendt til en hostet åpen vektmodell uten bildeinput.
400 invalid_request_error <id> does not accept response_format text.format ble sendt til en hostet åpen vektmodell uten strukturert utdata.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning.effort har en verdi utenfor listen.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Kroppen er gyldig JSON, men et felt har feil type.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_output_tokens er større enn det som er igjen av saldoen din.
429 rate_limit_error Too many requests. Retry in <n>s. Flood protection: mer enn 120 forespørsler i løpet av ett minutt på kontoen din.
500 api_error The model backend failed to answer. Please retry. Modellen produserte ikke noe svar. Send forespørselen på nytt.
502 api_error The model backend failed to answer. Please retry. Det samme, på de hostede åpne vektmodellene.
504 api_error upstream timed out En hostet åpen vektmodell brukte lengre tid enn tidsgrensen for et svar uten streaming. Send den med stream satt til true.