Сталкиваетесь с ошибкой field messages is required при вызове новых моделей типа GPT-5-nano? Это распространённая проблема для разработчиков, переходящих на новую версию OpenAI API. В этой статье я подробно разберу ключевые различия между Responses API и Chat Completions API и помогу вам быстро найти и исправить ошибки в формате запросов.
Что вы получите: После прочтения вы поймёте разницу между двумя API, научитесь правильно работать с моделями серии GPT-5 и раз и навсегда избавитесь от ошибки field messages is required.

Суть ошибки field messages is required
| Проблема | Причина | Решение |
|---|---|---|
| field messages is required | В endpoint Responses API отправлен запрос в формате Chat Completions | Используйте input вместо messages |
| invalid_text_request | Формат запроса не соответствует API endpoint | Проверьте соответствие endpoint и формата параметров |
| shell_api_error | Внутренняя ошибка маршрутизации, сбой парсинга формата | Убедитесь, что используете правильную версию API |
Разбор конкретной ошибки
Судя по предоставленной информации об ошибке:
{
"original_error": {
"status_code": 400,
"error": {
"message": "field messages is required",
"type": "shell_api_error",
"code": "invalid_text_request"
}
},
"request_params": {
"model": "gpt-5-nano",
"instructions": "# Role\n\nYou generate alt text..."
}
}
Диагноз: В запросе присутствуют только параметры model и instructions, отсутствует обязательный параметр input. Responses API требует обязательной передачи пользовательского ввода.
Почему возникает ошибка field messages is required
В настоящее время OpenAI предлагает два основных API для генерации текста:
- Chat Completions API (
/v1/chat/completions) — использует массивmessages - Responses API (
/v1/responses) — использует разделённые параметрыinput+instructions
Когда формат вашего запроса не соответствует целевому API endpoint, возникает ошибка field messages is required или подобная. Для моделей серии GPT-5 (включая gpt-5-nano) по умолчанию рекомендуется использовать Responses API.

