Slaan oor na inhoud
Responses API

Responses API

Nuut

POST /v1/responses neem instruksies en 'n lys invoeritems en gee 'n antwoordobjek terug wat uit uitvoeritems bestaan, in die OpenAI Responses-formaat. Gebruik dit met die responses-API van die OpenAI-SDK en met gereedskap wat daarop gebou is, soos Codex CLI. Die eindpunt hou geen toestand nie: stuur die hele gesprek met elke versoek.

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

Die kleinste versoek is 'n model-id en 'n teks. Die antwoord word nie gestroom nie tensy jy daarvoor vra.

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)

Die antwoord is 'n antwoordobjek. Sy output hou die redenering, wanneer die model geredeneer het, en die boodskap:

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

Versoekvelde

model en input is wat 'n versoek nodig het. Die kolom Toegepas deur noem die modelle waarop 'n veld die antwoord verander. Die gehuisveste oopgewig-modelle is die twaalf id's van die modellys; die Shannon 3-familie is shannon-3, shannon-3-pro, shannon-3.1 en shannon-3.1-pro. Modelle en pryse

Veld Tipe Verstek Beskrywing Toegepas deur
model string Vereis. 'n Id uit die modellys. Passing is nie hoofletterssensitief nie. 'n Ontbrekende of ongepubliseerde id gee 400 unknown model terug. Alle modelle
input string | array 'n String, wat as een gebruikersboodskap gelees word, of 'n skikking invoeritems. Sien Invoeritems hieronder. Alle modelle
instructions string Instruksies vir die model, die stelselprompt van hierdie formaat. Gehuisveste oopgewig-modelle, shannon-1.6-*, shannon-2-*, shannon-coder-1
stream boolean false true stuur die antwoord as bediener-gestuurde gebeure. Sien Stroming hieronder. Alle modelle
max_output_tokens integer 4096 Boonste perk van die antwoord, in tokens. 'n Waarde buite 1 tot 65,536 word in daardie reeks geskuif. Dit is ook die bedrag wat van jou balans opsy gesit word terwyl die versoek loop. Sien Uitvoerperk hieronder. Gehuisveste oopgewig-modelle, shannon-1.6-*, shannon-2-*, shannon-coder-1
temperature number Steekproef-temperatuur. Op die gehuisveste oopgewig-modelle word waardes tussen 0 en 2 gehou. Gehuisveste oopgewig-modelle; shannon-1.6-*, shannon-2-* en shannon-coder-1 op antwoorde wat nie gestroom is nie
top_p number Nucleus-steekproefneming. Waardes word tussen 0 en 1 gehou. Gehuisveste oopgewig-modelle
tools array Die funksies wat die model mag oproep, in die plat vorm van hierdie formaat: {"type": "function", "name", "description", "parameters"}. Sien Gereedskap hieronder. Alle modelle
tool_choice string | object auto "auto" laat die model besluit. "required" laat dit 'n gereedskap oproep. {"type": "function", "name": "…"} laat dit daardie gereedskap oproep. Gehuisveste oopgewig-modelle
reasoning object {"effort": "…"} met off, low, medium of high. Enige ander waarde gee 400 terug. Gehuisveste oopgewig-modelle
text object {"format": {…}} vra vir 'n JSON-antwoord. Sien Gestruktureerde uitvoer hieronder. Alle Shannon-vlakke; gehuisveste oopgewig-modelle soos per id gelys

previous_response_id, store, metadata, parallel_tool_calls, truncation, include, user en prompt_cache_key word aanvaar sodat bestaande kliëntkode ongewysig loop. Hulle verander nie die antwoord nie. Omdat geen gesprek gestoor word nie, dra 'n opvolgversoek die vroeëre beurte in input.

Invoeritems

'n Invoeritem is óf 'n boodskap, met 'n role en 'n content, óf 'n getipeerde item wat 'n gereedskapoproep of sy resultaat dra. content is 'n string of 'n skikking dele.

