Claude APIAnthropic の機能

FEATURE

Mid-conversation system messages

Mid-conversation system messages (会話途中の system メッセージ) は、トップレベルの system フィールドを書き換える代わりに、新しい指示が必要になった時点で会話に role: "system" のメッセージを追加する Claude API の機能です。

提供中公式発表と照合済み
初出2026年5月28日
ページ更新
提供状態提供中
公式の記載で確認できた環境API、クラウド基盤経由
提供を確認できたプラン公式に記載なし
目次 CONTENTS
  1. できること
  2. 機能解説
  3. 使い方
  4. 利用シーン
  5. ChatGPT・OpenAI の対応する機能
  6. これまでの変更
  7. 関連する機能
  8. 出典
CAN DO

できること

POINT 01

会話途中で指示を追加

トップレベルの system フィールドを編集せずに、新しい指示が必要になった位置へ role: "system" のメッセージを追加できます。指示はその位置から後の会話に適用されます。

POINT 02

キャッシュを保ったまま変更

キャッシュ済みの接頭部分を変えないため、指示を変えてもプロンプトキャッシュのヒットが保たれます。追加した指示は運用者レベルの優先度を持ちます。

POINT 03

ターン限定のリマインダー

clear_at: "next_user_message" を設定すると、指示は現在のターンだけに反映され、その後はトークンコストなしで履歴に残ります。このリマインダーは蓄積せず、プロンプトキャッシュや後続の thinking ブロックを無効化しません。

GUIDE

機能解説

概要

キャッシュ済みの接頭部分は変わらないため、次のリクエストでもキャッシュから読み取られ、追加した指示は通常のユーザーの文章ではなく system の指示として扱われます。長時間のセッションの途中で、アプリケーション側から指示を変える場面に関わる機能です。

user メッセージはエンドユーザーからのもの、system メッセージはアプリケーションの運用者からのものとして扱われ、両者が食い違うときは system の指示が優先されます。会話途中の system メッセージは、この運用者レベルの優先度を保ちながら、トップレベルの system フィールドを編集した場合のキャッシュミスのコストを避けられます。

指示の優先順位は次のとおりです。

  • 指示が食い違う場合、後の system メッセージが前の system メッセージより優先されます。
  • 会話途中の system メッセージは、その後のターンについてトップレベルの system フィールドより優先されます。

Managed Agents では、system.message イベントを送ると、そのターンと以降のすべてのターンに適用されます。エージェント自身の system フィールドはセッション中に変更できません。

配置のルールと注意点

  • 内容 (text、tool_addition、tool_removal のブロック) を持つ system メッセージは、user ターン (tool_result ブロックを含むものを含む) か、サーバーツールの結果で終わる assistant ターンの直後に置き、assistant ターンの前に置くか配列の末尾にします。tool_use ブロックとその tool_result の間には置けません。それ以外の位置では 400 エラーが返ります。
  • 内容を持つ system メッセージは messages の最初の要素にできません。最初から適用する指示はトップレベルの system フィールドを使います。
  • 連続する system メッセージは受け付けられ、1 つの system セクションとして扱われます。配置のルールはそのまとまり全体に適用されます。
  • 会話に入った system メッセージは安定した履歴の一部になり、それ自体もキャッシュの対象です。送信済みのものを編集・削除すると、その位置から後のキャッシュが無効になります。
  • 生のツール出力、取得した文書、Web のコンテンツなど、会話の外から来た文章を system メッセージに直接入れないでください。その文章に運用者レベルの権限を与えることになります。
  • Claude Sonnet 5.5 と Claude Haiku 5.5 では、ツールの結果の直後に置いた system メッセージが信頼できない文章として扱われ、無視される場合があります。これらのモデルでは、ユーザーの言葉は user ターンで渡します。

ターン限定の system メッセージ (beta)

