2026年9月4日 金曜日
AI時短ラボ
プロダクト· 約19

OpenAI Assistants API、8月26日に停止──移行していない場合に今すぐやること

OpenAIは2025年8月26日に告知したAssistants APIの提供終了を、予告どおり2026年8月26日に実行した。移行先はResponses APIとConversations API。OpenAI公式の移行ガイドを2026年8月27日に確認し、Assistants→Prompts・Threads→Conversations・Runs→Responsesの対応関係と、実際の移行手順をまとめた。

OpenAI Assistants API、8月26日に停止──移行していない場合に今すぐやること
執筆・編集:
目次

OpenAIのAssistants APIは、2026年8月26日に提供終了となった。告知は1年前の2025年8月26日で、公式の提供終了ページには「Shutdown date: 2026‑08‑26」「Recommended replacement: Responses API and Conversations API」と明記されている。この記事を書いている2026年8月27日時点で、Assistants APIをまだResponses API・Conversations APIに移行していない場合、まずやることは一つ――OpenAI公式の移行ガイドを開き、AssistantsPromptsThreadsConversationsRunsResponsesという3つの対応関係を確認し、動いているコードのうちどれがどの新オブジェクトに置き換わるかを洗い出すことだ。以下、その対応関係と実際の移行手順を、公式ドキュメントの記述だけを使って整理する。

  • Assistants APIは2025年8月26日告知→2026年8月26日停止で、予告どおり1年後に実行された。移行先はResponses APIConversations API
  • 対応関係はAssistantsPromptsThreadsConversationsRunsResponsesRun stepsItemsの4つ。Prompts(旧Assistants相当)はダッシュボードでのみ作成可能で、Assistants時代のようにAPI経由では作れない
  • Threadから Conversationへの自動移行ツールは提供されない。公式ガイドが示すのは、新規ユーザーの会話からConversations APIに切り替え、既存Threadは必要に応じて手動で移す、という方針

いつ何が起き、何をすればいいか

OpenAI公式の提供終了(Deprecations)ページには、Assistants APIの行が次のように掲載されている。

告知日 対象 停止日 推奨移行先
2025年8月26日 Assistants API 2026年8月26日 Responses API と Conversations API

同ページの「Deprecation vs. legacy」の項には、提供終了の扱いについて次のように書かれている。「deprecated(提供終了が発表された状態)になったモデル・エンドポイントには必ずshut down日が付き、その日を迎えるとモデルまたはエンドポイントにはアクセスできなくなる」。Assistants APIも同じ枠組みの対象として掲載されており、この記事の執筆時点(8月27日)はその停止日をすでに1日過ぎている。

