Salti al la enhavo
Responses API

Responses API

Nova

POST /v1/responses prenas instrukciojn kaj liston de enigaj eroj kaj redonas objekton de respondo farita el eligaj eroj, en la formato OpenAI Responses. Uzu ĝin kun la responses API de la SDK de OpenAI kaj kun iloj konstruitaj sur ĝi, kiel Codex CLI. La endpoint ne konservas staton: sendu la tutan konversacion kun ĉiu peto.

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

La plej malgranda peto estas model-id kaj teksto. La respondo ne estas fluata, krom se vi petas tion.

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)

La respondo estas objekto de respondo. Ĝia output enhavas la rezonadon, kiam la modelo rezonis, kaj la mesaĝon:

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

Kampoj de peto

model kaj input estas tio, kion peto bezonas. La kolumno Applied by nomas la modelojn, ĉe kiuj kampo ŝanĝas la respondon. La gastigitaj malfermpezaj modeloj estas la dek du id de la modellisto; la familio Shannon 3 estas shannon-3, shannon-3-pro, shannon-3.1 kaj shannon-3.1-pro. Modeloj kaj prezoj

Kampo Tipo Defaŭlto Priskribo Aplikata de
model string Deviga. Id el la modellisto. La kongruigo ne distingas majusklojn. Mankanta aŭ nepublikigita id redonas 400 unknown model. Ĉiuj modeloj
input string | array Ĉeno, kiu estas legata kiel unu mesaĝo de uzanto, aŭ tabelo de enigaj eroj. Vidu Enigaj eroj sube. Ĉiuj modeloj
instructions string Instrukcioj por la modelo, la sistema prompt de ĉi tiu formato. Gastigitaj malfermpezaj modeloj, shannon-1.6-*, shannon-2-*, shannon-coder-1
stream boolean false true sendas la respondon kiel server-sent events. Vidu Streaming sube. Ĉiuj modeloj
max_output_tokens integer 4096 Supra limo de la respondo, en tokenoj. Valoro ekster 1 ĝis 65,536 estas movita en tiun intervalon. Ĝi estas ankaŭ la kvanto rezervita el via saldo dum la peto funkcias. Vidu Eliga limo sube. Gastigitaj malfermpezaj modeloj, shannon-1.6-*, shannon-2-*, shannon-coder-1
temperature number Temperaturo de specimenado. Ĉe la gastigitaj malfermpezaj modeloj la valoroj estas tenataj inter 0 kaj 2. Gastigitaj malfermpezaj modeloj; shannon-1.6-*, shannon-2-* kaj shannon-coder-1 ĉe respondoj, kiuj ne estas fluataj
top_p number Nukleo-specimenado. La valoroj estas tenataj inter 0 kaj 1. Gastigitaj malfermpezaj modeloj
tools array La funkcioj, kiujn la modelo rajtas voki, en la plata formo de ĉi tiu formato: {"type": "function", "name", "description", "parameters"}. Vidu Iloj sube. Ĉiuj modeloj
tool_choice string | object auto "auto" lasas la modelon decidi. "required" devigas ĝin voki ilon. {"type": "function", "name": "…"} devigas ĝin voki tiun ilon. Gastigitaj malfermpezaj modeloj
reasoning object {"effort": "…"} kun off, low, medium aŭ high. Ĉiu alia valoro redonas 400. Gastigitaj malfermpezaj modeloj
text object {"format": {…}} petas JSON-respondon. Vidu Strukturita eligo sube. Ĉiuj niveloj de Shannon; gastigitaj malfermpezaj modeloj laŭ la listo por id

previous_response_id, store, metadata, parallel_tool_calls, truncation, include, user kaj prompt_cache_key estas akceptataj, por ke ekzistanta klienta kodo funkciu senŝanĝe. Ili ne ŝanĝas la respondon. Ĉar neniu konversacio estas konservata, posta peto portas la pli fruajn vicojn en input.

Enigaj eroj

Enigan eron estas aŭ mesaĝo, kun role kaj content, aŭ tipita ero, kiu portas vokon de ilo aŭ ĝian rezulton. content estas ĉeno aŭ tabelo de partoj.

