文章が1語ずつ作られる仕組みを図にした。終わり方は7通りある

応答はまとめて完成するのではなく、少しずつ届きます。どう終わったかは返答に記録されていて、7通りのうち2つは「途中で切れた」という意味です。

この記事の結論

  1. 応答は増分として少しずつ届く。まとめて完成するのではない
  2. どう終わったかは返答に記録されている
  3. 7通りのうち2つは「途中で切れた」という意味になる
  • 応答は増分として少しずつ届く。まとめて完成するのではない
  • どう終わったかは返答に記録されている
  • 7通りのうち2つは「途中で切れた」という意味になる

画面に文字が流れるように出てくるのは演出ではない。本当に少しずつ作られている。その前提が分かると、答えが途中で終わる現象の見え方が変わる。

少しずつ届いている

公式ドキュメントの説明では、応答は増分(デルタ)として送られる仕組みが用意されている。届く順番も決まっている。

  1. 開始の合図(この時点では中身が空)
  2. 中身の塊ごとに「開始 → 増分の連続 → 終了」
  3. 全体に対する更新
  4. 停止の合図

2番の「増分の連続」が、画面で文字が伸びていく部分にあたる。

語が1つずつ連なって次の語が決まる様子と、生成の終わり方7種類を一覧にした図
図1:上が生成の進み方。下が終わり方の7通り。赤い2つは言い終えていない。
SPONSORED

終わり方が記録されている

公式ドキュメントにはこうある。「Messages APIのすべての応答には、Claudeがなぜ生成を止めたかを示す stop_reason が含まれる」。

値は7通りある。

値意味
end_turn自然に言い終えた。最も多い
max_tokens指定した上限に達した
stop_sequenceこちらが指定した文字列が出たので止めた
tool_use道具を呼んでいる。結果を返すのを待っている
pause_turnサーバー側の繰り返しが上限に達した
refusal応答を拒否した
model_context_window_exceeded枠が満杯になった

2つは「途中で切れた」という意味

max_tokens と model_context_window_exceeded は、言い終えていないことを示す。公式の対処欄にも、前者は「上限を増やすか、応答を継続する」、後者は「応答を切り詰められたものとして扱う」とある。

厄介なのは、見た目では分からないことだ。途中で切れていても、文章としては成立して見える。最後の段落が妙にあっさりしている、箇条書きの数が足りないといった形で出る。

長い文書を扱うときに起きやすい。渡し方の工夫は長い文書を読ませるときの渡し方に書いた。

「自然に終わる」とはどういうことか

公式の説明では、モデルは通常、自分のターンを自然に完了したときに止まり、その結果が end_turn になるとされている。

つまりどこで終わるかもモデルが決めている。長さを指示しても守られにくいのは、ここに理由がある。文字数は終わりの判断に直接結びついていない。

確実に止めたい場合は、こちらから止める文字列を指定する仕組みがある。指定した文字列が出た時点で生成が止まり、stop_sequence として記録される。

上限の設定について

max_tokens は「止まる前に生成するトークンの最大数」と説明されている。あわせて注記がある。モデルはこの最大に達する前に止まることがある。つまりこれは上限であって目標ではない。

設定を小さくすると、途中で切れる確率が上がる。考える量が多いモデルでは、考えたぶんもこの枠に数えられるので、余裕を持たせる必要がある。

枠との関係

生成されたものは、そのまま次の回の入力になる。この積み上がりが model_context_window_exceeded につながる。枠に何が入っているかは文脈ウィンドウに何が入っているのか、図にしたで整理した。

要約が途中で雑になる理由として

長い文章を要約させたとき、後半が薄くなることがある。原因は複数ありうるが、上限に達して切れている可能性は確認できる。

APIを直接使っていれば stop_reason を見れば分かる。画面から使っている場合は、「続けて」と頼んで続きが出るかどうかで判別できる。続きが出るなら、切れていたということになる。

頼み方で防ぐ方法は長い文章を要約させると大事なところが抜ける。防ぐために変えた頼み方に書いた。

まとめ

  • 応答は増分として少しずつ届く
  • 終わり方はstop_reasonとして記録されている
  • end_turn は自然に言い終えた状態。最も多い
  • max_tokens と model_context_window_exceeded は途中で切れている
  • 切れていても文章としては成立して見える
  • どこで終わるかはモデルが決める。確実に止めるには文字列を指定する
SPONSORED

出典

図は本記事のために作成したもの。本記事は2026年10月13日時点の内容に基づく。

新しい記事が出たら、ブラウザの通知でお知らせします。

メールアドレスの登録は要りません。いつでも止められます。

AUTHOR

北海道のWEB屋

北海道を拠点に、Web業界14年・サポート実績1,000件以上。WordPressの復旧、サーバー移転、独自ドメインとメールの設定、PHP・JavaScriptの修正まで対応します。相談と見積もりは無料です。

SPONSORED

関連記事

RELATED