
Посібник з OpenAI Responses API: 14 робочих прикладів для Python-розробників
Саме той посібник з OpenAI Responses API, який вам потрібен: 14 робочих прикладів на Python, що охоплюють вбудовані інструменти, потокову передачу даних, виклик функцій, MCP та міграцію з Chat Completions у 3 кроки. Responses API було запущено 11 березня 2025 року як єдиний примітив OpenAI для агентних застосунків, і станом на квітень 2026 року це рекомендована стартова точка для кожного нового проекту OpenAI. Ми протестували кожен наведений нижче приклад проти останньої версії Python SDK openai>=1.50 у квітні 2026 року — кожен блок коду працює «як є».
Ключові висновки
- Responses API (запущено 11 березня 2025 року) об’єднує Chat Completions, Assistants та вбудовані інструменти в один станний примітив.
- Він підтримує
web_search,file_search,code_interpreter,computer_use,image_generationта віддалені сервери MCP «з коробки».- Міграція з Chat Completions займає 3 кроки: змініть ендпоінт, перейменуйте
messages→input, оновіть схеми інструментів.- Використовуйте
previous_response_id(разом ізstore: true) для легкого керування станом; Conversations API — для надійних багатокрокових діалогів.
Що таке OpenAI Responses API?
OpenAI Responses API — це єдиний примітив, запущений у березні 2025 року, який поєднує простоту Chat Completions із можливістю використання інструментів через Assistants API. Він підтримує текстові та зображення на вході, вбудовані інструменти (вебпошук, пошук файлів, інтерпретатор коду, комп’ютерне керування, генерація зображень), виклик функцій, структуровані виводи, потокову передачу та станні розмови через previous_response_id.
То чому OpenAI випустив третій API, якщо Chat Completions вже працював? Тому що агентний цикл, коли модель викликає інструмент, отримує результат і вирішує наступний крок, було незручно будувати поверх chat.completions. Ви опинялися в ситуації, коли доводилося пересилати результати роботи інструментів туди-сюди в масивах messages, плутатися з ID потоків у Assistants API або створювати власне управління станом. Responses API розглядає цей цикл як концепцію першого класу.
Якщо ви починаєте новий проект OpenAI у 2026 році, Responses API є стандартом, а Chat Completions — застарілим примітивом, від якого варто мігрувати. Великі винятки: аудіо в реальному часі (використовуйте Realtime API) та чисті ембеддинги (використовуйте Embeddings API). Для всього іншого — чат-ботів, агентів, RAG-пайплайнів, екстракторів структурованих даних — Responses є тим, на що посилаються документація OpenAI та публікація про анонс OpenAI.
Якщо ви оркеструєте кілька моделей або хочете шар абстракції вищого рівня, ви зазвичай поєднуєте Responses API з OpenAI Agents SDK. Ми розглянули компроміси у нашому порівнянні OpenAI Agents SDK, коротко кажучи: Responses — це примітив, Agents SDK — це фреймворк.
Чим Responses API відрізняється від Chat Completions?
Responses API є надмножиною Chat Completions: кожна функція Chat Completions працює в Responses, плюс додаються вбудовані інструменти, станність та агентний цикл. OpenAI рекомендує Responses для всіх нових проектів. Chat Completions залишається підтримуваним, але більше не є примітивом за замовчуванням для агентів.
Ось порівняння сторона в сторону, взяте з документації платформи OpenAI:
| Функція | Responses API | Chat Completions | Assistants API |
|---|---|---|---|
| Форма вводу | input (рядок або масив) | Масив messages | Потік + повідомлення |
| Станність | Так (previous_response_id) | Ні (ви надсилаєте історію) | Так (потоки) |
| Вбудовані інструменти | Усі 5 + MCP | Немає | Code Interpreter, File Search |
| Потокова передача | Так (типізовані події SSE) | Так | Так |
| Виклик функцій | Так (плоский масив tools) | Так (плоский масив tools) | Так (для кожного асистента) |
| Мультимодальний ввід | Текст + зображення + файли | Текст + зображення | Текст + зображення + файли |
| Рекомендовано для | Агентів, нових проектів | Простих завершень, застарілих систем | Застаріває (2026) |
| Статус (квітень 2026) | Стандарт для нових проектів | Застарілий, але підтримується | Припиняє підтримку |
Кожна функція Chat Completions працює в Responses; зворотне не є правдою. Правило прийняття рішення коротке: якщо вам потрібні вбудовані інструменти, станність або ви починаєте з нуля, використовуйте Responses. Якщо у вас є стабільний пайплайн Chat Completions, який не використовує інструменти, і ваш шлюз ще не підтримує Responses, міграція не є терміновою, просто не будуйте нових агентів на старому 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:
export OPENAI_API_KEY="sk-proj-..."(У Windows PowerShell: $env:OPENAI_API_KEY = "sk-proj-...". Ніколи не комітьте це в git, використовуйте файл .env разом із python-dotenv для локальної розробки.)
Крок 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 слів. Допоміжна функція output_text об’єднує кожен текстовий фрагмент в один рядок, що зручно, коли вас не хвилює структурований вивід.
Крок 4 — Перевірка об’єкта відповіді:
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 — те, що варто запам’ятати. Це список типізованих елементів: текст, виклики інструментів, результати інструментів, резюме міркувань. Ви будете постійно перебирати його, коли почнете використовувати вбудовані інструменти.
Як потоково передавати відповіді за допомогою Responses API?
Потокова передача з Responses API використовує Server-Sent Events. Передайте stream=True у client.responses.create() та ітеруйте отриманий потік подій. Кожна подія має поле type, response.output_text.delta для фрагментів токенів та response.completed для фінального payload. SDK 1.50+ надає типізований потік подій.
Якщо ви відображаєте токени в UI, ви будете ітерувати події 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}")Кілька підводних каменів, з якими ми зіткнулися під час тестування: менеджер контексту потоку автоматично обробляє очищення з’єднання, тому не закривайте його вручну. Якщо вам потрібна асинхронність, замініть OpenAI() на AsyncOpenAI() та використовуйте async with разом із async for, назви подій та їх структура залишаться тими самими.
Вбудовані інструменти: Web Search, File Search, Code Interpreter, Computer Use, Image Generation
Responses API постачається з п’ятьма вбудованими інструментами: web_search для пошуку в інтернеті в реальному часі, file_search для отримання даних із векторного сховища, code_interpreter для виконання Python у пісочниці, computer_use для автоматизації браузера/робочого столу та image_generation для створення зображень inline. Увімкніть будь-який із них, додавши {"type": "<tool_name>"} до масиву tools.
Ось матриця, яку ми тримаємо під рукою біля редактора:
| Інструмент | Призначення | Вартість | Станність | Моделі | Готовність до продакшену (квітень 2026) |
|---|---|---|---|---|---|
web_search | Пошук в інтернеті в реальному часі | Додаткова плата за виклик | Ні | gpt-5, gpt-4.1 | Так |
file_search | RAG через векторне сховище | За виклик + зберігання | Так (векторне сховище) | gpt-5, gpt-4.1, o-series | Так |
code_interpreter | Python у пісочниці | За сесію | Так (контейнер) | gpt-5, o-series | Так |
computer_use | Керування браузером/робочим столом | Додаткова плата за виклик | За сесію | gpt-5 (прев’ю) | Прев’ю |
image_generation | Створення зображень inline | За зображення | Ні | gpt-5, gpt-image-1 | Так |
Коли ми тестували web_search у нашому пайплайні, затримка додавала 1,5–3 с при першому виклику, але кешувалася для повторних, враховуйте це в UI. Приклад вебпошуку з 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
Пошук файлів — це танець у два кроки: створіть векторне сховище, завантажте свої файли, а потім пошліться на 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 і побудувала графік? code_interpreter робить це в контейнері-пісочниці.
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)Контейнер зберігається між викликами в межах однієї сесії, що корисно, коли ви хочете, щоб модель продовжувала ітерації над dataframe.
Computer Use
Станом на квітень 2026 року все ще в прев’ю. Модель отримує віртуальний браузер/робочий стіл і клікає навколо, щоб виконати завдання. Пропустіть це, якщо у вас немає специфічного випадку використання автоматизації браузера, який світ 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)Виклик функцій із власними інструментами
Виклик функцій у Responses API дозволяє моделі викликати ваші власні функції Python. Визначте кожну функцію як JSON-схему в масиві tools, виконайте виклик, перевірте response.output на наявність елементів function_call, виконайте функцію та передайте результат назад через function_call_output.
Responses API перетворює виклик функцій із танцю в 4 кроки на один круговий обмін, якщо ви дозволяєте агентному циклу обробляти це за вас. Ось повний приклад конвертації валюти:
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)Це повний цикл. Якщо ви новачок у цьому патерні, наша стаття основи виклику функцій пояснює концептуальну модель, а ми підтримуємо огляд бібліотек для виклику функцій, якщо ви не хочете писати схеми вручну. Параметр tool_choice (встановлений у "auto", "required" або конкретну назву інструменту) є вашим важелем для примусового виклику або заборони виклику інструменту, коли вам потрібна детермінованість.
Структуровані виводи (JSON Schema та Pydantic)
Структуровані виводи гарантують, що модель поверне JSON, що відповідає вашій схемі. Передайте параметр response_format={"type": "json_schema", "json_schema": {...}} або, використовуючи Python SDK, передайте їй модель Pydantic безпосередньо через client.responses.parse(). Модель обмежується на етапі декодування, а не лише через промпт.
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% випадків: типобезпека, менше шаблонного коду, а ваше IDE автодоповнює результат. Використовуйте сиру JSON-схему лише тоді, коли вам потрібен обмін схемами між мовами або коли схема генерується динамічно. Ми детально розбираємо компроміси в нашому посібнику структуровані виводи та JSON schema та нашому вводному курсі Pydantic для типобезпечних схем.
Керування станом: previous_response_id, Conversations API та store=true
Використовуйте previous_response_id для легкого багатокрокового контексту, Conversations API для надійних сеансів із потоками або надсилайте повну історію повідомлень для повного контролю на стороні клієнта. previous_response_id вимагає store: true і зберігається лише для кешованих відповідей; повертайтеся до повної історії, якщо ID неможливо визначити.
| Підхід | Коли використовувати | Збереження | Складність коду |
|---|---|---|---|
previous_response_id | Швидкі чат-боти, короткі потоки | 30 днів (за замовчуванням), потрібно store: true | Найнижча |
| Conversations API | Довготривалі потоки, багатокористувацькі додатки | Постійне, ви керуєте очищенням | Середня |
| Надсилання повної історії | Повний контроль на стороні клієнта, аудит | Ви володієте цим | Найвища |
Ось приклад із двома кроками, використовуючи 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 ні до чого не призведе, і модель щоразу починатиме «з холодного старта». Ми витратили годину на налагодження цього, API не видає помилку, він просто тихо «забуває» вас. Термін зберігання за замовчуванням — 30 днів; якщо вам потрібно більше, перейдіть на Conversations API, який дає вам явний контроль життєвого циклу потоків.
Коли варто переходити на Conversations API? Коли у вас є кілька користувачів в одному додатку, коли потоки живуть довше за одну сесію або коли ви хочете редагування/розгалуження повідомлень на стороні сервера. Для швидкого чат-бота previous_response_id цілком достатньо.
Як мігрувати з Chat Completions на Responses API
Міграція з Chat Completions на Responses API займає три кроки: змініть /v1/chat/completions на /v1/responses, замініть messages на input та замініть схеми tools на новий формат. Виклик функцій та мультимодальні вводи потребують дещо іншого підходу. OpenAI надає офіційний пакет міграції на GitHub.
Крок 1 — Зміна ендпоінту:
# 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 — Оновлення схем інструментів:
# 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"}}},
}]Це все. Перенаправляйте трафік поступово за допомогою feature flag, тримайте код Chat Completions активним за тим самим інтерфейсом тиждень-два, логуйте обидві форми відповідей поруч і перемикайтеся на 100% лише після перевірки паритету. Пакет міграції в репозиторії openai-cookbook містить більш повний патерн адаптера, якщо вам потрібен довідник.
Як використовувати MCP та віддалені сервери MCP з Responses API
Responses API підтримує віддалені сервери MCP (Model Context Protocol) як тип інструменту. Додайте запис типу {"type": "mcp", "server_url": "https://mcp.example.com", "server_label": "..."} до масиву tools. Модель виявляє каталог інструментів сервера MCP і викликає їх так само, як вбудовані інструменти.
Якщо ви ніколи не працювали з MCP, ось 30-секундна презентація: це відкритий протокол, який дозволяє будь-якому сервісу надавати свій API як каталог інструментів, які може викликати модель. Shopify, Stripe, GitHub та зростаючий список вендорів запускають публічні кінцеві точки MCP. Наш глибокий аналіз Model Context Protocol (MCP) охоплює сам протокол.
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 як до будь-якого стороннього API. require_approval: "never" підходить для прототипів; у продакшені вам потрібно "always" (або whitelist інструментів), щоб компрометований сервер MCP не міг тихо викрадати дані. Аудитуйте каталог інструментів сервера перед тим, як направляти туди свого агента.
Ціноутворення, ліміти швидкості та підводні камені продакшену
Ціноутворення Responses API збігається з Chat Completions за вартістю токенів (prompt + completion), із додатковою платою за виклик для вбудованих інструментів (web_search, file_search). Ліміти швидкості відповідають вашому поточному тарифному плану OpenAI. Поширені проблеми продакшену включають налаштування збереження store: true за замовчуванням, тимчасові помилки 429 при сплесках трафіку та затримки функцій у варіанті Azure.
| Сімейство моделей | Responses API | Вбудовані інструменти | Зусилля на міркування | Потокова передача | Рівень вартості |
|---|---|---|---|---|---|
| gpt-5 | Так | Усі 5 + MCP | Н/Д | Так | Див. ціни OpenAI |
| gpt-5-mini | Так | Усі 5 + MCP | Н/Д | Так | Нижче ніж gpt-5 |
| gpt-4.1 | Так | web/file/code/image | Н/Д | Так | Середній |
| o-series (міркування) | Так | file/code | low/medium/high | Так | Найвищий за токен |
| gpt-image-1 | Лише інструмент генерації зображень | , | , | Ні | За зображення |
Ціни змінюються, завжди перевіряйте актуальність на сторінці цін OpenAI на момент написання.
Для обробки помилок обертайте виклики в try/except openai.RateLimitError та try/except openai.APIStatusError з експоненційною затримкою через 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)Ми зіткнулися з тимчасовою помилкою 429 при сплеску з 20 паралельних запитів у нашому staging-середовищі, tenacity з експоненційною затримкою чисто виправила це. Рядок помилки, який ми залогували, був openai.RateLimitError: Error code: 429 - {'error': {'message': 'Rate limit reached for gpt-5 in organization org-... on requests per min (RPM)'}}. Прочитайте один раз і рухайтесь далі; декоратор повторних спроб обробляє решту.
Примітка щодо варіанту Azure: Azure OpenAI надає доступ до Responses API, але відстає від релізів, контрольованих Семом Альтманом, на 4–8 тижнів. Станом на квітень 2026 року підтримка MCP в Azure доступна лише в прев’ю, перевірте це за документацією Microsoft Learn щодо Azure OpenAI Responses API перед релізом.
Сумісність зі шлюзами: якщо ви проксуєте OpenAI через LiteLLM proxy, підтримка Responses API з’явилася у 2026 році. Більшість інших шлюзів наздоганяють. І для продакшен-релізів вам варто налаштувати спостережуваність та логування AI перед перемиканням трафіку, події Responses API багатші, ніж Chat Completions, і ви захочете логувати кожен виклик інструменту.
Коли НЕ варто використовувати Responses API
Уникайте Responses API для аудіо в реальному часі з низькою затримкою (використовуйте Realtime API), генерації ембеддингів (використовуйте Embeddings API) та workflow fine-tuning. Залишайтеся на Chat Completions, якщо ваш шлюз/проксі ще не підтримує Responses (більшість підтримує через LiteLLM станом на 2026 рік).
Ще кілька чесних причин відмовитися:
- Голосові агенти реального часу, Realtime API використовує WebSockets і створений для обміну репліками менше ніж за секунду. Потокова передача Responses API — це HTTP SSE; для голосу це буде відчуватися повільно.
- Чисті пайплайни ембеддингів,
client.embeddings.create()дешевший, швидший і саме те, що очікують інтеграції з векторними базами даних. - Fine-tuning, ви тренуєте та розгортаєте доопрацьовані моделі через API fine-tuning; ви можете потім викликати їх через Responses, але саме тренування не є workflow Responses.
- Завдання Batch API, якщо ви обробляєте мільйон промптів за ніч зі знижкою 50%, Batch API все ще виграє за ціною.
- Жорстка прив’язка до семантики Chat Completions, якщо ваше використання eval, спостережуваність та бібліотека промптів усі припускають
chat.completions.choices[0].message.content, вартість міграції є реальною. Не мігруйте тільки тому, що це новіше.
Якщо ваш стек задоволений Chat Completions і ви не будуєте агентів, міграція не є безкоштовною, ваш спринт у другому кварталі може не потребувати цього. Новіше не означає краще для вас, Responses API — це правильний примітив для агентів, а не для кожного workload OpenAI.
Часті запитання
Що таке OpenAI Responses API?
OpenAI Responses API — це єдиний примітив, запущений у березні 2025 року, який поєднує простоту Chat Completions із можливістю використання інструментів через Assistants API. Він підтримує текстові та зображення на вході, п’ять вбудованих інструментів, виклик функцій, структуровані виводи, потокову передачу та станні розмови через previous_response_id.
Коли було випущено OpenAI Responses API?
OpenAI анонсувало Responses API 11 березня 2025 року разом із ширшим анонсом «нових інструментів для створення агентів». API було загальнодоступним з моменту запуску, а Conversations API, підтримка MCP та інструмент image_generation були додані в поступових оновленнях протягом 2025 та початку 2026 року.
Чи є OpenAI Responses API станним?
Так, опціонально. Передайте previous_response_id разом із store: true, і модель зберігатиме контекст між викликами без необхідності надсилати повну історію. Для довготривалих потоків Conversations API надає явне керування життєвим циклом потоків. Ви також можете залишатися безстанним і надсилати повну історію щоразу, як у Chat Completions.
Яка різниця між Responses API та Chat Completions?
Responses API є надмножиною Chat Completions. Кожна функція Chat Completions працює в Responses, плюс додаються вбудовані інструменти (web_search, file_search тощо), станність через previous_response_id та агентний цикл як концепція першого класу. OpenAI рекомендує Responses для всіх нових проектів станом на 2026 рік.
Чи застарів API Chat Completions?
Ні. Станом на квітень 2026 року Chat Completions не застарів, він повністю підтримується. OpenAI рекомендує Responses для нових проектів, і більшість туторіалів агентного стилю припускають використання Responses. Chat Completions тепер є застарілим примітивом: стабільним, але більше не місцем, де нові функції з’являються в першу чергу.
Які моделі OpenAI підтримують Responses API?
GPT-5, gpt-5-mini, gpt-4.1 та моделі міркувань o-series усі підтримують Responses API. O-series додає параметр reasoning_effort (low, medium, high) для задач із розширеним мисленням. Генерація зображень маршрутизується через gpt-image-1« під капотом, коли ви вмикаєте інструмент image_generation`.
Як мігрувати з Chat Completions на Responses API?
Три кроки: переключіть client.chat.completions.create() на client.responses.create(), замініть масив messages на input (і перемістіть системні промпти в instructions) та спростіть схеми інструментів (видаліть вкладений ключ function). Пакет міграції OpenAI на GitHub містить повні приклади адаптерів.
Чи підтримує Responses API потокову передачу?
Так. Передайте stream=True у client.responses.create() (або використовуйте client.responses.stream() як менеджер контексту) та ітеруйте типізовані Server-Sent Events. Події потоку токенів, які ви оброблятимете, — це response.output_text.delta для контенту та response.completed для фінального payload. Асинхронна потокова передача працює через AsyncOpenAI.
Чи можна використовувати Responses API в Azure?
Так. Azure OpenAI надає доступ до Responses API, але паритет функцій відстає від прямих релізів OpenAI на 4–8 тижнів. Станом на квітень 2026 року підтримка MCP в Azure знаходиться в прев’ю. Перевірте Microsoft Learn на наявність поточних специфічних нюансів Azure перед релізом у продакшен.
Чи працює Responses API з серверами MCP?
Так, віддалені сервери MCP (Model Context Protocol) є типом інструменту першого класу. Додайте {"type": "mcp", "server_url": "...", "server_label": "..."} до вашого масиву tools, і модель виявить та викличе каталог інструментів сервера так само, як будь-який вбудований інструмент. Використовуйте require_approval: "always" у продакшені для безпеки.
Підсумки
Тепер у вас є повна картина Responses API: чим він відрізняється від Chat Completions, як здійснити перший виклик, як підключити вбудовані інструменти та як мігрувати існуючий проект Chat Completions у три кроки. Кілька висновків, на яких варто зосередитися:
- Спочатку будуйте, потім оптимізуйте. Почніть із прикладу hello-world, додайте вбудований інструмент, потім додайте стан за допомогою
previous_response_id. - Мігруйте поступово. Використовуйте feature flag, логуйте обидві форми відповідей, перемикайтеся на 100% лише після перевірки паритету.
- Впроваджуйте інтеграції MCP. Це фронтір 2026 року, більшість вендорів змагаються за надання кінцевих точок MCP, а Responses API — найчистіший спосіб їх споживання.
У Techsy ми допомагаємо командам впроваджувати продакшен-рівень інтеграцій з OpenAI, включаючи розгортання Responses API та міграцію з Chat Completions. Отримайте безкоштовну консультацію.
Від редакційної команди Techsy, інженерів продакшену, які впроваджують інтеграції з OpenAI з 2024 року. Останнє оновлення: 25 квітня 2026 року.