PaPoo
cover

Error: 400 {"type":"error","error":{"type":"invalid_request_error":"messages.3: role 'system' must precede an 'assistant' message or end the array; まず確認したいのは compaction 後に会話を再開しようとしていないかです

同じ系統の報告が 2 件ありました。#73821 は messages.67 に対して role 'system' must precede an 'assistant' message or end the array と出ており、#88276 は Unable to start conversation after compaction のあとに、同種の 400 エラーが返っています。少なくとも issue 上では、どちらも「messages 配列の中で system の位置が不正」と読める内容でした。

手元で確認できた一次情報では、実行環境は次のとおりです。

[env_summary]
OS          : Linux 3.10.0-1160.76.1.el7.x86_64 (x86_64)
Python      : 3.8.13
検証日時    : 2026-09-28T08:53:08+09:00

この症状が出るケースは、少なくとも報告から見る限り、通常の会話中というより compaction のあとに会話を再開しようとした場面が怪しいです。#88276 のタイトルがまさにそれでした。一方で、#73821 では messages.67 の位置で system の並び順が問題だと返されています。どちらも Claude Code 側が API に送るメッセージ列の組み立てで、system メッセージの位置が崩れたときに出るエラーに見えますが、ここは issue の文面からそう読める、という範囲です。内部実装までは分かりません。

いま確認できる範囲で、読者側が切り分けるなら次の見方になります。compaction を挟んだ直後に会話を続けようとしたときだけ出るのか、それとも長い会話の途中で再現するのか。後者まで広がるなら、#73821 のようにメッセージ番号付きで落ちる可能性があります。前者に限られるなら、#88276 とかなり近い症状です。

ただし、今回渡された情報だけでは、恒久的な回避策や修正済みかどうかは断定できません。代表 issue のコメントも「Closing for now — inactive for too long. Please open a new issue if this is still relevant.」というもので、解決方法そのものは示されていませんでした。なので、現時点では「原因は system メッセージの配置不整合らしい」「compaction 後の再開で起きやすそう」というところまでが、資料から言える上限です。

再現したときは、少なくともエラー本文に出る messages.<番号> と request_id は控えておく価値があります。#73821 には request_id が含まれていましたし、#88276 でも Request ID for the report が付いていました。報告時にそのまま貼れる材料になります。


検証環境

OS          : Linux 3.10.0-1160.76.1.el7.x86_64 (x86_64)
Python      : 3.8.13
検証日時    : 2026-09-28T08:53:08+09:00

参照した Issue(anthropics/claude-code): #88276, #73821

同じ著者の記事