İçeriğe geç
Responses API

Responses API

Yeni

POST /v1/responses talimatları ve bir giriş öğeleri listesini alır, OpenAI Responses biçiminde çıktı öğelerinden oluşan bir response nesnesi döndürür. OpenAI SDK'sının responses API'siyle ve Codex CLI gibi onun üzerine kurulu araçlarla kullanın. Uç nokta durum tutmaz: konuşmanın tamamını her istekle gönderin.

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

En küçük istek bir model kimliği ve bir metindir. Siz istemedikçe yanıt stream edilmez.

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)

Yanıt bir response nesnesidir. output alanı, model akıl yürüttüyse akıl yürütmeyi ve mesajı içerir:

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

İstek alanları

Bir isteğin ihtiyaç duyduğu model ve input alanlarıdır. Uygulayan sütunu, bir alanın yanıtı değiştirdiği modelleri adlandırır. Host edilen açık ağırlıklı modeller, model listesindeki on iki kimliktir; Shannon 3 ailesi shannon-3, shannon-3-pro, shannon-3.1 ve shannon-3.1-pro modelleridir. Modeller ve fiyatlandırma

Alan Tür Varsayılan Açıklama Uygulayan
model string Zorunlu. Model listesinden bir kimlik. Eşleştirme büyük/küçük harfe duyarlı değildir. Eksik ya da yayımlanmamış bir kimlik 400 unknown model döndürür. Tüm modeller
input string | array Tek bir kullanıcı mesajı olarak okunan bir dize ya da giriş öğeleri dizisi. Aşağıdaki Giriş öğeleri bölümüne bakın. Tüm modeller
instructions string Model için talimatlar, bu biçimin sistem istemi. Host edilen açık ağırlıklı modeller, shannon-1.6-*, shannon-2-*, shannon-coder-1
stream boolean false true, yanıtı server-sent events olarak gönderir. Aşağıdaki Streaming bölümüne bakın. Tüm modeller
max_output_tokens integer 4096 Yanıtın token cinsinden üst sınırı. 1 ile 65,536 dışındaki bir değer bu aralığa çekilir. Aynı zamanda istek çalışırken bakiyenizden ayrılan miktardır. Aşağıdaki Çıktı sınırı bölümüne bakın. Host edilen açık ağırlıklı modeller, shannon-1.6-*, shannon-2-*, shannon-coder-1
temperature number Örnekleme sıcaklığı. Host edilen açık ağırlıklı modellerde değerler 0 ile 2 arasında tutulur. Host edilen açık ağırlıklı modeller; stream edilmeyen yanıtlarda shannon-1.6-*, shannon-2-* ve shannon-coder-1
top_p number Nucleus örnekleme. Değerler 0 ile 1 arasında tutulur. Host edilen açık ağırlıklı modeller
tools array Modelin çağırabileceği fonksiyonlar, bu biçimin düz formunda: {"type": "function", "name", "description", "parameters"}. Aşağıdaki Araçlar bölümüne bakın. Tüm modeller
tool_choice string | object auto "auto" kararı modele bırakır. "required" modelin bir araç çağırmasını sağlar. {"type": "function", "name": "…"} modelin o aracı çağırmasını sağlar. Host edilen açık ağırlıklı modeller
reasoning object off, low, medium veya high ile {"effort": "…"}. Başka herhangi bir değer 400 döndürür. Host edilen açık ağırlıklı modeller
text object {"format": {…}} JSON bir yanıt ister. Aşağıdaki Yapılandırılmış çıktı bölümüne bakın. Tüm Shannon katmanları; host edilen açık ağırlıklı modeller kimlik başına listelendiği gibi

previous_response_id, store, metadata, parallel_tool_calls, truncation, include, user ve prompt_cache_key kabul edilir; böylece mevcut istemci kodu değişmeden çalışır. Yanıtı değiştirmezler. Hiçbir konuşma saklanmadığı için sonraki bir istek önceki turları input içinde taşır.

Giriş öğeleri

Bir giriş öğesi ya role ve content içeren bir mesaj ya da bir araç çağrısını veya sonucunu taşıyan türlü bir öğedir. content bir dize ya da parça dizisidir.