Item Beskrywing Toegepas deur
{"role": "user", "content": …} Wat jy vra. content is 'n string, of input_text- en input_image-dele. Alle modelle
{"role": "assistant", "content": …} 'n Vroeëre antwoord van die model. content is 'n string, of output_text-dele. Alle modelle
{"role": "system", "content": …}
{"role": "developer", "content": …}
Instruksies binne die gesprek. Gehuisveste oopgewig-modelle
{"type": "function_call", "call_id": "…", "name": "…", "arguments": "…"} 'n Gereedskapoproep wat die model in 'n vroeëre antwoord gemaak het. arguments is 'n JSON-string. Alle modelle
{"type": "function_call_output", "call_id": "…", "output": "…"} Die resultaat van daardie oproep. call_id is die id van die oproep en output die resultaat as 'n string. Alle modelle

Sit instruksies in die instructions-veld. Met 'n id van die Shannon 3-familie, sit instruksies wat moet geld in die user-boodskap.

Die items van 'n antwoord se output kan soos hulle is terug in input gaan: message- en function_call-items word gelees, reasoning-items word oorgeslaan.

Inhoudsdele

Deel Beskrywing Beskikbaar op
{"type": "input_text", "text": "…"} Teks van 'n gebruikersboodskap. Alle modelle
{"type": "output_text", "text": "…"} Teks van 'n assistent-boodskap. Alle modelle
{"type": "input_image", "image_url": "…"} 'n Beeld, as 'n data:-URL met base64-inhoud of as 'n http(s)-URL. Shannon 3-familie, shannon-1.6-lite, shannon-1.6-pro, en die gehuisveste oopgewig-modelle wat beeldinset lys
{"type": "input_file", "file_data": "data:application/pdf;base64,…"} 'n Dokument (PDF, Word, PowerPoint of Excel): file_data hou 'n data:-URL, of file_url 'n http(s)-URL. Shannon 3-familie

Op die Shannon-vlakke word beelde en lêers uit die laaste user-item van input gelees. Groottes en perke het hul eie bladsy. Beelde en lêers

'n Versoek met instruksies en opsies

Hierdie versoek stuur instruksies, 'n gesprek as invoeritems, 'n uitvoerperk, 'n temperatuur en 'n redeneerpoging. Dit gebruik 'n gehuisveste oopgewig-model, wat almal toepas.

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)

Die antwoord van 'n gehuisveste oopgewig-model het id, object, model, created_at, status, output en usage. Sy usage voeg die tokens wat uit die kas gelees is en die tokens wat aan redenering bestee is by:

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

Die antwoordobjek

id, object, status, output en usage is op elke antwoord. Bou jou kode op daardie.

Veld Tipe Beskrywing Gestuur deur
id string resp_ gevolg deur 32 heksadesimale karakters. Alle modelle
object string Altyd response. Alle modelle
status string completed. In 'n stroom is dit eers in_progress, en failed in 'n response.failed-gebeurtenis. Alle modelle
output array Die uitvoeritems in die volgorde waarin die model hulle gelewer het: reasoning, message, function_call. Alle modelle
usage object input_tokens, output_tokens en total_tokens. Alle modelle
usage.input_tokens_details object cached_tokens: die insettokens wat uit die promptkas gelees is. Gehuisveste oopgewig-modelle
usage.output_tokens_details object reasoning_tokens: die uitsettokens wat aan redenering bestee is. Gehuisveste oopgewig-modelle
model string Die kanonieke id van die model wat geantwoord het. Shannon 3-familie, gehuisveste oopgewig-modelle
created_at integer Tyd van die antwoord, in Unix-sekondes. Shannon 3-familie, gehuisveste oopgewig-modelle
instructions, tools, temperature, … instructions, tools en temperature herhaal die versoek. error en incomplete_details is null, metadata is {}, parallel_tool_calls is true, tool_choice is auto en top_p is null. Shannon 3-familie

Uitvoeritems