やることは次の3つに整理できる。

  1. 自分のコードがAssistants API(/v1/assistants/v1/threads/v1/threads/*/runsなど、SDKではopenai.beta.threads.*)を呼んでいるか確認する。
  2. 呼んでいるなら、後述の対応表に沿ってPromptsConversationsResponsesへの置き換え箇所を洗い出す。
  3. 既存のThread(会話履歴)をConversationsへ移すかどうかを判断する。公式ガイドは自動移行ツールを提供しないと明記しているため、放置すれば手元にはThread時代のデータが残ったまま、新規のやり取りだけがConversations側に積み上がる状態になる。

何がどう変わったか──4つの言葉の対応表

移行ガイドの冒頭に、旧オブジェクトと新オブジェクトの対応表が掲載されている。翻訳して引用する。

旧(Assistants API) 新(Responses API) 変更理由(公式の説明)
Assistants Prompts Promptsはモデル・ツール・instructionsの設定を保持し、バージョン管理・更新がしやすい
Threads Conversations メッセージだけでなく、アイテムのストリームを扱えるようになる
Runs Responses 入力アイテムを渡すか会話オブジェクトを使い、出力アイテムを受け取る。ツール呼び出しループは明示的に管理する
Run steps Items メッセージ・ツール呼び出し・出力などをまとめて表す汎用オブジェクト

このうち実務上いちばん影響が大きいのは1行目だ。公式ガイドは「Assistantsの後継であるPromptsは、ダッシュボードでのみ作成できる」と明記している。Assistants API時代はコードからopenai.beta.assistants.create()のようにプログラムで生成・削除できたが、Promptsはダッシュボード上の操作が前提になる。移行ガイドはこれを次のように位置づけている。「アプリケーションコード側が履歴のプルーニングやツールループ、リトライといったオーケストレーションを担当し、プロンプト側はシステムガイダンスやツール利用可否、構造化出力のスキーマといった高レベルの振る舞いに専念する」という役割分担への変更だという。

もう一点、移行ガイド自身が注記している見落としやすい依存関係がある。「Promptsを使う移行経路を取る場合は、長期運用のインテグレーションにPromptオブジェクトを組み込む前に、再利用可能プロンプト(reusable prompts)自体の提供終了スケジュールを確認してほしい」という一文だ。OpenAIの提供終了ページを見ると、再利用可能プロンプト(v1/prompts API)自体も2026年6月3日に提供終了が告知されており、2026年11月30日に停止予定になっている。つまりAssistantsの移行先として案内されているPromptsの仕組み自体も、3ヶ月後には別の形に移行が必要になる可能性がある。Assistants→Prompts移行だけを終えて安心する設計は避けた方がいい。

Threadsの移行に自動ツールはない

移行ガイドは「Threads から Conversations への自動移行ツールは提供しない」としたうえで、「新規のユーザースレッドはConversationsに移し、古いものは必要に応じてバックフィル(後追い移行)する」ことを推奨している。公式ガイドに掲載されているPython例(要旨)は次のような内容だ。

import os
from openai import OpenAI

openai = OpenAI()
messages = []
thread_id = os.environ["OPENAI_THREAD_ID"]

for page in openai.beta.threads.messages.list(
    thread_id=thread_id, order="asc"
).iter_pages():
    messages += page.data

items = []
for m in messages:
    item = {"role": m.role}
    item_content = []
    for content in m.content:
        if content.type == "text":
            item_content_type = "input_text" if m.role == "user" else "output_text"
            item_content.append({"type": item_content_type, "text": content.text.value})
        elif content.type == "image_url":
            item_content.append({
                "type": "input_image",
                "image_url": content.image_url.url,
                "detail": content.image_url.detail,
            })
    item["content"] = item_content
    items.append(item)

# 変換したitemsでConversationを作る
conversation = openai.conversations.create(items=items)

旧Threadのメッセージを1件ずつ取り出し、テキストか画像かでinput_text/output_text/input_imageに振り分け、新しいconversations.create()にまとめて渡す、という手順だ。Thread単位でこれを回せば既存の会話履歴をConversationに移せるが、対象Thread数が多い場合は自前でバッチ処理を組む必要がある。

実装比較──同じチャットアプリをAssistantsとResponsesで書くと

移行ガイドは「User chat app」という同一のユースケースを、Assistants APIとResponses APIそれぞれの実装で並べている。Assistants API側は次のような、Runの完了をポーリングで待つ構造になる。

threads_by_session: dict[str, str] = {}

@app.post("/messages")
async def message(message: Message):
    thread_id = threads_by_session.get(message.session_id)
    if thread_id is None:
        thread_id = openai.beta.threads.create().id
        threads_by_session[message.session_id] = thread_id

    openai.beta.threads.messages.create(
        thread_id=thread_id, role="user", content=message.content,
    )
    run = openai.beta.threads.runs.create(
        assistant_id=os.environ["OPENAI_ASSISTANT_ID"], thread_id=thread_id,
    )
    while run.status in ("queued", "in_progress"):
        await asyncio.sleep(1)
        run = openai.beta.threads.runs.retrieve(thread_id=thread_id, run_id=run.id)

    messages = openai.beta.threads.messages.list(order="desc", limit=1, thread_id=thread_id)
    return {"content": messages.data[0].content}

同じ機能のResponses API版は、ポーリングのループが消え、1回の呼び出しで完結する形になっている。

conversations_by_session: dict[str, str] = {}

@app.post("/messages")
async def message(message: Message):
    conversation_id = conversations_by_session.get(message.session_id)
    if conversation_id is None:
        conversation_id = openai.conversations.create().id
        conversations_by_session[message.session_id] = conversation_id

    response = openai.responses.create(
        prompt={"id": os.environ["OPENAI_PROMPT_ID"]},
        input=[{"role": "user", "content": message.content}],
        conversation=conversation_id,
    )
    return {"content": response.output_text}

assistant_idprompt={"id": ...}に、Run作成後のwhile run.status in ("queued", "in_progress")のポーリングがresponse.output_textへの直接アクセスに置き換わっている。移行ガイドはこの変更を「Responsesはシンプルで、入力アイテムのセットを渡せば出力アイテムのリストが返ってくる」と説明している。ポーリングを自前で書いていたコードは、この移行でその部分がまるごと不要になる。

提供終了ページ内で、告知日が節見出しと本文で食い違う

旧Assistants・Thread・Runのデータが停止後どうなるかは、公式ページの記述だけでは分からない。 提供終了ページには「shut down日を迎えるとモデル・エンドポイントにアクセスできなくなる」とあるが、これは「APIアクセスができなくなる」という意味なのか、「保存されていたデータ自体が削除される」という意味なのかを明確に区別する記述は、確認した範囲では見当たらなかった。

Assistants関連ページの公開状況が、ページによってばらついている。 2026年8月27日に実際に開いて確認したところ、/api/docs/assistants/api/docs/assistants/overview/api/docs/assistants/quickstartはいずれも「Page not found」の404になっていた。一方で移行ガイド本体(/api/docs/assistants/migration)と、個別ツールの解説ページ(/api/docs/assistants/tools)、および/threads/threads/{id}/runsなどのAPIリファレンスは、この記事の執筆時点でも普通に閲覧できる。しかも移行ガイドとツールページの冒頭バナーは「It will shut down on August 26, 2026.」と、停止日をすでに過ぎた8月27日の時点でも未来形の文言のままだった。ページによって更新のタイミングが揃っていない、という状態を観測した。

提供終了ページ内で、告知日の表記が節見出しと本文で食い違っている。 該当箇所の節見出しは「2025-08-20: Assistants API」だが、直後の本文は「On August 26th, 2025, we notified developers...」と8月26日になっている。どちらが正しい告知日なのか、公式ページの記述だけでは確定できない。原文ママの食い違いとして扱う。

実際にAPIを呼び出した動作確認はしていない。 APIキーを使った実地の疎通確認は行っておらず、今回の記述はすべてOpenAI公式ドキュメントのテキストとページの生死(200/404)を確認した範囲にとどまる。

Assistants APIに限らない、AIモデル・APIの提供終了ルール全般(各社の通知期間や、他に控えている停止予定)は使っていたAIモデルが消える日──提供終了スケジュールの読み方と、乗り換えコストを織り込んだ選び方で扱っている。Responses APIが標準対応するMCP(Model Context Protocol)についてはMCP(Model Context Protocol)とは、AIエージェントの基本的な仕組みについてはAIエージェントとは?仕組みと活用事例【2026年解説】も参照してほしい。


出典・但し書き

本記事の日付・仕様・コード例は、2026年8月27日にOpenAI公式ドキュメントを取得して確認したものです。

コード例はOpenAI公式の移行ガイドに掲載されているサンプルを要約・整形したもので、動作確認は行っていません。実装の際は公式ドキュメントの最新版とSDKのバージョンを直接確認してください。本記事は法務・契約上の助言ではありません。

シェア: ポスト はてブ

出典・参照資料

AIニュースの解説を動画でも

YouTubeでは注目ニュースの背景を解説し、Xでは新着記事をお知らせしています。

コメント

まだコメントはありません。最初のコメントを書いてみませんか?

AIについて聞きたいことはありますか?

質問箱で無料で受け付けています。回答は公開され、他の方の参考にもなります。

質問箱を見る →

新しい記事をメールで受け取る

AIの新しい発表を、出典付きで整理して届けます。

関連記事

OpenAIの「Programmatic Tool Calling」──モデルがコードを書いてツールを並列実行し、中間結果を圧縮するの記事画像
プロダクト09.01読了19

OpenAIの「Programmatic Tool Calling」──モデルがコードを書いてツールを並列実行し、中間結果を圧縮する

出典 ─ openai-agents-js v0.14
OpenAI Agents SDK、一時停止した実行に後から入力を差し込めるように──JS版とPython版が同時に対応の記事画像
プロダクト09.04読了12

OpenAI Agents SDK、一時停止した実行に後から入力を差し込めるように──JS版とPython版が同時に対応

出典 ─ openai-agents-js v0.15
OpenAIが「Codex」の実行の仕組みを丸ごと公開──ARC-AGI-3のスコアが2つの設定変更だけで3倍になった話もの記事画像
プロダクト08.20読了9

OpenAIが「Codex」の実行の仕組みを丸ごと公開──ARC-AGI-3のスコアが2つの設定変更だけで3倍になった話も

出典 ─ OpenAI Developers Blog
AnthropicとOpenAIのSDKが揃って「Standard Schema」対応──Zod依存を外せる共通規格とはの記事画像
検証09.01読了18

AnthropicとOpenAIのSDKが揃って「Standard Schema」対応──Zod依存を外せる共通規格とは

出典 ─ anthropic-sdk-typescri
エージェントのプロンプト・ツール・スキルを「失敗トレースから」自動改善するcap-evolve──held-out評価で+58.3%の実測値の記事画像
検証09.01読了15

エージェントのプロンプト・ツール・スキルを「失敗トレースから」自動改善するcap-evolve──held-out評価で+58.3%の実測値

出典 ─ skillberry-ai/cap-evol
ローカルLLMでコーディングエージェントは実用になるか──Ollamaで動かした結果の記事画像
活用09.01読了16

ローカルLLMでコーディングエージェントは実用になるか──Ollamaで動かした結果

出典 ─ Ollama Library
gpt-3.5-turbo・gpt-4・o1が2026年10月23日に一斉停止──対象17系統の全リストと移行先の記事画像
モデル09.01読了16

gpt-3.5-turbo・gpt-4・o1が2026年10月23日に一斉停止──対象17系統の全リストと移行先

出典 ─ Deprecations(OpenAI AP
プロンプトキャッシュが効いていない時のサイン──OpenAI公式ドキュメントが認める「キャッシュが逆に高くつく」5パターンの記事画像
活用09.01読了16

プロンプトキャッシュが効いていない時のサイン──OpenAI公式ドキュメントが認める「キャッシュが逆に高くつく」5パターン

出典 ─ OpenAI API Docs