Öğe Açıklama Uygulayan
{"role": "user", "content": …} Sorduğunuz şey. content bir dize ya da input_text ve input_image parçalarıdır. Tüm modeller
{"role": "assistant", "content": …} Modelin önceki bir yanıtı. content bir dize ya da output_text parçalarıdır. Tüm modeller
{"role": "system", "content": …}
{"role": "developer", "content": …}
Konuşmanın içindeki talimatlar. Host edilen açık ağırlıklı modeller
{"type": "function_call", "call_id": "…", "name": "…", "arguments": "…"} Modelin önceki bir yanıtta yaptığı araç çağrısı. arguments bir JSON dizesidir. Tüm modeller
{"type": "function_call_output", "call_id": "…", "output": "…"} O çağrının sonucu. call_id çağrının kimliği, output ise dize olarak sonuçtur. Tüm modeller

Talimatları instructions alanına koyun. Bir Shannon 3 ailesi kimliğiyle, geçerli olması gereken talimatları user mesajına koyun.

Bir yanıtın output öğeleri olduğu gibi input içine geri konabilir: message ve function_call öğeleri okunur, reasoning öğeleri atlanır.

İçerik parçaları

Parça Açıklama Kullanılabildiği yer
{"type": "input_text", "text": "…"} Bir kullanıcı mesajının metni. Tüm modeller
{"type": "output_text", "text": "…"} Bir asistan mesajının metni. Tüm modeller
{"type": "input_image", "image_url": "…"} Base64 içerikli bir data: URL'si olarak ya da bir http(s) URL'si olarak görsel. Shannon 3 ailesi, shannon-1.6-lite, shannon-1.6-pro ve görsel girdisini listeleyen host edilen açık ağırlıklı modeller
{"type": "input_file", "file_data": "data:application/pdf;base64,…"} Bir doküman (PDF, Word, PowerPoint veya Excel): file_data bir data: URL'si, file_url ise bir http(s) URL'si içerir. Shannon 3 ailesi

Shannon katmanlarında görseller ve dosyalar input içindeki son user öğesinden okunur. Boyutların ve sınırların kendi sayfası vardır. Görseller ve dosyalar

Talimatlar ve seçeneklerle bir istek

Bu istek talimatları, giriş öğeleri olarak bir konuşmayı, bir çıktı sınırını, bir sıcaklığı ve bir akıl yürütme effort'unu gönderir. Hepsini uygulayan, host edilen bir açık ağırlıklı model kullanır.

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)

Host edilen bir açık ağırlıklı modelin yanıtında id, object, model, created_at, status, output ve usage bulunur. usage alanı önbellekten okunan token'ları ve akıl yürütmeye harcanan token'ları ekler:

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

Response nesnesi

id, object, status, output ve usage her yanıtta bulunur. Kodunuzu bunlar üzerine kurun.

Alan Tür Açıklama Gönderen
id string resp_ ve ardından 32 onaltılık karakter. Tüm modeller
object string Her zaman response. Tüm modeller
status string completed. Bir stream'de önce in_progress, bir response.failed olayında ise failed olur. Tüm modeller
output array Çıktı öğeleri, modelin ürettiği sırayla: reasoning, message, function_call. Tüm modeller
usage object input_tokens, output_tokens ve total_tokens. Tüm modeller
usage.input_tokens_details object cached_tokens: istem önbelleğinden okunan giriş token'ları. Host edilen açık ağırlıklı modeller
usage.output_tokens_details object reasoning_tokens: akıl yürütmeye harcanan çıktı token'ları. Host edilen açık ağırlıklı modeller
model string Yanıt veren modelin kanonik kimliği. Shannon 3 ailesi, host edilen açık ağırlıklı modeller
created_at integer Yanıtın Unix saniyesi cinsinden zamanı. Shannon 3 ailesi, host edilen açık ağırlıklı modeller
instructions, tools, temperature, … instructions, tools ve temperature isteği tekrarlar. error ve incomplete_details null, metadata {}, parallel_tool_calls true, tool_choice auto ve top_p null olur. Shannon 3 ailesi

Çıktı öğeleri