Turn-scoped system messages (ターン限定の system メッセージ) は beta として提供されており、mid-conversation-system-clear-at-2026-08-21 ヘッダーを使います。

  • role: "system" のメッセージの clear_at フィールドに "next_user_message" を設定すると、現在のターンに限定できます。SDK では messages 内の role: "system" の要素に clear_at (csharp・go は ClearAt、java は .clearAt()、php は clearAt) を設定し、beta ヘッダーを送ります。
  • 文章が反映されるのは、後ろに role: "user" のメッセージが無い間だけです。tool_result ブロックだけを持つ user メッセージも user メッセージに数えます。後に user メッセージが来るとクリアされ、配列には残りますが何も反映されず、そのリクエスト以降は入力トークンもかかりません。
  • clear_at の既定値は "never" で、その場合はメッセージを含むすべてのリクエストでその位置に反映されます。
  • ターン限定のメッセージの内容は text だけです。tool_addition・tool_removal のブロックや output_config を付けると 400 エラーが返ります。
  • ツールのループでリマインダーを見せたいときは、そのたびに tool_result メッセージの後に追加し、それまでのコピーはそのまま残します。
  • クリアされたメッセージも会話履歴の一部です。現在の状態から作り直す (新しいトークン数やタイムスタンプを入れる)、不要とみなして削除する、clear_at の値を変える、といった操作は前のメッセージの編集にあたるため、送信済みの内容をそのまま送り直します。

提供状況の注意

提供開始時点では、Claude Opus 4.8 でユーザーターンの後に role: "system" のメッセージを送れる機能として案内されました。その後、Claude Fable 5、Claude Mythos 5、Claude Opus 4.8 で、Claude API、Claude in Amazon Bedrock、Google Cloud 上で利用でき、beta ヘッダーは不要という内容に訂正されています。ターン限定の system メッセージは beta で、専用のヘッダーが必要です。対象プランについては、公式のリリースノートには記載がありません。

HOW TO USE

使い方

会話途中の system メッセージは Claude Fable 5、Claude Mythos 5、Claude Opus 4.8 で使え、beta ヘッダーは不要です。

  1. リクエストに cache_control を含めて、キャッシュを明示的に有効にします。トップレベルの自動キャッシュのフィールドか、content block への明示的なブレークポイントのどちらかを使います。
  2. cache_control は、リクエスト間で変わらない最後のブロックに置きます。
  3. messages 配列に "role": "system" のメッセージを追加します。content には、user や assistant のターンと同じく、文字列か content blocks を使います。
  4. 追加する system メッセージは、キャッシュのブレークポイントより後に置きます。接頭部分のハッシュが変わらないため、キャッシュはヒットします。
公式ヘルプを開く ↗
USE CASES

利用シーン

CASE 01

長時間のエージェントのセッションで、途中から運用者として方針を変える場面に向いています。キャッシュ済みの接頭部分を変えずに指示を追加できます。

CASE 02

ツールを繰り返し呼び出すループの中で、毎ターン短いリマインダーを渡す場面に使えます。ターン限定にすれば、リマインダーは蓄積しません。

CASE 03

エンドユーザーの入力と運用者の指示を分けて扱いたいアプリケーションに向いています。食い違ったときは system の指示が優先されます。

COMPARISON

ChatGPT・OpenAI の対応する機能

比較の単位となる業務: 長時間セッション中の指示の途中変更 (キャッシュを保ったまま)

Queued prompts (Steer) は Codex の機能で、オプトインの instant_interrupt により、モデルの応答中や長時間の code-mode 呼び出し中に新しい入力で Codex をステアできます。フォローアップの既定の動作として Queue と Steer を選ぶ設定画面もあります。会話途中の system メッセージは、API の messages 配列に role: "system" のメッセージを追加する仕組みで、その指示はアプリケーションの運用者からのものとして扱われます。

キャッシュの面では、12-hour prompt caching は OpenAI の機能で、GPT-5.6 で明示的なプロンプトキャッシュ制御が加わり、Prompt Caching ダッシュボードでキャッシュヒット率の推移やトークンの内訳を確認できます。会話途中の system メッセージは、キャッシュ済みの接頭部分を変えずに指示を追加することで、次のリクエストでもキャッシュから読み取られる仕組みです。

TIMELINE

これまでの変更

  1. ターン限定の system メッセージが beta として提供され、clear_at: "next_user_message" で現在のターンだけに反映できるようになりました。

  2. 提供状況が訂正され、Claude Fable 5、Claude Mythos 5、Claude Opus 4.8 で、Claude API、Claude in Amazon Bedrock、Google Cloud 上で利用でき、beta ヘッダーは不要となりました。

  3. 会話途中の system メッセージが提供開始されました。Claude Opus 4.8 で、messages 配列のユーザーターンの後に role: "system" のメッセージを送れます。

SOURCES

出典

出典 7 件を表示