Ero Priskribo Aplikata de
{"role": "user", "content": …} Tio, kion vi demandas. content estas ĉeno, aŭ partoj input_text kaj input_image. Ĉiuj modeloj
{"role": "assistant", "content": …} Pli frua respondo de la modelo. content estas ĉeno, aŭ partoj output_text. Ĉiuj modeloj
{"role": "system", "content": …}
{"role": "developer", "content": …}
Instrukcioj ene de la konversacio. Gastigitaj malfermpezaj modeloj
{"type": "function_call", "call_id": "…", "name": "…", "arguments": "…"} Voko de ilo, kiun la modelo faris en pli frua respondo. arguments estas JSON-ĉeno. Ĉiuj modeloj
{"type": "function_call_output", "call_id": "…", "output": "…"} La rezulto de tiu voko. call_id estas la id de la voko kaj output la rezulto kiel ĉeno. Ĉiuj modeloj

Metu instrukciojn en la kampon instructions. Kun id de la familio Shannon 3, metu instrukciojn, kiuj devas validi, en la mesaĝon user.

La eroj de output de respondo povas reiri en input kiel ili estas: eroj message kaj function_call estas legataj, eroj reasoning estas preterlasataj.

Partoj de enhavo

Parto Priskribo Disponebla ĉe
{"type": "input_text", "text": "…"} Teksto de mesaĝo de uzanto. Ĉiuj modeloj
{"type": "output_text", "text": "…"} Teksto de mesaĝo de la asistanto. Ĉiuj modeloj
{"type": "input_image", "image_url": "…"} Bildo, kiel URL data: kun enhavo base64 aŭ kiel URL http(s). Familio Shannon 3, shannon-1.6-lite, shannon-1.6-pro, kaj la gastigitaj malfermpezaj modeloj, kiuj listigas bildan enigon
{"type": "input_file", "file_data": "data:application/pdf;base64,…"} Dokumento (PDF, Word, PowerPoint aŭ Excel): file_data enhavas URL data:, aŭ file_url URL http(s). Familio Shannon 3

Ĉe la niveloj de Shannon bildoj kaj dosieroj estas legataj el la lasta ero user de input. Grandoj kaj limoj havas propran paĝon. Bildoj kaj dosieroj

Peto kun instrukcioj kaj opcioj

Ĉi tiu peto sendas instrukciojn, konversacion kiel enigajn erojn, eligan limon, temperaturon kaj raciuman penon. Ĝi uzas gastigitan malfermpezan modelon, kiu aplikas ĉiujn el ili.

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)

La respondo de gastigita malfermpeza modelo havas id, object, model, created_at, status, output kaj usage. Ĝia usage aldonas la tokenojn legitajn el la kaŝmemoro kaj la tokenojn elspezitajn por rezonado:

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

La objekto de respondo

id, object, status, output kaj usage ĉeestas en ĉiu respondo. Bazu vian kodon sur ili.

Kampo Tipo Priskribo Sendita de
id string resp_ sekvata de 32 deksesumaj signoj. Ĉiuj modeloj
object string Ĉiam response. Ĉiuj modeloj
status string completed. En fluo ĝi estas unue in_progress, kaj failed en evento response.failed. Ĉiuj modeloj
output array La eligaj eroj en la ordo, en kiu la modelo produktis ilin: reasoning, message, function_call. Ĉiuj modeloj
usage object input_tokens, output_tokens kaj total_tokens. Ĉiuj modeloj
usage.input_tokens_details object cached_tokens: la enigaj tokenoj legitaj el la kaŝmemoro de prompt. Gastigitaj malfermpezaj modeloj
usage.output_tokens_details object reasoning_tokens: la eligaj tokenoj elspezitaj por rezonado. Gastigitaj malfermpezaj modeloj
model string La kanona id de la modelo, kiu respondis. Familio Shannon 3, gastigitaj malfermpezaj modeloj
created_at integer Tempo de la respondo, en Unix-sekundoj. Familio Shannon 3, gastigitaj malfermpezaj modeloj
instructions, tools, temperature, … instructions, tools kaj temperature ripetas la peton. error kaj incomplete_details estas null, metadata estas {}, parallel_tool_calls estas true, tool_choice estas auto kaj top_p estas null. Familio Shannon 3