Öğe Açıklama
{"id": "rs_…", "type": "reasoning", "summary": [{"type": "summary_text", "text": "…"}]} Modelin akıl yürütmesi, tek bir summary_text parçası olarak. Yalnızca model akıl yürüttüyse bulunur.
{"id": "msg_…", "type": "message", "role": "assistant", "content": [{"type": "output_text", "text": "…"}]} Yanıt: metni içeren bir output_text parçası.
{"id": "fc_…", "type": "function_call", "call_id": "call_…", "name": "…", "arguments": "…"} Bir araç çağrısı. arguments bir JSON dizesidir. Sonucu aynı call_id ile geri gönderin.

OpenAI SDK'ları mesajın metnini sizin için response.output_text içinde birleştirir.

Streaming

Server-sent events için stream değerini true yapın. Her frame'de olayın adını taşıyan bir event: satırı ve bir JSON nesnesi içeren bir data: satırı bulunur; nesne adı type içinde tekrarlar. Delta'ları öğelerine output_index ile eşleştirin.

OpenAI SDK'sı ile olayları type alanlarına göre okuyun:

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

Olaylar bu sırayla gelir. Akıl yürütme, mesaj ve araç çağrıları grupları yalnızca yanıtta varsa görünür.

Olay Yük Ne zaman
response.created response Her zaman ilk. response.status değeri in_progress ve response.output boştur.
response.in_progress response Her zaman ikinci, aynı nesneyle.
response.output_item.added output_index, item Akıl yürütme başlar: boş bir summary içeren bir reasoning öğesi.
response.reasoning_summary_text.delta output_index, summary_index, delta Akıl yürütmeden bir parça.
response.reasoning_summary_text.done output_index, summary_index, text Akıl yürütme tamamlandı: text alanının tamamı.
response.output_item.done output_index, item Tamamlanmış reasoning öğesi.
response.output_item.added output_index, item Yanıt başlar: durumu in_progress olan ve içeriği olmayan bir message öğesi.
response.content_part.added output_index, content_index, part Boş bir output_text parçası açılır.
response.output_text.delta output_index, content_index, delta Yanıttan bir parça.
response.output_text.done output_index, content_index, text Yanıt tamamlandı: text alanının tamamı.
response.content_part.done output_index, content_index, part Tamamlanmış output_text parçası.
response.output_item.done output_index, item Durumu completed olan, tamamlanmış message öğesi.
response.output_item.added output_index, item Bir araç çağrısı başlar: call_id, name ve boş arguments içeren bir function_call öğesi.
response.function_call_arguments.delta output_index, delta Çağrının argümanları, tek bir delta içinde eksiksiz.
response.function_call_arguments.done output_index, arguments Aynı argümanlar, arguments olarak.
response.output_item.done output_index, item Tamamlanmış function_call öğesi.
response.completed response Başarıda her zaman sonuncu: output ve usage ile response nesnesinin tamamı.
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}, …}}

Başarısız olan bir stream

Shannon katmanlarında başarısız bir yanıt, response.completed yerine response.failed ile biter. response.status değeri failed olur ve response.error bir code (rate_limit_exceeded veya server_error) ile bir message içerir.

Host edilen açık ağırlıklı modellerde bir başarısızlık, code değeri api_error ve bir message içeren bir error olayıdır. Ardından yine response.completed gelir.

Bir stream'de response.failed ya da error olayı varsa stream'i başarısız sayın ve isteği yeniden gönderin.

Araçlar

Araç, kodunuzun çalıştırdığı bir fonksiyondur. Onu tools içinde tanımlayın; model onu istediğinde yanıt, mesajın yerine ya da yanında bir function_call öğesi içerir.

tools içinde bir araç tanımı:

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

Onu çağıran bir yanıtın output alanı:

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

Fonksiyonu çalıştırın, sonra çağrıyı ve sonucunu input içine ekleyerek isteği yeniden gönderin:

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

Yalnızca function türündeki araçlar okunur. shannon-1.6-*, shannon-2-* ve shannon-coder-1 modellerinde parameters şeması ortak JSON Schema anahtar sözcüklerine indirgenir: oneOf, anyOf gibi okunur; $ref, additionalProperties, const, default ve title gibi anahtar sözcükler modele iletilmez.

tool_choice değerlerinden required ve adı verilen bir fonksiyon, host edilen açık ağırlıklı modeller tarafından uygulanır.

Araç döngüsü kendi sayfasında ayrıntılı olarak anlatılır. Fonksiyon Çağırma