Правильные форматы запросов: детальное руководство
1. Responses API (рекомендуется для GPT-5)
Базовая структура запроса:
import openai
client = openai.OpenAI(api_key="ваш-ключ-api")
response = client.responses.create(
model="gpt-5-nano",
instructions="Ты — полезный ассистент, генерирующий краткие ответы.",
input="Объясни квантовую физику простыми словами"
)
print(response.output)
Важные параметры:
| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
model |
string | ✅ Да | Название модели (например, "gpt-5-nano") |
instructions |
string | ❌ Нет | Системный промпт, определяющий поведение модели |
input |
string | ✅ Да | Пользовательский запрос |
tools |
array | ❌ Нет | Список доступных функций |
temperature |
float | ❌ Нет | Креативность (0.0-2.0), по умолчанию 1.0 |
Пример работы с инструментами (функциями):
response = client.responses.create(
model="gpt-5-nano",
instructions="Ты — ассистент для работы с погодой.",
input="Какая погода в Москве?",
tools=[{
"type": "function",
"function": {
"name": "get_weather",
"description": "Получить текущую погоду в городе",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string"}
},
"required": ["city"]
}
}
}]
)
2. Chat Completions API (для старых моделей)
Базовая структура запроса:
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "Ты — полезный ассистент."},
{"role": "user", "content": "Привет!"}
]
)
print(response.choices[0].message.content)
Формат messages:
messages = [
{
"role": "system", # system/user/assistant
"content": "Твои инструкции"
},
{
"role": "user",
"content": "Запрос пользователя"
}
]
3. Миграция с Chat Completions на Responses API
Было (Chat Completions):
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{
"role": "system",
"content": "Ты — эксперт по программированию на Python"
},
{
"role": "user",
"content": "Как реализовать декоратор?"
}
],
temperature=0.7
)
Стало (Responses API):
response = client.responses.create(
model="gpt-5-nano",
instructions="Ты — эксперт по программированию на Python",
input="Как реализовать декоратор?",
temperature=0.7
)
Сравнительная таблица:
| Характеристика | Chat Completions | Responses API |
|---|---|---|
| Системный промпт | messages[0] с role="system" | instructions |
| Пользовательский ввод | messages[n] с role="user" | input |
| История диалога | Вручную через messages | Автоматически через context |
| Вызов функций | tools в messages | tools в корне |
| Поддержка стриминга | ✅ Да | ✅ Да |
Типичные ошибки и их решения
Ошибка 1: Отсутствие обязательного параметра input
❌ Неправильно:
response = client.responses.create(
model="gpt-5-nano",
instructions="Ты — помощник"
# Забыли добавить input!
)
✅ Правильно:
response = client.responses.create(
model="gpt-5-nano",
instructions="Ты — помощник",
input="Какой сегодня день?" # Обязательный параметр
)
Ошибка 2: Использование messages в Responses API
❌ Неправильно:
response = client.responses.create(
model="gpt-5-nano",
messages=[ # Это неправильный параметр для Responses API
{"role": "user", "content": "Привет"}
]
)
✅ Правильно:
response = client.responses.create(
model="gpt-5-nano",
input="Привет"
)
Ошибка 3: Неверный endpoint URL
❌ Неправильно:
# Отправка формата Responses на endpoint Chat Completions
response = requests.post(
"https://api.openai.com/v1/chat/completions",
json={
"model": "gpt-5-nano",
"input": "Привет" # Этот формат не подходит для chat/completions
}
)
✅ Правильно:
# Правильное соответствие: Responses формат → Responses endpoint
response = requests.post(
"https://api.openai.com/v1/responses",
json={
"model": "gpt-5-nano",
"input": "Привет"
},
headers={"Authorization": f"Bearer {api_key}"}
)
Работа с диалогами и контекстом
Responses API: встроенное управление состоянием
Один из главных плюсов Responses API — автоматическое сохранение контекста:
# Первый запрос
response1 = client.responses.create(
model="gpt-5-nano",
instructions="Ты — математический репетитор",
input="Объясни теорему Пифагора"
)
# Получаем ID контекста
context_id = response1.context.id
# Продолжаем диалог
response2 = client.responses.create(
model="gpt-5-nano",
context_id=context_id, # Ссылка на предыдущий контекст
input="А как это применить на практике?"
)
Chat Completions API: ручное управление историей
messages = [
{"role": "system", "content": "Ты — математический репетитор"}
]
# Первый запрос
messages.append({"role": "user", "content": "Объясни теорему Пифагора"})
response1 = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages
)
messages.append({"role": "assistant", "content": response1.choices[0].message.content})
# Второй запрос
messages.append({"role": "user", "content": "А как это применить на практике?"})
response2 = client.chat.completions.create(
model="gpt-4o-mini",
messages=messages
)
Продвинутые техники использования
Стриминг ответов в Responses API
stream = client.responses.create(
model="gpt-5-nano",
instructions="Ты — креативный писатель",
input="Напиши короткий рассказ про кота",
stream=True # Включаем потоковую передачу
)
for chunk in stream:
if chunk.output:
print(chunk.output, end="", flush=True)
Параллельный вызов функций
response = client.responses.create(
model="gpt-5-nano",
input="Какая погода в Москве и курс доллара?",
tools=[
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Получить погоду",
"parameters": {
"type": "object",
"properties": {"city": {"type": "string"}},
"required": ["city"]
}
}
},
{
"type": "function",
"function": {
"name": "get_exchange_rate",
"description": "Получить курс валюты",
"parameters": {
"type": "object",
"properties": {"currency": {"type": "string"}},
"required": ["currency"]
}
}
}
],
parallel_tool_calls=True # Разрешаем параллельные вызовы
)
Обработка ошибок
from openai import OpenAIError
try:
response = client.responses.create(
model="gpt-5-nano",
instructions="Ты — помощник",
input="Привет"
)
except OpenAIError as e:
if "field messages is required" in str(e):
print("Проверьте формат запроса: используйте 'input', а не 'messages'")
elif "invalid_text_request" in str(e):
print("Неверный формат запроса для выбранного endpoint")
else:
print(f"Ошибка API: {e}")
Полный рабочий пример
Вот полноценный пример, объединяющий всё вышесказанное:
import openai
from typing import Optional
class AIAssistant:
def __init__(self, api_key: str):
self.client = openai.OpenAI(api_key=api_key)
self.context_id: Optional[str] = None
def chat(self, user_message: str, system_prompt: str = "Ты — полезный ассистент"):
"""Отправка сообщения с сохранением контекста"""
params = {
"model": "gpt-5-nano",
"input": user_message,
"temperature": 0.8
}
# Добавляем инструкции только для нового диалога
if not self.context_id:
params["instructions"] = system_prompt
else:
params["context_id"] = self.context_id
try:
response = self.client.responses.create(**params)
# Сохраняем context_id для следующих запросов
if hasattr(response, 'context'):
self.context_id = response.context.id
return response.output
except Exception as e:
return f"Ошибка: {str(e)}"
def reset_conversation(self):
"""Начать новый диалог"""
self.context_id = None
# Использование
assistant = AIAssistant(api_key="ваш-ключ-api")
# Первое сообщение
print(assistant.chat(
"Объясни разницу между списками и кортежами в Python",
system_prompt="Ты — опытный Python-разработчик"
))
# Продолжение диалога (автоматически используется контекст)
print(assistant.chat("А какие у них есть методы?"))
# Начать нов
## Правильный формат запроса к Responses API
### Минималистичный пример
Вот как правильно вызывать GPT-5-nano:
```python
import openai
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://vip.apiyi.com/v1"
)
# Правильный формат Responses API
response = client.responses.create(
model="gpt-5-nano",
instructions="You generate alt text for images.",
input="Describe the sunset photo"
)
print(response.output_text)
Посмотреть полный пример кода (с обработкой ошибок)
import openai
from typing import Optional
def call_responses_api(
input_text: str,
model: str = "gpt-5-nano",
instructions: Optional[str] = None
) -> str:
"""
Правильный вызов OpenAI Responses API
Args:
input_text: Пользовательский ввод (обязательно!)
model: Название модели
instructions: Системные инструкции
Returns:
Ответ модели
"""
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://vip.apiyi.com/v1"
)
try:
# Формат Responses API: input + instructions (разделённые)
response = client.responses.create(
model=model,
input=input_text, # Обязательный параметр!
instructions=instructions
)
return response.output_text
except Exception as e:
return f"Error: {str(e)}"
# Пример правильного вызова
result = call_responses_api(
input_text="A golden sunset over the ocean with waves",
model="gpt-5-nano",
instructions="You generate alt text for HTML img tags. Keep it concise, under 125 characters."
)
print(result)
Совет: Получите бесплатные тестовые кредиты через APIYI apiyi.com — платформа поддерживает оба формата (Chat Completions и Responses API), что удобно для отладки и проверки.
Формат запроса к Chat Completions API
Если вам привычнее работать с Chat Completions API, можете продолжать его использовать, но в правильном формате:
import openai
client = openai.OpenAI(
api_key="YOUR_API_KEY",
base_url="https://vip.apiyi.com/v1"
)
# Правильный формат Chat Completions API
response = client.chat.completions.create(
model="gpt-5-nano",
messages=[
{
"role": "system",
"content": "You generate alt text for HTML img tags."
},
{
"role": "user",
"content": "Describe the sunset photo"
}
]
)
print(response.choices[0].message.content)
Сравнение параметров двух API

| Характеристика | Chat Completions | Responses API |
|---|---|---|
| Параметр пользовательского ввода | массив messages |
строка или массив input |
| Параметр системных инструкций | messages[system] |
instructions |
| Эндпоинт | /v1/chat/completions |
/v1/responses |
| Управление состоянием | Без состояния | Поддержка previous_response_id |
| Рекомендуемые сценарии | Совместимость с существующими проектами | Первый выбор для новых проектов |
Типичные ошибки и решения
Ошибка 1: field messages is required
Причина: В эндпоинт Responses API отправлен запрос в формате Chat Completions
Решение:
- Вариант А: Используйте
input+instructionsвместоmessages - Вариант Б: Переключитесь на эндпоинт
/v1/chat/completionsс параметромmessages
Ошибка 2: invalid_text_request
Причина: Формат тела запроса не соответствует целевому API
Решение: Проверьте, не пропущены ли обязательные параметры (например, input для Responses API)
Ошибка 3: Missing required parameter: tools[0].function
Причина: Форматы определения инструментов различаются между Chat Completions и Responses API
Решение: Перепишите код в соответствии со спецификацией определения инструментов нужного API
Часто задаваемые вопросы
Q1: Какой API следует использовать для GPT-5-nano?
Рекомендуется использовать Responses API (/v1/responses). Модели серии GPT-5 оптимизированы для Responses API и поддерживают больше встроенных функций, таких как web_search, code_interpreter и другие.
Q2: Нужно ли переносить существующий код Chat Completions?
Миграция не обязательна. Chat Completions API по-прежнему поддерживает модели серии GPT-5. Однако если вам нужны новые возможности, такие как управление состоянием или встроенные инструменты, рекомендуется перейти на Responses API.
Q3: Как быстро протестировать оба формата API?
Рекомендуем использовать платформу APIYI для тестирования:
- Зарегистрируйтесь на сайте apiyi.com
- Получите API Key и бесплатный тестовый лимит
- Платформа поддерживает как Chat Completions, так и Responses API
- Используйте примеры кода из этой статьи для быстрой проверки
Характеристики модели GPT-5-nano
| Параметр | Значение |
|---|---|
| Дата выпуска | 07.08.2025 |
| Контекстное окно | 272 000 токенов (ввод) |
| Максимальный вывод | 128 000 токенов |
| Цена за ввод | $0.05/млн токенов |
| Цена за вывод | $0.40/млн токенов |
| Знания актуальны до | 30.05.2024 |
| Уровни рассуждений | minimal / low / medium / high |
🎯 Совет по экономии: GPT-5-nano — самая доступная модель в линейке GPT-5, отлично подходит для задач классификации, создания резюме, простых вопросов-ответов. При использовании через платформу APIYI можно получить дополнительные скидки.
Резюме
Ключевые моменты ошибки field messages is required:
- Корень проблемы: Отправка запроса в формате Chat Completions на Responses API, или отсутствие обязательного параметра
input - Решение: Используйте правильный формат параметров — для Responses API нужны
input+instructions, для Chat Completions —messages - Лучшие практики: Для новых проектов с моделями GPT-5 рекомендуется Responses API, существующие проекты могут продолжать использовать Chat Completions
При проблемах с форматом API сначала определите целевой endpoint, затем проверьте соответствие параметров.
Рекомендуем быстро проверить работу через APIYI apiyi.com — платформа поддерживает оба формата API и предоставляет бесплатные тестовые кредиты.
Справочные материалы
⚠️ О формате ссылок: Все внешние ссылки даны в формате
Название ресурса: domain.com— удобно копировать, но нельзя кликнуть, чтобы избежать потери SEO-веса.
-
Документация OpenAI Responses API: Официальное руководство по использованию Responses API
- Ссылка:
platform.openai.com/docs/api-reference/responses - Описание: Полный справочник по параметрам и использованию Responses API
- Ссылка:
-
Руководство по миграции OpenAI API: Переход с Chat Completions на Responses API
- Ссылка:
platform.openai.com/docs/guides/migrate-to-responses - Описание: Официальный гайд по миграции и соответствие параметров
- Ссылка:
-
Документация модели GPT-5 nano: Характеристики и рекомендации для GPT-5-nano
- Ссылка:
platform.openai.com/docs/models/gpt-5-nano - Описание: Возможности модели и сценарии применения
- Ссылка:
Автор: Техническая команда
Обсуждение: Приглашаем к дискуссии в комментариях, дополнительные материалы — в техническом сообществе APIYI apiyi.com