Item Beskrywing
{"id": "rs_…", "type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} Die model se redenering as een summary_text-deel. Net teenwoordig wanneer die model geredeneer het.
{"id": "msg_…", "type": "message", "role": "assistant", "content": [{"type": "output_text", "text": "…"}]} Die antwoord: een output_text-deel met die teks.
{"id": "fc_…", "type": "function_call", "call_id": "call_…", "name": "…", "arguments": "…"} 'n Gereedskapoproep. arguments is 'n JSON-string. Stuur die resultaat terug met dieselfde call_id.

Die OpenAI-SDK's voeg die teks van die boodskap vir jou saam in response.output_text.

Stroming

Stel stream op true vir bediener-gestuurde gebeure. Elke raam het 'n event:-reël met die naam van die gebeurtenis en 'n data:-reël met 'n JSON-objek; die objek herhaal die naam in type. Pas deltas by hul item volgens output_index.

Met die OpenAI-SDK, lees die gebeure volgens hul 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")

Die gebeure kom in hierdie volgorde aan. Die groepe vir redenering, die boodskap en gereedskapoproepe verskyn net wanneer die antwoord hulle het.

Gebeurtenis Inhoud Wanneer
response.created response Altyd eerste. response.status is in_progress en response.output is leeg.
response.in_progress response Altyd tweede, met dieselfde objek.
response.output_item.added output_index, item Die redenering begin: 'n reasoning-item met 'n leë summary.
response.reasoning_summary_text.delta output_index, summary_index, delta 'n Stuk van die redenering.
response.reasoning_summary_text.done output_index, summary_index, text Die redenering is volledig: sy hele text.
response.output_item.done output_index, item Die voltooide reasoning-item.
response.output_item.added output_index, item Die antwoord begin: 'n message-item met status in_progress en geen inhoud.
response.content_part.added output_index, content_index, part 'n Leë output_text-deel gaan oop.
response.output_text.delta output_index, content_index, delta 'n Stuk van die antwoord.
response.output_text.done output_index, content_index, text Die antwoord is volledig: sy hele text.
response.content_part.done output_index, content_index, part Die voltooide output_text-deel.
response.output_item.done output_index, item Die voltooide message-item, met status completed.
response.output_item.added output_index, item 'n Gereedskapoproep begin: 'n function_call-item met call_id, name en leë arguments.
response.function_call_arguments.delta output_index, delta Die argumente van die oproep, volledig in een delta.
response.function_call_arguments.done output_index, arguments Dieselfde argumente, as arguments.
response.output_item.done output_index, item Die voltooide function_call-item.
response.completed response Altyd laaste by sukses: die hele antwoordobjek met output en 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}, …}}

'n Stroom wat misluk

Op die Shannon-vlakke eindig 'n mislukte antwoord met response.failed in die plek van response.completed. Sy response.status is failed en response.error hou 'n code, rate_limit_exceeded of server_error, en 'n message.

Op die gehuisveste oopgewig-modelle is 'n mislukking 'n error-gebeurtenis met code api_error en 'n message. response.completed volg steeds daarop.

Behandel 'n stroom as mislukt wanneer dit 'n response.failed- of 'n error-gebeurtenis hou, en stuur die versoek weer.

Gereedskap

'n Gereedskap is 'n funksie wat jou kode uitvoer. Beskryf dit in tools; wanneer die model dit wil hê, hou die antwoord 'n function_call-item in die plek van, of langs, die boodskap.

'n Gereedskapdefinisie in tools:

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

Die output van 'n antwoord wat dit oproep:

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

Voer die funksie uit, en stuur dan die versoek weer met die oproep en sy resultaat by input gevoeg:

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

Net gereedskap van tipe function word gelees. Op shannon-1.6-*, shannon-2-* en shannon-coder-1 word die parameters-skema tot die algemene JSON Schema-sleutelwoorde verminder: oneOf word as anyOf gelees, en sleutelwoorde soos $ref, additionalProperties, const, default en title word nie aan die model deurgegee nie.

tool_choice-waardes required en 'n benoemde funksie word deur die gehuisveste oopgewig-modelle toegepas.

