
Οδηγός OpenAI Responses API: 14 Παραδείγματα σε Python για Προγραμματιστές
Ο οδηγός OpenAI Responses API που πραγματικά χρειάζεστε: 14 εκτελέσιμα παραδείγματα Python που καλύπτουν ενσωματωμένα εργαλεία, streaming, κλήση συναρτήσεων, MCP και μια μετάβαση 3 βημάτων από τα Chat Completions. Το Responses API κυκλοφόρησε στις 11 Μαρτίου 2025 ως η ενιαία βασική λειτουργία (primitive) της OpenAI για εφαρμογές τύπου agent και, από τον Απρίλιο του 2026, αποτελεί το προτεινόμενο σημείο εκκίνησης για κάθε νέο project της OpenAI. Δοκιμάσαμε κάθε παράδειγμα παρακάτω με το πιο πρόσφατο Python SDK openai>=1.50 τον Απρίλιο του 2026 — κάθε block κώδικα εκτελείται ως έχει.
Βασικά συμπεράσματα
- Το Responses API (κυκλοφόρησε στις 11 Μαρτίου 2025) ενοποιεί τα Chat Completions, το Assistants API και τα ενσωματωμένα εργαλεία σε μία stateful βασική λειτουργία.
- Υποστηρίζει
web_search,file_search,code_interpreter,computer_use,image_generationκαι απομακρυσμένους MCP servers out of the box.- Η μετάβαση από τα Chat Completions απαιτεί 3 βήματα: αλλαγή endpoint, μετονομασία
messages→input, ενημέρωση schemas εργαλείων.- Χρησιμοποιήστε
previous_response_id(μεstore: true) για ελαφρύ state management ή το Conversations API για αξιόπιστες πολυ-turn συνομιλίες.
Τι είναι το OpenAI Responses API;
Το OpenAI Responses API είναι μια ενιαία βασική λειτουργία που κυκλοφόρησε τον Μάρτιο του 2025 και συνδυάζει την απλότητα των Chat Completions με τη χρήση εργαλείων του Assistants API. Υποστηρίζει είσοδο κειμένου + εικόνας, ενσωματωμένα εργαλεία (αναζήτηση web, αναζήτηση αρχείων, διερμηνέας κώδικα, χρήση υπολογιστή, δημιουργία εικόνων), κλήση συναρτήσεων, δομημένες εξόδους, streaming και stateful συνομιλίες μέσω previous_response_id.
Γιατί λοιπόν η OpenAI κυκλοφόρησε ένα τρίτο API όταν τα Chat Completions λειτουργούσαν ήδη; Επειδή ο πρακτορικός βρόχος, όπου το μοντέλο καλεί ένα εργαλείο, λαμβάνει ένα αποτέλεσμα και αποφασίζει την επόμενη κίνηση, ήταν δύσχρηστο να υλοποιηθεί πάνω από τα chat.completions. Καταλήγατε να μεταφέρετε αποτελέσματα εργαλείων μπρος-πίσω σε πίνακες messages, να διαχειρίζεστε IDs threads με το Assistants API ή να δημιουργείτε δικό σας state management. Το Responses API αντιμετωπίζει αυτόν τον βρόχο ως πρώτη-class έννοια.
Αν ξεκινάτε ένα νέο project OpenAI το 2026, το Responses API είναι η προεπιλογή, ενώ τα Chat Completions είναι η legacy βασική λειτουργία από την οποία μεταβαίνετε. Οι μεγάλες εξαιρέσεις: realtime audio (χρησιμοποιήστε το Realtime API) και pure embeddings (χρησιμοποιήστε το Embeddings API). Για όλα τα άλλα, chatbots, agents, pipelines RAG, extractors δομημένων δεδομένων, το Responses είναι αυτό στο οποίο σας παραπέμπουν τα docs της OpenAI και η ανάρτηση ανακοίνωσης της OpenAI.
Αν orchestrate πολλαπλά μοντέλα ή θέλετε ένα layer scaffolding υψηλότερου επιπέδου, συνήθως θα συνδυάσετε το Responses API με το OpenAI Agents SDK. Αναλύσαμε τις trade-offs στη σύγκρισή μας OpenAI Agents SDK, TL;DR: το Responses είναι η βασική λειτουργία, το Agents SDK είναι το framework.
Πώς διαφέρει το Responses API από τα Chat Completions;
Το Responses API είναι ένα superset των Chat Completions: κάθε λειτουργία των Chat Completions λειτουργεί στο Responses, плюс ενσωματωμένα εργαλεία, statefulness και τον πρακτορικό βρόχο. Η OpenAI προτείνει το Responses για όλα τα νέα projects. Τα Chat Completions παραμένουν υποστηριζόμενα αλλά δεν είναι πλέον η προεπιλεγμένη βασική λειτουργία για agents.
Εδώ είναι η σύγκριση πλευρά-πλευρά, από τα docs της πλατφόρμας OpenAI:
| Λειτουργία | Responses API | Chat Completions | Assistants API |
|---|---|---|---|
| Μορφή εισόδου | input (string ή array) | Πίνακας messages | Thread + messages |
| Stateful | Ναι (previous_response_id) | Όχι (στείλτε ιστορικό) | Ναι (threads) |
| Ενσωματωμένα εργαλεία | Και τα 5 + MCP | Κανένα | Code Interpreter, File Search |
| Streaming | Ναι (typed SSE events) | Ναι | Ναι |
| Κλήση συναρτήσεων | Ναι (flat πίνακας tools) | Ναι (flat πίνακας tools) | Ναι (per-assistant) |
| Πολυτροπική είσοδος | Κείμενο + εικόνες + αρχεία | Κείμενο + εικόνες | Κείμενο + εικόνες + αρχεία |
| Προτείνεται για | Agents, νέα projects | Απλές ολοκληρώσεις, legacy | Σε διαδικασία απόσυρσης (2026) |
| Κατάσταση (Απρ 2026) | Προεπιλογή για νέα projects | Legacy, still supported | Sunsetting |
Κάθε λειτουργία των Chat Completions λειτουργεί στο Responses· το αντίστροφο δεν ισχύει. Ο κανόνας απόφασης είναι σύντομος: αν χρειάζεστε ενσωματωμένα εργαλεία, statefulness ή ξεκινάτε από την αρχή, χρησιμοποιήστε το Responses. Αν έχετε ένα σταθερό pipeline Chat Completions που δεν αγγίζει εργαλεία και το gateway σας δεν υποστηρίζει ακόμα το Responses, η μετάβαση δεν είναι επείγουσα, απλώς μην χτίζετε νέους agents στο παλιό API.
Ρύθμιση και η πρώτη σας κλήση στο Responses API
Για να κάνετε την πρώτη σας κλήση στο Responses API, εγκαταστήστε το OpenAI Python SDK 1.50 ή νεότερο, ορίστε τη μεταβλητή περιβάλλοντος OPENAI_API_KEY και καλέστε client.responses.create() με ένα model και input. Το πλήρες παράδειγμα hello-world παίρνει λιγότερο από 60 δευτερόλεπτα.
Βήμα 1 — Εγκατάσταση του SDK:
pip install --upgrade "openai>=1.50"Βήμα 2 — Ορισμός του API key σας:
export OPENAI_API_KEY="sk-proj-..."(Στο Windows PowerShell: $env:OPENAI_API_KEY = "sk-proj-...". Ποτέ μην κάνετε commit αυτό στο git, χρησιμοποιήστε ένα αρχείο .env μαζί με python-dotenv για local development.)
Βήμα 3 — Κλήση Hello-world:
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5",
input="Say hello in exactly 5 words.",
)
print(response.output_text)Εκτελέστε το και θα λάβετε έναν χαιρετισμό 5 λέξεων πίσω. Ο helper output_text συνενώνει κάθε text chunk σε ένα string, χρήσιμο όταν δεν σας ενδιαφέρει η δομημένη έξοδος.
Βήμα 4 — Επιθεώρηση του αντικειμένου response:
print("ID: ", response.id)
print("Status: ", response.status)
print("Model: ", response.model)
print("Output: ", response.output) # list of output items
print("First text:", response.output[0].content[0].text)
print("Usage: ", response.usage) # input_tokens, output_tokensΑυτός ο πίνακας response.output είναι αυτό που πρέπει να memorize. Είναι μια λίστα typed items: κείμενο, κλήσεις εργαλείων, αποτελέσματα εργαλείων, summaries reasoning. Θα τον iterάρετε συνεχώς μόλις αρχίσετε να χρησιμοποιείτε ενσωματωμένα εργαλεία.
Πώς κάνετε Stream τις Απαντήσεις με το Responses API;
Το Streaming με το Responses API χρησιμοποιεί Server-Sent Events. Περάστε stream=True στο client.responses.create() και iterάρετε over το resulting event stream. Κάθε event έχει ένα πεδίο type, response.output_text.delta για token chunks και response.completed για το τελικό payload. Το SDK 1.50+ εκθέτει ένα typed event stream.
Αν renderνε tokens σε ένα UI, θα iterάρετε τα events response.output_text.delta και θα αγνοήσετε τα υπόλοιπα.
from openai import OpenAI
client = OpenAI()
with client.responses.stream(
model="gpt-5",
input="Write a haiku about Python decorators.",
) as stream:
for event in stream:
if event.type == "response.output_text.delta":
print(event.delta, end="", flush=True)
elif event.type == "response.error":
print(f"\n[error] {event.error}")
break
elif event.type == "response.completed":
print("\n[done]")
final = stream.get_final_response()
print(f"\nTokens: {final.usage.output_tokens}")Λίγα gotchas που συναντήσαμε κατά τις δοκιμές: ο stream context manager χειρίζεται τον καθαρισμό σύνδεσης αυτόματα, οπότε μην τον κλείνετε χειροκίνητα. Αν θέλετε async, αντικαταστήστε το OpenAI() με AsyncOpenAI() και χρησιμοποιήστε async with μαζί με async for, ίδια ονόματα events, ίδια μορφή.
Ενσωματωμένα Εργαλεία: Web Search, File Search, Code Interpreter, Computer Use, Image Generation
Το Responses API поставляется με πέντε ενσωματωμένα εργαλεία: web_search για live αναζήτηση internet, file_search για retrieval vector store, code_interpreter για sandboxed εκτέλεση Python, computer_use για αυτοματοποίηση browser/desktop και image_generation για inline δημιουργία εικόνων. Ενεργοποιήστε οποιοδήποτε από αυτά προσθέτοντας {"type": "<tool_name>"} στον πίνακα tools.
Εδώ είναι η μήτρα που κρατάμε pinned δίπλα στον editor μας:
| Εργαλείο | Σκοπός | Κόστος | Stateful | Μοντέλα | Production-ready (Απρ 2026) |
|---|---|---|---|---|---|
web_search | Live αναζήτηση internet | Surcharge per-call | Όχι | gpt-5, gpt-4.1 | Ναι |
file_search | Vector store RAG | Per-call + storage | Ναι (vector store) | gpt-5, gpt-4.1, o-series | Ναι |
code_interpreter | Sandboxed Python | Per-session | Ναι (container) | gpt-5, o-series | Ναι |
computer_use | Έλεγχος browser/desktop | Surcharge per-call | Per-session | gpt-5 (preview) | Preview |
image_generation | Inline δημιουργία εικόνων | Per-image | Όχι | gpt-5, gpt-image-1 | Ναι |
Όταν benchmarkάραμε το web_search στο pipeline μας, η latency πρόσθεσε 1.5–3s στην πρώτη κλήση αλλά cached για επαναλήψεις, σχεδιάστε το ανάλογα στο UI. Το παράδειγμα web search του OpenAI Cookbook είναι η πιο καθαρή αναφορά αν θέλετε να βάθετε.
Web Search
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5",
tools=[{"type": "web_search"}],
input="What did OpenAI announce at DevDay 2025? Cite your sources.",
)
print(response.output_text)
# Inspect the web_search_call items in response.output for raw search hits
for item in response.output:
if item.type == "web_search_call":
print(f"[searched] {item.query}")File Search
Η αναζήτηση αρχείων είναι ένας χορός δύο βημάτων: δημιουργήστε ένα vector store, ανεβάστε τα αρχεία σας και στη συνέχεια αναφερθείτε στο store ID στον πίνακα tools.
from openai import OpenAI
client = OpenAI()
# 1. Create a vector store + upload a file
store = client.vector_stores.create(name="company-handbook")
client.vector_stores.files.upload_and_poll(
vector_store_id=store.id,
file=open("handbook.pdf", "rb"),
)
# 2. Use it in a Responses call
response = client.responses.create(
model="gpt-5",
input="What's our PTO policy?",
tools=[{
"type": "file_search",
"vector_store_ids": [store.id],
}],
)
print(response.output_text)Code Interpreter
Χρειάζεστε το μοντέλο να εκτελέσει Python σε ένα CSV και να κάνει chart κάτι; Το code_interpreter το κάνει αυτό σε ένα sandboxed container.
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5",
input="Read sales.csv and plot monthly revenue as a bar chart. Return a summary.",
tools=[{"type": "code_interpreter", "container": {"type": "auto"}}],
)
print(response.output_text)Το container persist across calls στην ίδια session, χρήσιμο όταν θέλετε το μοντέλο να συνεχίζει να iterάρε σε ένα dataframe.
Computer Use
Ακόμα σε preview από τον Απρίλιο του 2026. Το μοντέλο αποκτά ένα virtual browser/desktop και κάνει click γύρω για να ολοκληρώσει tasks. Παραλείψτε το εκτός αν έχετε ένα συγκεκριμένο use case browser-automation που ο κόσμος Playwright/Selenium δεν μπορεί ήδη να λύσει.
Image Generation
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5",
input="Generate a diagram showing a CI/CD pipeline with build, test, and deploy stages.",
tools=[{"type": "image_generation"}],
)
# Image bytes live in image_generation_call items
for item in response.output:
if item.type == "image_generation_call":
with open("pipeline.png", "wb") as f:
f.write(item.result)Κλήση Συναρτήσεων με Custom Εργαλεία
Η κλήση συναρτήσεων στο Responses API επιτρέπει στο μοντέλο να επικαλείται τις δικές σας Python functions. Ορίστε κάθε function ως JSON schema στον πίνακα tools, εκτελέστε την κλήση, ελέγξτε το response.output για items function_call, εκτελέστε τη function και περάστε το αποτέλεσμα πίσω μέσω function_call_output.
Το Responses API μετατρέπει την κλήση συναρτήσεων από έναν χορό 4 βημάτων σε ένα single round-trip όταν αφήνετε τον πρακτορικό βρόχο να το χειριστεί για εσάς. Εδώ είναι ένα πλήρες παράδειγμα μετατροπής νομισμάτων:
import json
from openai import OpenAI
client = OpenAI()
def convert_currency(amount: float, from_currency: str, to_currency: str) -> dict:
# Real impl would hit an FX API. Stubbed for the example.
rate = 1.08 if (from_currency, to_currency) == ("USD", "EUR") else 1.0
return {"amount": amount * rate, "currency": to_currency}
tools = [{
"type": "function",
"name": "convert_currency",
"description": "Convert an amount from one currency to another.",
"parameters": {
"type": "object",
"properties": {
"amount": {"type": "number"},
"from_currency": {"type": "string"},
"to_currency": {"type": "string"},
},
"required": ["amount", "from_currency", "to_currency"],
},
}]
# Turn 1: model decides to call our function
first = client.responses.create(
model="gpt-5",
input="How much is 250 USD in EUR?",
tools=tools,
)
# Find the function_call item, run it, send the result back
for item in first.output:
if item.type == "function_call" and item.name == "convert_currency":
args = json.loads(item.arguments)
result = convert_currency(**args)
second = client.responses.create(
model="gpt-5",
previous_response_id=first.id,
input=[{
"type": "function_call_output",
"call_id": item.call_id,
"output": json.dumps(result),
}],
tools=tools,
)
print(second.output_text)Αυτός είναι ο πλήρης βρόχος. Αν είστε νέοι στο pattern, η ανάρτησή μας θεμελιώδη στοιχεία κλήσης συναρτήσεων περνάει μέσα από το conceptual model, και διατηρούμε μια συλλογή από libraries κλήσης συναρτήσεων αν προτιμάτε να μην φτιάχνετε schemas χειροκίνητα. Η παράμετρος tool_choice (ρυθμισμένη σε "auto", "required" ή ένα specific tool name) είναι ο lever σας για να forced ή banned μια tool call όταν χρειάζεστε determinism.
Δομημένες Έξοδοι (JSON Schema και Pydantic)
Οι δομημένες έξοδοι εγγυώνται ότι το μοντέλο επιστρέφει JSON σύμφωνα με το schema σας. Περάστε μια παράμετρο response_format={"type": "json_schema", "json_schema": {...}} ή, με το Python SDK, δώστε του ένα Pydantic model απευθείας μέσω client.responses.parse(). Το μοντέλο περιορίζεται κατά τον decode time, όχι απλώς μέσω prompt.
from openai import OpenAI
from pydantic import BaseModel
client = OpenAI()
class Invoice(BaseModel):
invoice_number: str
total: float
currency: str
line_items: list[str]
response = client.responses.parse(
model="gpt-5",
input="Extract: Invoice #INV-2024-001 for $1,250.00 USD. Items: hosting, support, SSL cert.",
text_format=Invoice,
)
invoice: Invoice = response.output_parsed
print(invoice.invoice_number, invoice.total, invoice.line_items)Η διαδρομή Pydantic είναι αυτή που θέλετε το 95% του χρόνου, type-safe, λιγότερο boilerplate και το IDE σας autocompletes το αποτέλεσμα. Χρησιμοποιήστε raw JSON schema μόνο όταν χρειάζεστε cross-language schema sharing ή όταν το schema generated dynamically. Αναλύουμε τις trade-offs στον οδηγό μας δομημένες έξοδοι και JSON schema και στο primer μας Pydantic για type-safe schemas.
Διαχείριση State: previous_response_id, Conversations API και store=true
Χρησιμοποιήστε previous_response_id για lightweight multi-turn context, το Conversations API για αξιόπιστες threaded sessions ή στείλτε πλήρες ιστορικό messages για full client-side control. Το previous_response_id απαιτεί store: true και persist μόνο για cached responses· πέστε back σε full history αν το ID είναι unresolvable.
| Προσέγγιση | Χρησιμοποιήστε όταν | Persistence | Πολυπλοκότητα κώδικα |
|---|---|---|---|
previous_response_id | Γρήγορα chatbots, short threads | 30 ημέρες (default), απαιτείται store: true | Χαμηλότερη |
| Conversations API | Long-lived threads, multi-user apps | Persistent, εσείς διαχειρίζεστε τον καθαρισμό | Μέτρια |
| Send full history | Full client-side control, audit trails | Εσείς το κατέχετε | Υψηλότερη |
Εδώ είναι ένα παράδειγμα δύο turns χρησιμοποιώντας previous_response_id:
from openai import OpenAI
client = OpenAI()
# Turn 1 — must set store=True for the response to be referenceable
turn1 = client.responses.create(
model="gpt-5",
input="My name is Mert and I'm building a weather agent.",
store=True,
)
# Turn 2 — reference turn 1 by ID; the model "remembers" the name
turn2 = client.responses.create(
model="gpt-5",
previous_response_id=turn1.id,
input="What was my name again?",
store=True,
)
print(turn2.output_text) # "Your name is Mert..."Αν ξεχάσετε το store: true, το previous_response_id σας resolve σε τίποτα και το μοντέλο ξεκινά cold κάθε turn. Έχουμε κάψει μία ώρα debugγοντας αυτό, το API δεν κάνει error, απλώς σας κάνει amnesiac silently. Η default retention είναι 30 ημέρες· αν χρειάζεστε περισσότερο, πέστε στο Conversations API που σας δίνει explicit thread lifecycle control.
Πότε πρέπει να upgrade στο Conversations API; Όταν έχετε πολλούς users σε μία app, όταν τα threads outlive a single session ή όταν θέλετε server-side message editing/branching. Για ένα γρήγορο chatbot, το previous_response_id είναι αρκετό.
Πώς να Μεταβείτε από τα Chat Completions στο Responses API
Η μετάβαση από τα Chat Completions στο Responses API απαιτεί τρία βήματα: αλλάξτε /v1/chat/completions σε /v1/responses, αντικαταστήστε τα messages με input και αντικαταστήστε τα schemas tools με τη νέα μορφή. Η κλήση συναρτήσεων και οι πολυτροπικές είσοδοι χρειάζονται ελαφρώς διαφορετικό handling. Η OpenAI διαθέτει ένα official migration pack στο GitHub.
Βήμα 1 — Αντικατάσταση Endpoint:
# Before (Chat Completions)
response = client.chat.completions.create(
model="gpt-4.1",
messages=[{"role": "user", "content": "Hello"}],
)
text = response.choices[0].message.content
# After (Responses)
response = client.responses.create(
model="gpt-5",
input="Hello",
)
text = response.output_textΒήμα 2 — Μετονομασία messages → input:
# Before
client.chat.completions.create(
model="gpt-4.1",
messages=[
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "Summarize this PDF."},
],
)
# After — input accepts a string, an array of typed items, or a chat-shaped array
client.responses.create(
model="gpt-5",
instructions="You are a helpful assistant.", # system → instructions
input="Summarize this PDF.",
)Βήμα 3 — Ενημέρωση schemas εργαλείων:
# Before (Chat Completions tool format)
tools = [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Get current weather",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}},
},
}]
# After (Responses tool format — flatter, no nested "function" key)
tools = [{
"type": "function",
"name": "get_weather",
"description": "Get current weather",
"parameters": {"type": "object", "properties": {"city": {"type": "string"}}},
}]Αυτό είναι όλο. Roll traffic gradually με ένα feature flag, κρατήστε το code path των Chat Completions live πίσω από το ίδιο interface για μία ή δύο εβδομάδες, log both response shapes side-by-side και flip 100% μόνο αφού επαληθεύσετε parity. Το migration pack στο repo openai-cookbook έχει ένα fuller adapter pattern αν θέλετε μια αναφορά.
Πώς να Χρησιμοποιήσετε MCP και Απομακρυσμένους MCP Servers με το Responses API
Το Responses API υποστηρίζει απομακρυσμένους MCP (Model Context Protocol) servers ως tool type. Προσθέστε μια entry όπως {"type": "mcp", "server_url": "https://mcp.example.com", "server_label": "..."} στον πίνακα tools. Το μοντέλο ανακαλύπτει το tool catalog του MCP server και τα καλεί όπως τα ενσωματωμένα εργαλεία.
Αν δεν έχετε αγγίξει ποτέ το MCP, εδώ είναι το pitch 30 δευτερολέπτων: είναι ένα open protocol που επιτρέπει σε οποιαδήποτε service να εκθέσει το API της ως tool catalog που το μοντέλο μπορεί να καλέσει. Shopify, Stripe, GitHub και μια αυξανόμενη λίστα vendors τρέχουν public MCP endpoints. Η deep-dive ανάρτησή μας Model Context Protocol (MCP) καλύπτει το ίδιο το protocol.
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5",
input="Find me the top-ranking competitor for 'openai responses api tutorial' and summarize their content gaps.",
tools=[{
"type": "mcp",
"server_url": "https://mcp.semrush.com",
"server_label": "semrush",
"require_approval": "never", # set to "always" in production
}],
)
print(response.output_text)Αντιμετωπίστε τους MCP servers όπως οποιοδήποτε third-party API. Το require_approval: "never" είναι fine για prototypes· σε production θέλετε "always" (ή ένα tool allowlist) ώστε ένας compromised MCP server να μην μπορεί να exfiltrate data silently. Audit το tool catalog του server πριν point τον agent σας σε αυτόν.
Τιμολόγηση, Rate Limits και Production Gotchas
Η τιμολόγηση του Responses API ταιριάζει με τα Chat Completions στα token costs (prompt + completion), με surcharges per-call στα ενσωματωμένα εργαλεία (web_search, file_search). Τα rate limits ακολουθούν το existing OpenAI tier σας. Συχνά production gotchas περιλαμβάνουν defaults retention store: true, transient 429s σε burst traffic και lag features στην Azure variant.
| Οικογένεια μοντέλων | Responses API | Ενσωματωμένα εργαλεία | Reasoning effort | Streaming | Cost tier |
|---|---|---|---|---|---|
| gpt-5 | Ναι | Και τα 5 + MCP | N/A | Ναι | Δείτε τιμολόγηση OpenAI |
| gpt-5-mini | Ναι | Και τα 5 + MCP | N/A | Ναι | Χαμηλότερο από gpt-5 |
| gpt-4.1 | Ναι | web/file/code/image | N/A | Ναι | Mid |
| o-series (reasoning) | Ναι | file/code | low/medium/high | Ναι | Υψηλότερο per-token |
| gpt-image-1 | Μόνο εργαλείο image-gen | , | , | Όχι | Per-image |
Οι τιμές αλλάζουν, πάντα επαληθεύστε στη σελίδα τιμολόγησης της OpenAI κατά τη στιγμή της συγγραφής.
Για error handling, wrap calls σε try/except openai.RateLimitError και try/except openai.APIStatusError, με exponential backoff via tenacity:
from openai import OpenAI, RateLimitError, APIStatusError
from tenacity import retry, retry_if_exception_type, stop_after_attempt, wait_exponential
client = OpenAI()
@retry(
retry=retry_if_exception_type((RateLimitError, APIStatusError)),
wait=wait_exponential(multiplier=1, min=2, max=30),
stop=stop_after_attempt(5),
reraise=True,
)
def safe_create(prompt: str):
return client.responses.create(model="gpt-5", input=prompt)
print(safe_create("Hello").output_text)Χτυπήσαμε ένα transient 429 σε burst 20 parallel requests στο staging env μας, το tenacity με exponential backoff το έλυσε cleanly. Το error string που logged ήταν openai.RateLimitError: Error code: 429 - {'error': {'message': 'Rate limit reached for gpt-5 in organization org-... on requests per min (RPM)'}}. Διαβάστε το μία φορά και προχωρήστε· ο retry decorator χειρίζεται τα υπόλοιπα.
Σημείωση Azure variant: Το Azure OpenAI εκθέτει το Responses API αλλά lags τα rollouts controlled by Sam Altman κατά 4–8 εβδομάδες. Από τον Απρίλιο του 2026, η υποστήριξη MCP στο Azure είναι preview-only, επιβεβαιώστε against τα docs Azure OpenAI Responses API του Microsoft Learn πριν ship.
Συμβατότητα Gateway: αν proxynete την OpenAI μέσω LiteLLM proxy, η υποστήριξη Responses API landed το 2026. Τα περισσότερα άλλα gateways catch up. Και για production rollouts θα θέλετε AI observability and logging wired up πριν flip traffic, τα events του Responses API είναι richer από τα Chat Completions και θα θέλετε κάθε tool call logged.
Πότε ΝΑ ΜΗΝ Χρησιμοποιήσετε το Responses API
Παραλείψτε το Responses API για low-latency realtime audio (χρησιμοποιήστε το Realtime API), δημιουργία embeddings (χρησιμοποιήστε το Embeddings API) και workflows fine-tuning. Μείνετε στα Chat Completions αν το gateway/proxy σας δεν υποστηρίζει ακόμα το Responses (τα περισσότερα το κάνουν via LiteLLM από το 2026).
Λίγοι πιο honest disqualifiers:
- Realtime voice agents, το Realtime API χρησιμοποιεί WebSockets και είναι built για sub-second turn-taking. Το streaming του Responses API είναι HTTP SSE· θα φαίνεται sluggish για voice.
- Pure embeddings pipelines, το
client.embeddings.create()είναι φθηνότερο, γρηγορότερο και αυτό που κάθε integration vector DB expects. - Fine-tuning, train και deploy fine-tunes via το fine-tuning API· μπορείτε μετά να τα καλέσετε μέσω Responses, αλλά το training itself δεν είναι workflow Responses.
- Batch API jobs, αν processνε ένα εκατομμύριο prompts overnight με 50% off, το Batch API still wins on price.
- Locked-in Chat Completions semantics, αν το eval use, observability και prompt library σας all assume
chat.completions.choices[0].message.content, το migration cost είναι real. Μην migrate just because it's newer.
Αν το stack σας είναι happy στα Chat Completions και δεν χτίζετε agents, η μετάβαση δεν είναι free, το Q2 sprint σας may not need it. Newer doesn't mean better-for-you, το Responses API είναι το right primitive για agents, όχι για κάθε workload OpenAI.
Συχνές Ερωτήσεις
Τι είναι το OpenAI Responses API;
Το OpenAI Responses API είναι μια ενιαία βασική λειτουργία που κυκλοφόρησε τον Μάρτιο του 2025 και συνδυάζει την απλότητα των Chat Completions με τη χρήση εργαλείων του Assistants API. Υποστηρίζει είσοδο κειμένου και εικόνας, πέντε ενσωματωμένα εργαλεία, κλήση συναρτήσεων, δομημένες εξόδους, streaming και stateful συνομιλίες μέσω previous_response_id.
Πότε κυκλοφόρησε το OpenAI Responses API;
Η OpenAI announced το Responses API στις 11 Μαρτίου 2025 alongside την ευρύτερη ανακοίνωσή της "new tools for building agents". Το API has been generally available since launch, με το Conversations API, υποστήριξη MCP και εργαλείο image_generation added σε incremental updates throughout 2025 και early 2026.
Είναι το OpenAI Responses API stateful;
Ναι, optionally. Περάστε previous_response_id plus store: true και το μοντέλο carries context across calls without you sending the full history. Για longer-lived threads, το Conversations API σας δίνει explicit thread lifecycle management. Μπορείτε επίσης να stay stateless και να στείλετε full history every turn, like Chat Completions.
Ποια είναι η διαφορά μεταξύ του Responses API και των Chat Completions;
Το Responses API είναι ένα superset των Chat Completions. Κάθε λειτουργία των Chat Completions works in Responses, plus ενσωματωμένα εργαλεία (web_search, file_search, etc.), statefulness via previous_response_id και τον πρακτορικό βρόχο ως first-class concept. Η OpenAI recommends Responses for all new projects as of 2026.
Είναι deprecated το Chat Completions API;
Όχι. Από τον Απρίλιο του 2026, τα Chat Completions δεν είναι deprecated, παραμένουν fully supported. Η OpenAI recommends Responses for new projects και most agent-style tutorials assume Responses. Τα Chat Completions είναι now the legacy primitive: stable, but no longer where new features land first.
Ποια μοντέλα OpenAI υποστηρίζουν το Responses API;
GPT-5, gpt-5-mini, gpt-4.1 και τα o-series reasoning models all support the Responses API. Τα o-series add the reasoning_effort parameter (low, medium, high) for extended-thinking workloads. Image generation routes through gpt-image-1 under the hood when you enable the image_generation tool.
Πώς μεταβαίνω από τα Chat Completions στο Responses API;
Τρία βήματα: switch client.chat.completions.create() to client.responses.create(), replace the messages array with input (and move system prompts to instructions) και flatten your tool schemas (drop the nested function key). Το migration pack της OpenAI στο GitHub has full adapter examples.
Υποστηρίζει το Responses API streaming;
Ναι. Περάστε stream=True στο client.responses.create() (ή use client.responses.stream() as a context manager) και iterάρετε τα typed Server-Sent Events. Τα token-stream events που θα handle are response.output_text.delta for content και response.completed for the final payload. Async streaming works via AsyncOpenAI.
Μπορώ να χρησιμοποιήσω το Responses API στο Azure;
Ναι. Το Azure OpenAI εκθέτει το Responses API, αλλά feature parity lags OpenAI's direct rollouts by 4–8 weeks. Από τον Απρίλιο του 2026, η υποστήριξη MCP στο Azure is in preview. Check Microsoft Learn for the current Azure-specific quirks before you ship to production.
Λειτουργεί το Responses API με MCP servers;
Ναι, remote MCP (Model Context Protocol) servers are a first-class tool type. Add {"type": "mcp", "server_url": "...", "server_label": "..."} to your tools array και το μοντέλο discovers and calls the server's tool catalog like any built-in tool. Use require_approval: "always" in production for security.
Επίλογος
Τώρα έχετε την πλήρη εικόνα του Responses API: πώς διαφέρει από τα Chat Completions, πώς να ship την πρώτη σας κλήση, πώς να wire up ενσωματωμένα εργαλεία και πώς να migrate ένα existing Chat Completions project σε τρία βήματα. Λίγα takeaways to anchor on:
- Build first, then optimize. Ξεκινήστε με το παράδειγμα hello-world, add a built-in tool, then layer on state with
previous_response_id. - Migrate gradually. Use a feature flag, log both response shapes, flip 100% only after parity verification.
- Ship MCP integrations. Αυτό είναι το frontier του 2026, most vendors are racing to expose MCP endpoints και το Responses API is the cleanest way to consume them.
Στη Techsy, βοηθάμε teams να ship production-grade OpenAI integrations, including Responses API rollouts και Chat Completions migrations. Get a free consultation.
Από την editorial team της Techsy, production engineers shipping OpenAI integrations since 2024. Last updated: 25 Απριλίου 2026.