Eligaj eroj

Ero Priskribo
{"id": "rs_…", "type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} La rezonado de la modelo kiel unu parto summary_text. Ĉeestas nur kiam la modelo rezonis.
{"id": "msg_…", "type": "message", "role": "assistant", "content": [{"type": "output_text", "text": "…"}]} La respondo: unu parto output_text kun la teksto.
{"id": "fc_…", "type": "function_call", "call_id": "call_…", "name": "…", "arguments": "…"} Voko de ilo. arguments estas JSON-ĉeno. Resendu la rezulton kun la sama call_id.

La SDK de OpenAI kunigas por vi la tekston de la mesaĝo en response.output_text.

Streaming

Agordu stream al true por server-sent events. Ĉiu kadro havas linion event: kun la nomo de la evento kaj linion data: kun JSON-objekto; la objekto ripetas la nomon en type. Kongruigu deltojn kun ilia ero per output_index.

Kun la SDK de OpenAI, legu la eventojn laŭ ilia 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")

La eventoj alvenas en ĉi tiu ordo. La grupoj por rezonado, la mesaĝo kaj vokoj de iloj aperas nur kiam la respondo havas ilin.

Evento Utila ŝarĝo Kiam
response.created response Ĉiam unua. response.status estas in_progress kaj response.output estas malplena.
response.in_progress response Ĉiam dua, kun la sama objekto.
response.output_item.added output_index, item La rezonado komenciĝas: ero reasoning kun malplena summary.
response.reasoning_summary_text.delta output_index, summary_index, delta Peceto de la rezonado.
response.reasoning_summary_text.done output_index, summary_index, text La rezonado estas kompleta: ĝia tuta text.
response.output_item.done output_index, item La finita ero reasoning.
response.output_item.added output_index, item La respondo komenciĝas: ero message kun stato in_progress kaj sen enhavo.
response.content_part.added output_index, content_index, part Malplena parto output_text malfermiĝas.
response.output_text.delta output_index, content_index, delta Peceto de la respondo.
response.output_text.done output_index, content_index, text La respondo estas kompleta: ĝia tuta text.
response.content_part.done output_index, content_index, part La finita parto output_text.
response.output_item.done output_index, item La finita ero message, kun stato completed.
response.output_item.added output_index, item Voko de ilo komenciĝas: ero function_call kun call_id, name kaj malplenaj arguments.
response.function_call_arguments.delta output_index, delta La argumentoj de la voko, kompletaj en unu delta.
response.function_call_arguments.done output_index, arguments La samaj argumentoj, kiel arguments.
response.output_item.done output_index, item La finita ero function_call.
response.completed response Ĉiam lasta ĉe sukceso: la tuta objekto de respondo kun output kaj 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}, …}}

Fluo, kiu malsukcesas

Ĉe la niveloj de Shannon malsukcesa respondo finiĝas per response.failed anstataŭ response.completed. Ĝia response.status estas failed kaj response.error enhavas code, rate_limit_exceeded aŭ server_error, kaj message.

Ĉe la gastigitaj malfermpezaj modeloj malsukceso estas evento error kun code api_error kaj message. response.completed tamen sekvas ĝin.

Traktu fluon kiel malsukcesan kiam ĝi enhavas eventon response.failed aŭ error, kaj resendu la peton.

Iloj

Ilo estas funkcio, kiun via kodo plenumas. Priskribu ĝin en tools; kiam la modelo volas ĝin, la respondo enhavas eron function_call anstataŭ la mesaĝo aŭ apud ĝi.

Difino de ilo en tools:

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

La output de respondo, kiu vokas ĝin:

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

Plenumu la funkcion, poste resendu la peton kun la voko kaj ĝia rezulto aldonitaj al 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\"}"
  }
]

Nur iloj de tipo function estas legataj. Ĉe shannon-1.6-*, shannon-2-* kaj shannon-coder-1 la skemo parameters estas reduktita al la komunaj ŝlosilvortoj de JSON Schema: oneOf estas legata kiel anyOf, kaj ŝlosilvortoj kiel $ref, additionalProperties, const, default kaj title ne estas transdonataj al la modelo.