Die gereedskaplus word volledig op sy eie bladsy beskryf. Funksie-oproepe

Gestruktureerde uitvoer

Hierdie formaat skryf gestruktureerde uitvoer as text.format. Die skema sit direk in format, langs name en strict, nie onder 'n json_schema-lid soos op Chat Completions nie.

  • {"type": "json_object"} vra vir enige JSON-objek.
  • {"type": "json_schema", "name", "schema", "strict"} vra vir JSON wat jou skema volg. strict is true wanneer jy dit uitlaat.
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"
        ]
      }
    }
  }
}

Die JSON kom as teks in die output_text-deel van die boodskap aan; ontleed dit self. 'n Gehuisveste oopgewig-model sonder gestruktureerde uitvoer gee 400 terug.

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

Watter model watter vorm neem, word op sy eie bladsy gelys. Gestruktureerde uitvoer

Redenering

'n Model wat redeneer, gee sy redenering terug as 'n uitvoeritem van tipe reasoning, voor die boodskap. In 'n stroom kom dit as response.reasoning_summary_text.delta-gebeure aan.

Die gehuisveste oopgewig-modelle pas reasoning.effort toe: off, low, medium of high, met high wanneer jy niks stuur nie. off gee geen redeneeritem terug nie. Stuur dit as 'n objek; 'n kaal string word nie op hierdie eindpunt gelees nie.

Die pogings word op hul eie bladsy beskryf. Redeneringspoging

Uitvoerperk

max_output_tokens is 4,096 wanneer jy dit nie stuur nie. Dit is die getal tokens wat van jou balans opsy gesit word wanneer die versoek begin; wanneer die antwoord volledig is, word daardie bedrag vervang deur wat die versoek gebruik het. 'n Waarde wat nie in jou oorblywende balans inpas nie, gee 429 Quota exceeded terug.

Dit beperk die lengte van die antwoord op shannon-1.6-*, shannon-2-* en shannon-coder-1, en die lengte van die antwoordteks op die gehuisveste oopgewig-modelle.

Op hierdie eindpunt word shannon-coder-1 in tokens van jou balans gehef, soos elke ander model.

'n Versoekliggaam kan tot 32 MiB wees. Perke en balans

Foute

Foute gebruik die OpenAI-foutliggaam: 'n error-objek met type en message; sommige dra ook code en param met die waarde null. Die tabel lys wat hierdie eindpunt die meeste teruggee. Die volledige lys, met wat om weer te probeer, het sy eie bladsy. Fouthantering

Status Tipe Boodskap Wanneer
401 authentication_error Missing authentication
Invalid API key
Geen API-sleutel is gestuur nie, of die sleutel is onbekend of herroep.
400 invalid_request_error unknown model: <id> model ontbreek of is nie 'n gepubliseerde id nie.
400 invalid_request_error No user message provided. Shannon-vlakke: input hou geen gebruikersteks nie.
400 invalid_request_error <id> does not accept image input 'n Beeld is na 'n gehuisveste oopgewig-model gestuur wat nie beeldinset het nie.
400 invalid_request_error <id> does not accept response_format text.format is na 'n gehuisveste oopgewig-model sonder gestruktureerde uitvoer gestuur.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning.effort hou 'n waarde buite die lys.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Die liggaam is geldige JSON maar 'n veld het die verkeerde tipe.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_output_tokens is groter as wat van jou balans oor is.
429 rate_limit_error Too many requests. Retry in <n>s. Vloedbeskerming: meer as 120 versoeke in een minuut op jou rekening.
500 api_error The model backend failed to answer. Please retry. Die model het nie 'n antwoord gelewer nie. Stuur die versoek weer.
502 api_error The model backend failed to answer. Please retry. Dieselfde, op die gehuisveste oopgewig-modelle.
504 api_error upstream timed out 'n Gehuisveste oopgewig-model het langer as die tydsperk van 'n antwoord wat nie gestroom is nie, geneem. Stuur dit met stream op true.