
OpenAI Responses API -opas: 14 toimivaa esimerkkiä Python-kehittäjille
Tämä on OpenAI Responses API -opas, jota todella tarvitset: 14 toimivaa Python-esimerkkiä, jotka kattavat sisäänrakennetut työkalut, striimauksen, funktiokutsut, MCP:n ja kolmivaiheisen migraation Chat Completionsista. Responses API julkaistiin 11. maaliskuuta 2025 OpenAI:n yhtenäistettynä peruskomponenttina agenttityyppisille sovelluksille, ja huhtikuuhun 2026 mennessä se on suositeltu lähtökohta kaikille uusille OpenAI-projekteille. Testasimme alla olevat esimerkit uusimmalla openai>=1.50 Python SDK:lla huhtikuussa 2026 – jokainen koodilohko toimii sellaisenaan.
Keskeiset huomiot
- Responses API (julkaistu 11.3.2025) yhdistää Chat Completionsin, Assistantsin ja sisäänrakennetut työkalut yhdeksi tilalliseksi peruskomponentiksi.
- Se tukee valmiina
web_search-,file_search-,code_interpreter-,computer_use- jaimage_generation-työkaluja sekä etä-MCP-palvelimia.- Migraatio Chat Completionsista vie kolme vaihetta: vaihda päätepiste, nimeä
messagesuudelleen muotooninputja päivitä työkaluskeemat.- Käytä
previous_response_id:tä (asetuksellastore: true) kevyeseen tilanhallintaan; Conversations API luotettaviin monivaiheisiin ketjuihin.
Mikä on OpenAI Responses API?
OpenAI Responses API on maaliskuussa 2025 julkaistu yhtenäinen peruskomponentti, joka yhdistää Chat Completionsin yksinkertaisuuden ja Assistants API:n työkalujen käytön. Se tukee teksti- ja kuvasyötettä, sisäänrakennettuja työkaluja (verkkohaku, tiedostohaku, kooditulkki, tietokoneen käyttö, kuvagenerointi), funktiokutsuja, strukturoituja tulosteita, striimausta ja tilallisia keskusteluja previous_response_id:n avulla.
Miksi OpenAI julkaisi kolmannen API:n, vaikka Chat Completions jo toimi? Koska agenttisilmukka – malli kutsuu työkalua, saa tuloksen, päättää seuraavan siirron – oli hankala rakentaa chat.completions-rajapinnan päälle. Lopputuloksena jouduit kuljettamaan työkalutuloksia edestakaisin messages-taulukoissa, jongleeraamaan säikeiden tunnuksia Assistants API:n kanssa tai rakentamaan oman tilanhallintasi. Responses API käsittelee tätä silmukkaa ensiluokkaisena konseptina.
Jos aloitat uuden OpenAI-projektin vuonna 2026, Responses API on oletusvalinta, kun taas Chat Completions on vanhentunut peruskomponentti, josta migrroidaan pois. Suuret poikkeukset: reaaliaikainen audio (käytä Realtime APIa) ja puhtaat upotukset (käytä Embeddings APIa). Kaikkeen muuhun – chatbotteihin, agentteihin, RAG-putkiin, strukturoidun datan erottajiin – Responses on se, mihin OpenAI:n dokumentaatio ja OpenAI:n julkistusviesti ohjaavat.
Jos orkestroit useita malleja tai haluat korkeamman tason runkorakenteen, yhdistät Responses APIn yleensä OpenAI Agents SDK:hon. Käsittelimme kompromisseja artikkelissamme OpenAI Agents SDK -vertailu. Lyhyesti: Responses on peruskomponentti, Agents SDK on kehys.
Miten Responses API eroaa Chat Completionsista?
Responses API on Chat Completionsin ylijoukko: kaikki Chat Completionsin ominaisuudet toimivat Responsesissa, plus sisäänrakennetut työkalut, tilallisuus ja agenttisilmukka. OpenAI suosittelee Responsesia kaikkiin uusiin projekteihin. Chat Completionsia tuetaan edelleen, mutta se ei ole enää oletusperuskomponentti agenteille.
Tässä vertailu, lähteenä OpenAI-alustan dokumentaatio:
| Ominaisuus | Responses API | Chat Completions | Assistants API |
|---|---|---|---|
| Syötteen muoto | input (merkkijono tai taulukko) | messages-taulukko | Säie + viestit |
| Tilallinen | Kyllä (previous_response_id) | Ei (lähetät historian) | Kyllä (säikeet) |
| Sisäänrakennetut työkalut | Kaikki 5 + MCP | Ei mitään | Kooditulkki, tiedostohaku |
| Striimaus | Kyllä (tyypitetyt SSE-tapahtumat) | Kyllä | Kyllä |
| Funktiokutsut | Kyllä (litteä tools-taulukko) | Kyllä (litteä tools-taulukko) | Kyllä (assistenttikohtainen) |
| Multimodaalinen syöte | Teksti + kuvat + tiedostot | Teksti + kuvat | Teksti + kuvat + tiedostot |
| Suositeltu | Agentit, uudet projektit | Yksinkertaiset valmistelut, legacy | Poistumassa (2026) |
| Tila (huhti 2026) | Oletus uusille projekteille | Legacy, edelleen tuettu | Aurinkolasku (poistumassa) |
Jokainen Chat Completionsin ominaisuus toimii Responsesissa; käänteisesti tämä ei pidä paikkaansa. Päätössääntö on lyhyt: jos tarvitset sisäänrakennettuja työkaluja, tilallisuutta tai aloitat alusta, käytä Responsesia. Jos sinulla on vakaa Chat Completions -putki, joka ei käytä työkaluja, ja yhdyskäytäväsi ei vielä tue Responsesia, migraatio ei ole kiireellinen, älä vain rakenna uusia agentteja vanhalle API:lle.
Asennus ja ensimmäinen Responses API -kutsu
Tehdäksesi ensimmäisen Responses API -kutsun, asenna OpenAI Python SDK versio 1.50 tai uudempi, aseta OPENAI_API_KEY-ympäristömuuttuja ja kutsu client.responses.create() parametreilla model ja input. Koko hello-world-esimerkki vie alle 60 sekuntia.
Vaihe 1 – Asenna SDK:
pip install --upgrade "openai>=1.50"Vaihe 2 – Aseta API-avaimesi:
export OPENAI_API_KEY="sk-proj-..."(Windows PowerShellissa: $env:OPENAI_API_KEY = "sk-proj-...". Älä koskaan commitoi tätä gitiin, käytä .env-tiedostoa ja python-dotenv-kirjastoa paikallisessa kehityksessä.)
Vaihe 3 – Hello-world-kutsu:
from openai import OpenAI
client = OpenAI()
response = client.responses.create(
model="gpt-5",
input="Say hello in exactly 5 words.",
)
print(response.output_text)Suorita tämä, ja saat takaisin viisisanaisen tervehdyksen. output_text-apulaisfunktio yhdistää jokaisen tekstipalan yhdeksi merkkijonoksi, mikä on kätevää, kun et välitä strukturoidusta tulosteesta.
Vaihe 4 – Tarkastele vastausobjektia:
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_tokensTuo response.output-taulukko on asia, joka kannattaa painaa mieleen. Se on luokiteltujen kohteiden lista: teksti, työkalukutsut, työkalutulokset, päättelytiivistelmät. Käytät sitä jatkuvasti, kun alat käyttää sisäänrakennettuja työkaluja.
Miten striimata vastauksia Responses APIlla?
Striimaus Responses APIlla käyttää Server-Sent Events -tekniikkaa. Välitä stream=True parametri client.responses.create()-kutsuun ja iteroidu syntyvän tapahtumavirran yli. Jokaisella tapahtumalla on type-kenttä, response.output_text.delta token-paloille ja response.completed lopulliselle hyötykuormalle. SDK 1.50+ paljastaa tyypitetyn tapahtumavirran.
Jos renderöit tokeneita käyttöliittymään, iteroidut response.output_text.delta-tapahtumien yli ja jätät kaiken muun huomiotta.
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}")Muutama sudenkuoppa, joihin törmäsimme testauksessa: stream-kontekstinhallinta hoitaa yhteyden puhdistuksen automaattisesti, joten älä sulje sitä manuaalisesti. Jos haluat asynkronisuuden, vaihda OpenAI() muotoon AsyncOpenAI() ja käytä async with sekä async for, samat tapahtumanimet, sama rakenne.
Sisäänrakennetut työkalut: Verkkohaku, tiedostohaku, kooditulkki, tietokoneen käyttö, kuvagenerointi
Responses API:ssa on viisi sisäänrakennettua työkalua: web_search live-internethakuun, file_search vektorivaraston hakuun, code_interpreter hiekkalaatikoidun Python-suorituksen mahdollistamiseen, computer_use selaimen/työpöydän automaatioon ja image_generation inline-kuvien luomiseen. Ota mikä tahansa niistä käyttöön lisäämällä {"type": "<tool_name>"} tools-taulukkoon.
Tässä on matriisi, jonka pidämme kiinnitettynä editorimme vieressä:
| Työkalu | Tarkoitus | Kustannus | Tilallinen | Mallit | Tuotantovalmis (huhti 2026) |
|---|---|---|---|---|---|
web_search | Live-internethaku | Lisämaksu per kutsu | Ei | gpt-5, gpt-4.1 | Kyllä |
file_search | Vektorivarasto RAG | Per kutsu + tallennus | Kyllä (vektorivarasto) | gpt-5, gpt-4.1, o-sarja | Kyllä |
code_interpreter | Hiekkalaatikoitu Python | Per istunto | Kyllä (kontti) | gpt-5, o-sarja | Kyllä |
computer_use | Selaimen/työpöydän ohjaus | Lisämaksu per kutsu | Per istunto | gpt-5 (esiversio) | Esiversio |
image_generation | Inline-kuvien luonti | Per kuva | Ei | gpt-5, gpt-image-1 | Kyllä |
Kun benchmarkkasimme web_search-työkalua putkessamme, latenssi lisäsi 1,5–3 s ensimmäiseen kutsuun, mutta toistuvat haut olivat välimuistissa, varaudu tähän käyttöliittymässä. OpenAI Cookbookin verkkohakuesimerkki on puhtain referenssi, jos haluat syventyä aiheeseen.
Verkkohaku
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}")Tiedostohaku
Tiedostohaku on kaksivaiheinen tanssi: luo vektorivarasto, lataa tiedostosi, viittaa sitten varaston tunnisteeseen tools-taulukossasi.
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)Kooditulkki
Tarvitseeko mallin suorittavan Python-koodia CSV-tiedostolle ja piirtävän kaavion? code_interpreter tekee tämän hiekkalaatikoidussa kontissa.
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)Kontti säilyy kutsujen välillä samassa istunnossa, mikä on hyödyllistä, kun haluat mallin iterointia dataframen parissa.
Tietokoneen käyttö
Edelleen esiversiossa huhtikuussa 2026. Malli saa virtuaalisen selaimen/työpöydän ja klikkailee tehtävien suorittamiseksi. Ohita tämä, ellei sinulla ole erityistä selaimen automaatiotarvetta, jota Playwright/Selenium-ympäristö ei jo pystyisi ratkaisemaan.
Kuvagenerointi
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)Funktiokutsut mukautetuilla työkaluilla
Funktio kutsut Responses APIssa antavat mallille mahdollisuuden kutsua omia Python-funktioitasi. Määrittele kukin funktio JSON-skeemana tools-taulukossa, suorita kutsu, tarkista response.output löytääksesi function_call-kohteet, suorita funktio ja palauta tulos takaisin function_call_output:n kautta.
Responses API muuttaa funktiokutsut nelivaiheisesta tanssista yhdeksi kierrokseksi, kun annat agenttisilmukan hoitaa sen puolestasi. Tässä on täydellinen valuutanmuunnesimerkki:
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)Tuo on koko silmukka. Jos patterni on uusi, artikkelimme funktiokutsujen perusteet käy läpi konseptuaalisen mallin, ja ylläpidämme kokoelmaa funktiokutsukirjastoista, jos et halua kirjoittaa skeemoja käsin. tool_choice-parametri (asetettu arvoon "auto", "required" tai tietty työkalun nimi) on vivunsi, jolla pakotat tai kiellät työkalukutsun, kun tarvitset determinismiä.
Strukturoidut tulosteet (JSON Schema ja Pydantic)
Strukturoidut tulosteet takaavat, että malli palauttaa skeemaasi sopivan JSONin. Välitä response_format={"type": "json_schema", "json_schema": {...}}-parametri tai, Python SDK:lla, anna sille Pydantic-malli suoraan client.responses.parse()-kutsun kautta. Mallia rajoitetaan dekoodausvaiheessa, ei vain promptauksessa.
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-polku on se, jota haluat 95 % ajasta: tyyppiturvallinen, vähemmän boilerplate-koodia ja IDE täydentää tuloksen automaattisesti. Käytä raakaa JSON-skeemaa vain, kun tarvitset kielirajat ylittävää skeeman jakamista tai kun skeema generoidaan dynaamisesti. Sukellamme kompromisseihin oppaassamme strukturoidut tulosteet ja JSON-skeema ja primerissämme Pydantic tyyppiturvallisiin skeemoihin.
Tilanhallinta: previous_response_id, Conversations API ja store=true
Käytä previous_response_id:tä kevyeseen monivaiheiseen kontekstiin, Conversations APIa luotettaviin säikeellisiin istuntoihin tai lähetä koko viestihistoria täydelliseen client-side-hallintaan. previous_response_id vaatii store: true -asetuksen ja persistoi vain välimuistitettuja vastauksia; palaa koko historiaan, jos tunniste ei ole ratkaistavissa.
| Lähestymistapa | Käytä, kun | Persistenssi | Koodin kompleksisuus |
|---|---|---|---|
previous_response_id | Nopeat chatbotit, lyhyet ketjut | 30 päivää (oletus), store: true vaaditaan | Alhaisin |
| Conversations API | Pitkäikäiset ketjut, monikäyttäjäsovellukset | Persistentti, hallitset puhdistusta | Keskitaso |
| Lähetä koko historia | Täysi client-side-hallinta, audit-lokit | Omistat sen itse | Korkein |
Tässä on kahden vuoron esimerkki käyttäen previous_response_id:tä:
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..."Jos unohdat store: true -asetuksen, previous_response_id ei resolveeroidu mihinkään ja malli aloittaa kylmänä joka vuorolla. Olemme tuhlanneet tunnin debugatessamme tätä; API ei heitä virhettä, se vain hiljaa menettää muistinsa. Oletusretentio on 30 päivää; jos tarvitset pidempää, siirry Conversations APIin, joka antaa sinulle eksplisiittisen säikeen elinkaaren hallinnan.
Milloin kannattaa päivittää Conversations APIin? Kun sinulla on useita käyttäjiä yhdessä sovelluksessa, kun ketjut elävät yhden istunnon yli tai kun haluat server-side-viestien muokkausta/haarautumista. Nopeaan chatbottiin previous_response_id riittää hyvin.
Miten migrroida Chat Completionsista Responses APIin
Migraatio Chat Completionsista Responses APIin vie kolme vaihetta: vaihda /v1/chat/completions muotoon /v1/responses, korvaa messages parametrilla input ja korvaa tools-skeemat uudella formaatilla. Funktiokutsut ja multimodaaliset syötteet vaativat hieman erilaista käsittelyä. OpenAI tarjoaa virallisen migraatiopaketin GitHubissa.
Vaihe 1 – Päätepisteen vaihto:
# 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_textVaihe 2 – Nimeä messages uudelleen muotoon 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.",
)Vaihe 3 – Päivitä työkaluskeemat:
# 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"}}},
}]Siinä kaikki. Siirrä liikenne vähitellen feature flagilla, pidä Chat Completions -koodipolkusi live-tilassa saman rajapinnan takana viikon tai kaksi, logita molemmat vastausmuodot rinnakkain ja vaihda 100 %:sti vasta, kun olet varmistanut pariteetin. Migraatiopaketti openai-cookbook-repossa sisältää laajemman adapteripatternin, jos tarvitset referenssiä.
Miten käyttää MCP:tä ja etä-MCP-palvelimia Responses APIssa
Responses API tukee etä-MCP (Model Context Protocol) -palvelimia työkalutyyppeinä. Lisää merkintä kuten {"type": "mcp", "server_url": "https://mcp.example.com", "server_label": "..."} tools-taulukkoon. Malli löytää MCP-palvelimen työkaluluettelon ja kutsuu niitä kuin sisäänrakennettuja työkaluja.
Jos et ole koskaan käyttänyt MCP:tä, tässä 30 sekunnin pitch: se on avoin protokolla, joka antaa mille tahansa palvelulle mahdollisuuden paljastaa API:nsa työkaluluettelona, jota malli voi kutsua. Shopify, Stripe, GitHub ja kasvava joukko muita toimittajia ylläpitävät julkisia MCP-päätepisteitä. Syvällinen artikkelimme Model Context Protocol (MCP) kattaa protokollan itsensä.
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)Kohtele MCP-palvelimia kuin mitä tahansa kolmannen osapuolen APIa. require_approval: "never" on ok prototyypeille; tuotannossa haluat "always" (tai työkalujen allowlistin), jotta kompromisoitunut MCP-palvelin ei voi hiljaa vuotaa dataa. Auditoi palvelimen työkaluluettelo ennen kuin osoitat agenttisi siihen.
Hinnoittelu, nopeusrajoitukset ja tuotannon sudenkuopat
Responses API:n hinnoittelu vastaa Chat Completionsia token-kustannuksissa (prompt + valmistelu), lisäksi sisäänrakennetuista työkaluista (web_search, file_search) peritään lisämaksuja per kutsu. Nopeusrajoitukset seuraavat olemassa olevaa OpenAI-tasoasi. Yleisiä tuotannon sudenkuoppia ovat store: true -retention oletusarvot, transientit 429-virheet burst-liikenteessä ja Azure-variaatin ominaisuuksien viive.
| Malliperhe | Responses API | Sisäänrakennetut työkalut | Päättelyvaiva | Striimaus | Kustannustaso |
|---|---|---|---|---|---|
| gpt-5 | Kyllä | Kaikki 5 + MCP | N/A | Kyllä | Katso OpenAI hinnoittelu |
| gpt-5-mini | Kyllä | Kaikki 5 + MCP | N/A | Kyllä | Alhaisempi kuin gpt-5 |
| gpt-4.1 | Kyllä | web/file/code/image | N/A | Kyllä | Keskitaso |
| o-sarja (päättely) | Kyllä | file/code | low/medium/high | Kyllä | Korkein per token |
| gpt-image-1 | Vain image-gen-työkalu | , | , | Ei | Per kuva |
Hinnoittelu muuttuu, tarkista aina OpenAI:n hinnoittelusivulta ajankohtainen tilanne.
Virheenkäsittelyyn kietoa kutsut try/except openai.RateLimitError ja try/except openai.APIStatusError -lohkoihin, eksponentiaalisella backoffilla tenacity-kirjaston avulla:
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)Saimme transientin 429-virheen 20 rinnakkaisen pyynnön burstista staging-ympäristössämme, tenacity eksponentiaalisella backoffilla korjasi sen siististi. Loggaamamme virhemerkkijono oli openai.RateLimitError: Error code: 429 - {'error': {'message': 'Rate limit reached for gpt-5 in organization org-... on requests per min (RPM)'}}. Lue se kerran ja jatka; retry-dekoratori hoitaa loput.
Azure-variaantin huomio: Azure OpenAI paljastaa Responses APIn, mutta jää Sam Altmanin kontrolloimista julkaisuista 4–8 viikkoa jäljessä. Huhtikuussa 2026 MCP-tuki Azuressa on vain esiversiossa, vahvista Microsoft Learnin Azure OpenAI Responses API -dokumentaatiosta ennen julkaisua.
Yhdyskäytävän yhteensopivuus: jos proxytat OpenAI:n LiteLLM-proxyn kautta, Responses API -tuki saapui vuonna 2026. Useimmat muut yhdyskäytävät ovat kuromassa umpeen kuilua. Ja tuotantojulkaisuihin haluat AI-observoitavuuden ja logituksen kytkettynä ennen liikenteen kääntämistä, Responses API:n tapahtumat ovat rikkaampia kuin Chat Completionsin, ja haluat jokaisen työkalukutsun logatuksi.
Milloin EI kannata käyttää Responses APIa
Ohita Responses API matalan latenssin reaaliaikaisessa audiossa (käytä Realtime APIa), upotusten generoinnissa (käytä Embeddings APIa) ja hienosäätötyönkulussa. Pysy Chat Completionsissa, jos yhdyskäytäväsi/proxysi ei vielä tue Responsesia (useimmat tukevat LiteLLM:n kautta vuodesta 2026 alkaen).
Muutama rehellinen hylkäysperuste:
- Reaaliaikaiset ääniagentit, Realtime API käyttää WebSocketsia ja on rakennettu alle sekunnin vuorotteluun. Responses API:n striimaus on HTTP SSE:tä; se tuntuu hitaalta äänelle.
- Puhtaat upotusputket,
client.embeddings.create()on halvempi, nopeampi ja se, mitä jokainen vektoritietokantaintegraatio odottaa. - Hienosäätö, koulutat ja julkaiset hienosäädöt fine-tuning API:n kautta; voit sitten kutsua niitä Responsesin kautta, mutta itse koulutus ei ole Responses-työnkulku.
- Batch API -työt, jos prosessoit miljoona promptia yön yli 50 % alennuksella, Batch API voittaa edelleen hinnassa.
- Lukittuneet Chat Completions -semantiikat, jos eval-käyttösi, observoitavuutesi ja prompt-kirjastosi olettavat kaikki
chat.completions.choices[0].message.content:n, migraatiokustannus on todellinen. Älä migrroi vain siksi, että se on uudempi.
Jos stackisi on tyytyväinen Chat Completionsiin etkä rakenna agentteja, migraatio ei ole ilmaista, Q2-sprinttisi ei ehkä tarvitse sitä. Uudempi ei tarkoita parempaa sinulle, Responses API on oikea peruskomponentti agenteille, ei jokaiseen OpenAI-työkuormaan.
Usein kysytyt kysymykset
Mikä on OpenAI Responses API?
OpenAI Responses API on maaliskuussa 2025 julkaistu yhtenäinen peruskomponentti, joka yhdistää Chat Completionsin yksinkertaisuuden ja Assistants API:n työkalujen käytön. Se tukee teksti- ja kuvasyötettä, viittä sisäänrakennettua työkalua, funktiokutsuja, strukturoituja tulosteita, striimausta ja tilallisia keskusteluja previous_response_id:n avulla.
Milloin OpenAI Responses API julkaistiin?
OpenAI ilmoitti Responses APIsta 11. maaliskuuta 2025 osana laajempaa "uudet työkalut agenttien rakentamiseen" -julkistusta. API on ollut yleisesti saatavilla julkaisusta lähtien, ja Conversations API, MCP-tuki sekä image_generation-työkalu lisättiin inkrementaalisissa päivityksissä vuoden 2025 ja alkuvuoden 2026 aikana.
Onko OpenAI Responses API tilallinen?
Kyllä, valinnaisesti. Välitä previous_response_id plus store: true, ja malli kantaa kontekstin kutsujen yli ilman, että lähetät koko historian. Pitkäikäisempiä ketjuja varten Conversations API antaa sinulle eksplisiittisen säikeen elinkaaren hallinnan. Voit myös pysyä tilattomana ja lähettää koko historian joka vuorolla, kuten Chat Completionsissa.
Mikä on ero Responses APIn ja Chat Completionsin välillä?
Responses API on Chat Completionsin ylijoukko. Jokainen Chat Completionsin ominaisuus toimii Responsesissa, plus sisäänrakennetut työkalut (web_search, file_search jne.), tilallisuus previous_response_id:n kautta ja agenttisilmukka ensiluokkaisena konseptina. OpenAI suosittelee Responsesia kaikkiin uusiin projekteihin vuodesta 2026 alkaen.
Onko Chat Completions API poistumassa käytöstä?
Ei. Huhtikuussa 2026 Chat Completionsia ei ole deprecated, sitä tuetaan edelleen täysin. OpenAI suosittelee Responsesia uusiin projekteihin, ja useimmat agenttityyppiset opetusohjelmat olettavat Responsesin. Chat Completions on nyt legacy-peruskomponentti: vakaa, mutta ei enää se, johon uudet ominaisuudet saapuvat ensimmäisenä.
Mitkä OpenAI-mallit tukevat Responses APIa?
GPT-5, gpt-5-mini, gpt-4.1 ja o-sarjan päättelymallit tukevat kaikki Responses APIa. O-sarja lisää reasoning_effort-parametrin (low, medium, high) laajennettuihin päättelytyökuormiin. Kuvagenerointi reititetään taustalla gpt-image-1:n kautta, kun otat image_generation-työkalun käyttöön.
Miten migrroida Chat Completionsista Responses APIin?
Kolme vaihetta: vaihda client.chat.completions.create() muotoon client.responses.create(), korvaa messages-taulukko parametrilla input (ja siirrä system-promptit instructions-kenttään) ja litistä työkaluskeemasi (poista sisäkkäinen function-avain). OpenAI:n migraatiopaketti GitHubissa sisältää täydelliset adapteriesimerkit.
Tukeeko Responses API striimausta?
Kyllä. Välitä stream=True parametri client.responses.create()-kutsuun (tai käytä client.responses.stream() kontekstinhallintana) ja iteroidu tyypitetyistä Server-Sent Events -tapahtumista. Token-virtatapahtumat, joita käsittelet, ovat response.output_text.delta sisällölle ja response.completed lopulliselle hyötykuormalle. Asynkroninen striimaus toimii AsyncOpenAI:n kautta.
Voinko käyttää Responses APIa Azuressa?
Kyllä. Azure OpenAI paljastaa Responses APIn, mutta ominaisuuksien pariteetti jää OpenAI:n suorista julkaisuista 4–8 viikkoa jäljessä. Huhtikuussa 2026 MCP-tuki Azuressa on esiversiossa. Tarkista Microsoft Learn ajankohtaiset Azure-kohtaiset erikoisuudet ennen tuotantoon julkaisua.
Toimiiiko Responses API MCP-palvelimien kanssa?
Kyllä, etä-MCP (Model Context Protocol) -palvelimet ovat ensiluokkainen työkalutyyppi. Lisää {"type": "mcp", "server_url": "...", "server_label": "..."} tools-taulukkoon, ja malli löytää ja kutsuu palvelimen työkaluluettelon kuin mitä tahansa sisäänrakennettua työkalua. Käytä require_approval: "always" tuotannossa turvallisuuden vuoksi.
Yhteenveto
Sinulla on nyt kokonaiskuva Responses APIsta: miten se eroaa Chat Completionsista, miten julkaiset ensimmäisen kutsusi, miten kytket sisäänrakennetut työkalut ja miten migrroit olemassa olevan Chat Completions -projektin kolmessa vaiheessa. Muutama ankkuroiva takeaway:
- Rakenna ensin, optimoi sitten. Aloita hello-world-esimerkillä, lisää sisäänrakennettu työkalu, kerrosta sitten tila
previous_response_id:llä. - Migrroi vähitellen. Käytä feature flagia, logita molemmat vastausmuodot, käännä 100 %:sti vasta pariteetin varmistamisen jälkeen.
- Julkaise MCP-integraatiot. Tämä on vuoden 2026 rajapinta, useimmat toimittajat kilpailevat MCP-päätepisteiden paljastamisessa, ja Responses API on puhtain tapa kuluttaa niitä.
Techsyllä autamme tiimejä julkaisemaan tuotantotason OpenAI-integraatioita, mukaan lukien Responses API -julkaisut ja Chat Completions -migraatiot. Pyydä ilmainen konsultointi.
Techsyn toimituskunta, tuotantoinsinöörit, jotka ovat julkaisseet OpenAI-integraatioita vuodesta 2024. Päivitetty viimeksi: 25. huhtikuuta 2026.