La valoroj de tool_choice required kaj nomita funkcio estas aplikataj de la gastigitaj malfermpezaj modeloj.

La ciklo de iloj estas priskribita plene en sia propra paĝo. Funkci-alvokoj

Strukturita eligo

Ĉi tiu formato literumas strukturitan eligon kiel text.format. La skemo troviĝas rekte en format, apud name kaj strict, ne sub membro json_schema kiel ĉe Chat Completions.

  • {"type": "json_object"} petas ajnan JSON-objekton.
  • {"type": "json_schema", "name", "schema", "strict"} petas JSON, kiu sekvas vian skemon. strict estas true kiam vi lasas ĝin ekster.
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"
        ]
      }
    }
  }
}

La JSON alvenas kiel teksto en la parto output_text de la mesaĝo; analizu ĝin mem. Gastigita malfermpeza modelo sen strukturita eligo redonas 400.

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

Kiu modelo akceptas kiun formon, estas listigita en sia propra paĝo. Strukturitaj eligoj

Rezonado

Modelo, kiu rezonas, redonas sian rezonadon kiel eligan eron de tipo reasoning, antaŭ la mesaĝo. En fluo ĝi alvenas kiel eventoj response.reasoning_summary_text.delta.

La gastigitaj malfermpezaj modeloj aplikas reasoning.effort: off, low, medium aŭ high, kun high kiam vi sendas nenion. off redonas neniun eron de rezonado. Sendu ĝin kiel objekton; nuda ĉeno ne estas legata ĉe ĉi tiu endpoint.

La penoj estas priskribitaj en sia propra paĝo. Peno de reasoning

Eliga limo

max_output_tokens estas 4,096 kiam vi ne sendas ĝin. Ĝi estas la nombro da tokenoj rezervitaj el via saldo kiam la peto komenciĝas; kiam la respondo estas kompleta, tiu kvanto estas anstataŭata per tio, kion la peto uzis. Valoro, kiu ne eniras en vian restantan saldon, redonas 429 Quota exceeded.

Ĝi limigas la longecon de la respondo ĉe shannon-1.6-*, shannon-2-* kaj shannon-coder-1, kaj la longecon de la teksto de la respondo ĉe la gastigitaj malfermpezaj modeloj.

Ĉe ĉi tiu endpoint shannon-coder-1 estas kalkulata en tokenoj el via saldo, kiel ĉiu alia modelo.

Korpo de peto povas esti ĝis 32 MiB. Limoj kaj saldo

Eraroj

Eraroj uzas la erarkorpon de OpenAI: objekton error kun type kaj message; kelkaj portas ankaŭ code kaj param kun la valoro null. La tabelo listigas kion ĉi tiu endpoint plej ofte redonas. La plena listo, kun tio, kion reprovi, havas propran paĝon. Erarotraktado

Stato Tipo Mesaĝo Kiam
401 authentication_error Missing authentication
Invalid API key
Neniu API-ŝlosilo estis sendita, aŭ la ŝlosilo estas nekonata aŭ revokita.
400 invalid_request_error unknown model: <id> model mankas aŭ ne estas publikigita id.
400 invalid_request_error No user message provided. Niveloj de Shannon: input enhavas neniun tekston de uzanto.
400 invalid_request_error <id> does not accept image input Bildo estis sendita al gastigita malfermpeza modelo sen bilda enigo.
400 invalid_request_error <id> does not accept response_format text.format estis sendita al gastigita malfermpeza modelo sen strukturita eligo.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning.effort havas valoron ekster la listo.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … La korpo estas valida JSON, sed kampo havas malĝustan tipon.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_output_tokens estas pli granda ol tio, kio restas de via saldo.
429 rate_limit_error Too many requests. Retry in <n>s. Flood protection: pli ol 120 petoj en unu minuto en via konto.
500 api_error The model backend failed to answer. Please retry. La modelo ne produktis respondon. Resendu la peton.
502 api_error The model backend failed to answer. Please retry. La sama, ĉe la gastigitaj malfermpezaj modeloj.
504 api_error upstream timed out Gastigita malfermpeza modelo bezonis pli longe ol la tempolimo de respondo, kiu ne estas fluata. Sendu ĝin kun stream agordita al true.