OpenClawSkills
GitHub
コア概念 • 5分で読める

ストリーミング応答

reply streaming / block streaming / chunking / Telegram draft streaming の違い。

OpenClawの「ストリーミング」には、混同しやすい3層のメカニズムが含まれています:

1. LLM token streaming:モデルがトークンごとにテキストを返します(内部実装の詳細)。

2. Block streaming:完成したテキストブロックをチャネルに事前に配信します(ユーザーは複数/複数回の更新を確認できます)。

3. Chunking:チャネルの文字制限に基づいて1つの返信を複数のメッセージに分割します(ストリーミングとは独立)。

Tutorial.step

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'':配信をより「人間らしく」見せます。

Tutorial.step

Chunking(チャネル制限による分割)

chunkingは配信前に行われる「ハード分割」です:

- Telegram / WhatsAppはデフォルトで約4000文字

- Discordは2000文字 + 行数制限

- Slackは4000文字

Configure:

- ''channels.<channel>.textChunkLimit''

- ''channels.<channel>.chunkMode''(''length'' または ''newline'')

chunkingはfenced code blockの分割を避けようとしますが、極端な場合でも分割が必要になる場合があります。

Tutorial.step

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が無効になります)。

Tutorial.step

ストリーミングが確認できない理由

一般的な理由:

- ''agents.defaults.blockStreamingDefault'' がまだ ''off'' である

- ''blockStreamingDefault'' を設定しただけですが、チャネルで ''channels.<channel>.blockStreaming: true'' を有効にしていない

- ''blockStreamingCoalesce'' がブロックをマージしたため、一度に送信されたように見える

- モデルが大きなブロックを一度に出力した(flushポイントがない)

- Telegramのdraft streamingが有効(「同じメッセージ更新」のように見える、複数ではない)

Tutorial.step

実用的な推奨事項

- 公開グループチャットではblock streamingを有効にする際は慎重(画面がフラッディングするため)、より大きな ''minChars'' またはより強力なcoalesceを優先してください。

- プライベートチャットではblock streamingのエクスペリエンスが最良です。

- チャネルがreply threadingをサポートしている場合、block streamingの複数メッセージはより「散らばる」になります。''replyToMode'' とチャネルポリシーを使用してスレッド化を最適化できます。