ストリーミング応答
reply streaming / block streaming / chunking / Telegram draft streaming の違い。
OpenClawの「ストリーミング」には、混同しやすい3層のメカニズムが含まれています:
1. LLM token streaming:モデルがトークンごとにテキストを返します(内部実装の詳細)。
2. Block streaming:完成したテキストブロックをチャネルに事前に配信します(ユーザーは複数/複数回の更新を確認できます)。
3. Chunking:チャネルの文字制限に基づいて1つの返信を複数のメッセージに分割します(ストリーミングとは独立)。
Block streaming(ブロックごとの配信)
block streamingの目標:モデルが完全に終了する前に、ユーザーに「部分的に完成した段落」を先に見せ、段落の境界をできるだけ自然に保つこと。
スイッチ:
- グローバルデフォルト:''agents.defaults.blockStreamingDefault: "on"''
- チャネルオーバーライド:ほとんどのチャネルでは明示的な ''channels.<channel>.blockStreaming: true'' が必要
- Telegramは例外:draft streamingもあります(以下を参照)。
調整パラメータ:
- ''agents.defaults.blockStreamingBreak'':いつflushするか(例:''text_end'')。
- ''agents.defaults.blockStreamingChunk'':''minChars''、''maxChars''、''breakPreference''。
- ''agents.defaults.blockStreamingCoalesce'':過度に密集した小さなブロックをマージして、画面のフラッディングを減らします。
- ''agents.defaults.humanDelay'':配信をより「人間らしく」見せます。
Chunking(チャネル制限による分割)
chunkingは配信前に行われる「ハード分割」です:
- Telegram / WhatsAppはデフォルトで約4000文字
- Discordは2000文字 + 行数制限
- Slackは4000文字
Configure:
- ''channels.<channel>.textChunkLimit''
- ''channels.<channel>.chunkMode''(''length'' または ''newline'')
chunkingはfenced code blockの分割を避けようとしますが、極端な場合でも分割が必要になる場合があります。
Telegram draft streaming(下書きバブル)
Telegramはプライベートチャットのtopics/threadで、draftモードを使用して「同じメッセージを更新」することをサポートしています。OpenClawは ''channels.telegram.streamMode'' 経由で制御します:
- ''"off"'':draft streamingを無効にし、block streamingを許可(複数メッセージ)
- ''"partial"''(デフォルト):プライベートチャットのtopicsでdraft更新を使用(ユーザーは1つのメッセージが継続的に成長するのを確認できます)
- ''"block"'':block streamingのブロックをdraftに書き込み(複数メッセージを減らす)
Note:
- Telegramプライベートチャット + topics/threadのみでサポートされています。
- draft streamingとblock streamingは相互排他です(有効な場合はblock streamingが無効になります)。
ストリーミングが確認できない理由
一般的な理由:
- ''agents.defaults.blockStreamingDefault'' がまだ ''off'' である
- ''blockStreamingDefault'' を設定しただけですが、チャネルで ''channels.<channel>.blockStreaming: true'' を有効にしていない
- ''blockStreamingCoalesce'' がブロックをマージしたため、一度に送信されたように見える
- モデルが大きなブロックを一度に出力した(flushポイントがない)
- Telegramのdraft streamingが有効(「同じメッセージ更新」のように見える、複数ではない)
実用的な推奨事項
- 公開グループチャットではblock streamingを有効にする際は慎重(画面がフラッディングするため)、より大きな ''minChars'' またはより強力なcoalesceを優先してください。
- プライベートチャットではblock streamingのエクスペリエンスが最良です。
- チャネルがreply threadingをサポートしている場合、block streamingの複数メッセージはより「散らばる」になります。''replyToMode'' とチャネルポリシーを使用してスレッド化を最適化できます。