OpenAI Assistants API отключается 26 августа: финальный чек-лист миграции
OpenAI Assistants API полностью отключается 26 августа 2026 года — через 14 дней. Этот финальный чек-лист охватывает маппинг объектов Assistants→Responses, переписывание tool loop, экспорт Thread, ловушку с Prompts и интеграционные тесты перед переключением.
OpenAI Assistants API отключается 26 августа: финальный чек-лист миграции
Assistants API жёстко отключается 26 августа 2026 года — через 14 дней. После этой даты все вызовы openai.beta.assistants.* и openai.beta.threads.* будут возвращать ошибку. О продлении сроков не объявлялось (страница deprecations OpenAI, получено 2026-08-12).
В июне мы опубликовали концептуальный гайд по миграции. Эта статья — его операционное дополнение: чек-лист, который можно передать команде и пройти за оставшиеся 14 дней. Каждый шаг содержит команду проверки или конкретный тест.
Что произойдёт 27 августа
После отключения все endpoint Assistants API вернут HTTP-ошибки. История Thread, хранившаяся на сервере, станет недоступна через Assistants API. Если вы не экспортировали сообщения Thread до дедлайна, эти данные будут потеряны — OpenAI не гарантировал окно экспорта после отключения (гайд миграции Assistants, получено 2026-08-12).
Замена — Responses API. Chat Completions по-прежнему поддерживается и не затронут этим отключением (гайд Migrate to Responses API, получено 2026-08-12).
Маппинг объектов: Assistants → Responses
Прежде чем трогать код, разберитесь в переименовании:
| Assistants API | Эквивалент в Responses API | Что изменилось |
|---|---|---|
| Assistant | Prompt (только dashboard, тоже отключается 30 ноября) | Конфигурация переезжает в код или в Prompt-объекты |
| Thread | Conversation | Хранит item stream (сообщения, tool call, output), а не только сообщения |
| Run | Response | Синхронный запрос-ответ; для простых вызовов polling не нужен |
| Run step | Item | Типизированное объединение: message, tool_call, tool_call_output, reasoning |
openai.beta.threads.messages.create() | Input items в запросе Response | Сообщения — часть тела запроса |
openai.beta.threads.runs.create() | openai.responses.create() | Один вызов вместо create + poll |
Источник: гайд миграции Assistants, получено 2026-08-12.
Ловушка с Prompts: двойная миграция
Гайд миграции OpenAI предлагает конвертировать Assistant в Prompt через dashboard. Однако Prompt-объекты тоже объявлены deprecated, отключение запланировано на 30 ноября 2026 (страница deprecations OpenAI, получено 2026-08-12).
Если мигрировать Assistant в Prompt сейчас, через три месяца придётся мигрировать снова. Более надёжный путь — перенести конфигурацию Assistant (instructions, tool schemas, temperature, model) прямо в код приложения или в конфигурационный файл под контролем версий. Промежуточный шаг с Prompts можно пропустить.
Чек-лист: 14 дней до переключения
Шаг 1 — Аудит всех вызовов Assistants
Запустите grep по кодовой базе:
grep -rn "openai\.beta\.\(assistants\|threads\)" \
--include="*.py" --include="*.ts" --include="*.js" \
app/ services/ workers/ scripts/ lib/
Классифицируйте каждое совпадение:
- A — Новые сессии чата. Нет зависимости от истории Thread. Мигрируйте первыми.
- B — Долгоживущие Thread. Нужен экспорт истории до отключения. Запланируйте backfill.
- C — Агенты с активным использованием tool. Требуют явного переписывания tool loop. Максимальный объём работ.
- D — File search / code interpreter. Проверьте, что эквиваленты в Responses API покрывают ваш use case.
Шаг 2 — Экспортируйте историю Thread прямо сейчас
Не откладывайте. Thread станут недоступны после отключения. Экспортируйте все активные Thread:
import json
from openai import OpenAI
client = OpenAI()
def export_thread(thread_id: str) -> list[dict]:
messages = []
for page in client.beta.threads.messages.list(
thread_id=thread_id, order="asc"
).iter_pages():
messages.extend(page.data)
return [m.model_dump() for m in messages]
thread_ids = ["thread_abc123", "thread_def456"]
for tid in thread_ids:
data = export_thread(tid)
with open(f"export_{tid}.json", "w") as f:
json.dump(data, f, indent=2)
print(f"Exported {len(data)} messages from {tid}")
Проверка: убедитесь, что каждый экспортированный файл содержит ожидаемое количество сообщений.
Шаг 3 — Новые сессии через Responses API
Самый простой путь миграции — прекратить создание новых Assistant и Thread. Новые пользовательские чаты направляются через Responses API.
До (Assistants):
thread = client.beta.threads.create()
client.beta.threads.messages.create(
thread_id=thread.id,
role="user",
content="Explain API routing"
)
run = client.beta.threads.runs.create_and_poll(
thread_id=thread.id,
assistant_id="asst_xxx"
)
messages = client.beta.threads.messages.list(thread_id=thread.id)
answer = messages.data[0].content[0].text.value
После (Responses):
response = client.responses.create(
model="gpt-5.5",
instructions="You are a helpful API routing expert.",
input="Explain API routing"
)
answer = response.output_text
Для multi-turn передавайте previous_response_id или используйте Conversations:
resp1 = client.responses.create(
model="gpt-5.5",
input="What is API routing?"
)
resp2 = client.responses.create(
model="gpt-5.5",
input="How does fallback work?",
previous_response_id=resp1.id
)
Шаг 4 — Переписывание tool loop
Assistants выполняли tool через polling-цикл статуса Run. Responses API делает выполнение tool явным: вы получаете tool_call item, сами выполняете tool и отправляете результат как tool_call_output item.
До (Assistants tool loop):
run = client.beta.threads.runs.create(
thread_id=thread.id,
assistant_id="asst_xxx"
)
while run.status in ("queued", "in_progress"):
time.sleep(1)
run = client.beta.threads.runs.retrieve(
thread_id=thread.id, run_id=run.id
)
if run.status == "requires_action":
tool_calls = run.required_action.submit_tool_outputs.tool_calls
outputs = [execute_tool(tc) for tc in tool_calls]
run = client.beta.threads.runs.submit_tool_outputs_and_poll(
thread_id=thread.id,
run_id=run.id,
tool_outputs=outputs
)
После (Responses tool loop):
response = client.responses.create(
model="gpt-5.5",
instructions="You are a helpful assistant.",
input="What is the weather in Tokyo?",
tools=[{
"type": "function",
"name": "get_weather",
"description": "Get current weather",
"parameters": {
"type": "object",
"properties": {
"location": {"type": "string"}
},
"required": ["location"]
}
}]
)
for item in response.output:
if item.type == "function_call":
result = execute_tool(item.name, json.loads(item.arguments))
response = client.responses.create(
model="gpt-5.5",
previous_response_id=response.id,
input=[{
"type": "function_call_output",
"call_id": item.call_id,
"output": json.dumps(result)
}]
)
Шаг 5 — Backfill истории Thread в Conversations
Используйте экспорт из шага 2 для заполнения Conversations:
import json
def backfill_thread_to_conversation(export_path: str) -> str:
with open(export_path) as f:
messages = json.load(f)
items = []
for m in messages:
role = m["role"]
for content_block in m["content"]:
if content_block["type"] == "text":
content_type = (
"input_text" if role == "user" else "output_text"
)
items.append({
"role": role,
"content": [
{"type": content_type, "text": content_block["text"]["value"]}
]
})
conversation = client.conversations.create(items=items)
return conversation.id
Скрипт адаптирован из гайда миграции Assistants, получено 2026-08-12.
Проверка: после backfill отправьте тестовое сообщение через Conversation и убедитесь, что модель учитывает импортированную историю.
Шаг 6 — File search и code interpreter
Оба tool доступны в Responses API, но интерфейс изменился:
- File search — vector store по-прежнему работают. Responses API возвращает
file_search_callitem и message item с annotation, указывающими на исходные файлы. Polling Run step больше не нужен — результаты приходят в response output (гайд File search OpenAI, получено 2026-08-12). - Code interpreter — возвращает
code_interpreter_callitem. Sandbox-исполнение происходит на сервере; результаты включают текстовый вывод и сгенерированные файлы.
Протестируйте оба tool с известным запросом до переключения на production.
Шаг 7 — Интеграционные тесты
Тестовые сценарии должны покрывать:
- Простую генерацию текста (без tool)
- Multi-turn conversation с
previous_response_id - Tool calling как минимум с одной function
- File search с известным vector store
- SSE streaming с обработкой событий
- Обработку ошибок (rate limit, невалидная model, некорректный input)
Запустите оба пути в shadow-режиме на 24–48 часов. Сравните latency, качество output и частоту ошибок перед переключением.
Шаг 8 — Переключение через feature flag
Разверните миграцию на Responses за feature flag:
- Включите для внутреннего/staging-трафика
- 10% production-трафика, мониторинг 24 часа
- Увеличение до 50%, затем 100%
- Удаление кода Assistants через неделю стабильной работы
До 26 августа держите код Assistants как путь отката. После этой даты он перестанет работать — удалите.
Пользователи Azure OpenAI
Azure OpenAI подтвердил ту же дату отключения — 26 августа 2026 (Microsoft Learn, получено 2026-08-12). Путь миграции аналогичен.
Особенности Azure:
- Deployment name не меняется, API version обновляется
- Убедитесь, что ваша Azure API version поддерживает endpoint Responses
- Azure Content Safety фильтры работают с Responses так же, как с Assistants
Маршрутизация через gateway
Если вы направляете запросы OpenAI через gateway вроде TheRouter, протестируйте следующие пути:
- Endpoint
/v1/responses— убедитесь, что gateway корректно пересылает запросы в формате Responses - Streaming — SSE-события Responses отличаются по формату от Chat Completions
- Tool call — типы item function_call и function_call_output отличаются от tool_calls в Chat Completions
- Fallback routing — если gateway переключается с OpenAI на другого провайдера, целевой провайдер тоже должен поддерживать формат Responses API, либо gateway должен транслировать формат
TheRouter маршрутизирует OpenAI-совместимые запросы через настроенных провайдеров и поддерживает provider/model routing и fallback в рамках реализованных продуктовых путей. Конкретные комбинации model и tool нужно протестировать до переключения production.
- Меняйте три значения, а не три SDK. Замените
api_key,base_urlиmodelв существующем клиенте OpenAI. Код запроса и ответа оставьте неизменным. - Сопоставьте model ID явно. ID модели у целевого провайдера почти никогда не совпадает с OpenAI ID. Держите словарь
{ openai_id: target_id }вне бизнес-логики. - Проверьте формат streaming. SSE-чанки должны соответствовать контракту OpenAI:
data: {...}+data: [DONE]. Прогоните один streaming вызов до продакшена. - Проверьте rate-limit заголовки. Некоторые провайдеры не возвращают
x-ratelimit-*. Добавьте обёртку с безопасным дефолтом. - Оставьте путь отката. Раскатайте замену под feature flag, гоняйте оба endpoint в shadow-режиме 24 часа, затем переключайтесь.
Хронология
| Дата | Событие |
|---|---|
| 26 августа 2025 | Объявление о deprecated Assistants API |
| 3 июня 2026 | Объявление о deprecated reusable Prompts |
| 26 августа 2026 | Жёсткое отключение Assistants API |
| 30 ноября 2026 | Отключение reusable Prompts |
FAQ
В: Chat Completions тоже отключат? Нет. Chat Completions по-прежнему поддерживается. Responses API рекомендуется для новых проектов, но Chat Completions не объявлен deprecated (гайд Migrate to Responses API, получено 2026-08-12).
В: Можно получить продление? OpenAI указывает, что разработчики могут обеспечить продолжение доступа через выделенные мощности. Для этого нужно связаться с отделом продаж (страница deprecations OpenAI, получено 2026-08-12). Публичного продления не объявлялось.
В: Что будет с моими vector store? Vector store останутся доступны. File search tool в Responses API использует ту же инфраструктуру vector store. Перезагружать файлы не нужно.
В: Conversations или клиентское управление состоянием?
Для коротких сессий (одна задача, без многодневной непрерывности) управляйте состоянием на клиенте через previous_response_id. Для сессий, где пользователь возвращается к чату через дни или недели, используйте Conversations для серверной персистенции.
В: Нужно обновлять Python / Node SDK?
Оба официальных SDK уже поддерживают client.responses.create(). Обновите до последней версии. Namespace openai.beta.* перестанет работать после 26 августа.
Источники
- Гайд миграции Assistants, получено 2026-08-12
- Страница deprecations OpenAI, получено 2026-08-12
- Migrate to the Responses API, получено 2026-08-12
- Гайд File search OpenAI, получено 2026-08-12
- Подтверждение deprecated Azure OpenAI Assistants API, получено 2026-08-12