Yapılandırılmış çıktı

Bu biçim yapılandırılmış çıktıyı text.format olarak yazar. Şema, Chat Completions'taki gibi bir json_schema üyesinin altında değil, doğrudan format içinde, name ve strict yanında yer alır.

  • {"type": "json_object"} herhangi bir JSON nesnesi ister.
  • {"type": "json_schema", "name", "schema", "strict"} şemanıza uyan JSON ister. strict, göndermezseniz true olur.
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, mesajın output_text parçasında metin olarak gelir; kendiniz ayrıştırın. Yapılandırılmış çıktısı olmayan, host edilen bir açık ağırlıklı model 400 döndürür.

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

Hangi modelin hangi biçimi kabul ettiği kendi sayfasında listelenir. Yapılandırılmış Çıktılar

Akıl yürütme

Akıl yürüten bir model, akıl yürütmesini mesajdan önce reasoning türünde bir çıktı öğesi olarak döndürür. Bir stream'de response.reasoning_summary_text.delta olayları olarak gelir.

Host edilen açık ağırlıklı modeller reasoning.effort değerini uygular: off, low, medium veya high; hiçbir şey göndermezseniz high. off akıl yürütme öğesi döndürmez. Bir nesne olarak gönderin; çıplak bir dize bu uç noktada okunmaz.

Effort düzeyleri kendi sayfasında anlatılır. Akıl yürütme çabası

Çıktı sınırı

max_output_tokens, göndermediğinizde 4,096'dır. İstek başladığında bakiyenizden ayrılan token sayısıdır; yanıt tamamlandığında bu miktarın yerini isteğin kullandığı miktar alır. Kalan bakiyenize sığmayan bir değer 429 Quota exceeded döndürür.

shannon-1.6-*, shannon-2-* ve shannon-coder-1 modellerinde yanıtın uzunluğunu, host edilen açık ağırlıklı modellerde ise yanıt metninin uzunluğunu sınırlar.

Bu uç noktada shannon-coder-1, diğer tüm modeller gibi bakiyenizden token olarak ücretlendirilir.

Bir istek gövdesi en fazla 32 MiB olabilir. Limitler ve bakiye

Hatalar

Hatalar OpenAI hata gövdesini kullanır: type ve message içeren bir error nesnesi; bazıları ayrıca null değerli code ve param taşır. Tablo bu uç noktanın en sık döndürdüklerini listeler. Tam liste, nelerin yeniden deneneceğiyle birlikte, kendi sayfasındadır. Hata yönetimi

Durum Tür Mesaj Ne zaman
401 authentication_error Missing authentication
Invalid API key
API anahtarı gönderilmedi ya da anahtar bilinmiyor veya iptal edilmiş.
400 invalid_request_error unknown model: <id> model eksik ya da yayımlanmış bir kimlik değil.
400 invalid_request_error No user message provided. Shannon katmanları: input kullanıcı metni içermiyor.
400 invalid_request_error <id> does not accept image input Görsel girdisi olmayan, host edilen bir açık ağırlıklı modele görsel gönderildi.
400 invalid_request_error <id> does not accept response_format Yapılandırılmış çıktısı olmayan, host edilen bir açık ağırlıklı modele text.format gönderildi.
400 invalid_request_error unknown reasoning effort '<value>'; expected off, low, medium or high reasoning.effort listenin dışında bir değer içeriyor.
422 invalid_request_error Failed to deserialize the JSON body into the target type: … Gövde geçerli JSON ama bir alanın türü yanlış.
429 rate_limit_error Quota exceeded. Upgrade your plan at shannon-ai.com/plan max_output_tokens, bakiyenizde kalandan büyük.
429 rate_limit_error Too many requests. Retry in <n>s. Flood koruması: hesabınızda bir dakikada 120'den fazla istek.
500 api_error The model backend failed to answer. Please retry. Model bir yanıt üretmedi. İsteği yeniden gönderin.
502 api_error The model backend failed to answer. Please retry. Aynısı, host edilen açık ağırlıklı modellerde.
504 api_error upstream timed out Host edilen bir açık ağırlıklı model, stream edilmeyen bir yanıtın zaman sınırından uzun sürdü. İsteği stream değeri true olarak gönderin.