Messages and delivery
Akış ve parçalara ayırma
OpenClaw iki ayrı akış katmanına sahiptir:
- Blok akışı (kanallar): asistan yazarken tamamlanmış blokları yayar. Bunlar normal kanal iletileridir (token deltaları değildir).
- Önizleme akışı (Telegram/Discord/Slack): oluşturma sırasında geçici bir önizleme iletisini günceller.
Bugün kanal iletilerine yönelik gerçek token-delta akışı yoktur. Önizleme akışı ileti tabanlıdır (gönderme + düzenlemeler/eklemeler).
Blok akışı (kanal iletileri)
Blok akışı, asistan çıktısını kullanılabilir oldukça kaba parçalar halinde gönderir.
Model output
└─ text_delta/events
├─ (blockStreamingBreak=text_end)
│ └─ chunker emits blocks as buffer grows
└─ (blockStreamingBreak=message_end)
└─ chunker flushes at message_end
└─ channel send (block replies)
Lejant:
text_delta/events: model akış olayları (akışsız modeller için seyrek olabilir).chunker: min/maks sınırları + kırılma tercihi uygulayanEmbeddedBlockChunker.channel send: gerçek giden iletiler (blok yanıtları).
Kontroller:
agents.defaults.blockStreamingDefault:"on"/"off"(varsayılan kapalı).- Kanal geçersiz kılmaları: kanal başına
"on"/"off"zorlamak için*.blockStreaming(ve hesap başına değişkenler). agents.defaults.blockStreamingBreak:"text_end"veya"message_end".agents.defaults.blockStreamingChunk:{ minChars, maxChars, breakPreference? }.agents.defaults.blockStreamingCoalesce:{ minChars?, maxChars?, idleMs? }(göndermeden önce akışla gelen blokları birleştirir).- Kanal sabit üst sınırı:
*.textChunkLimit(örn.channels.whatsapp.textChunkLimit). - Kanal parça modu:
*.chunkMode(lengthvarsayılan,newlineuzunluğa göre parçalamadan önce boş satırlarda (paragraf sınırları) böler). - Discord esnek üst sınırı:
channels.discord.maxLinesPerMessage(varsayılan 17), UI kırpılmasını önlemek için uzun yanıtları böler.
Sınır semantiği:
text_end: chunker yayar yaymaz blokları akışla gönder; hertext_endüzerinde boşalt.message_end: asistan iletisi bitene kadar bekle, ardından arabelleğe alınmış çıktıyı boşalt.
Arabelleğe alınmış metin maxChars değerini aşarsa message_end yine de chunker kullanır; bu nedenle sonunda birden çok parça yayabilir.
Blok akışıyla medya teslimi
MEDIA: yönergeleri normal teslim metaverisidir. Blok akışı bir medya bloğunu erken gönderdiğinde, OpenClaw o tur için bu teslimi hatırlar. Son asistan yükü aynı medya URL'sini tekrarlarsa, son teslim eki yeniden göndermek yerine yinelenen medyayı çıkarır.
Tamamen yinelenen son yükler bastırılır. Son yük, zaten akışla gönderilmiş medyanın etrafına farklı metin eklerse, OpenClaw medyayı tek teslimli tutarken yeni metni yine de gönderir. Bu, bir ajan akış sırasında MEDIA: yaydığında ve sağlayıcı bunu tamamlanmış yanıta da dahil ettiğinde Telegram gibi kanallarda yinelenen ses notlarını veya dosyaları önler.
Parçalama algoritması (alt/üst sınırlar)
Blok parçalama EmbeddedBlockChunker tarafından uygulanır:
- Alt sınır: arabellek >=
minCharsolana kadar yayma (zorlanmadıkça). - Üst sınır:
maxCharsöncesinde bölmeyi tercih et; zorlanırsamaxCharskonumunda böl. - Kırılma tercihi:
paragraph→newline→sentence→whitespace→ sert kırılma. - Kod çitleri: çitlerin içinde asla bölme;
maxCharskonumunda zorla bölündüğünde Markdown geçerli kalsın diye çiti kapat + yeniden aç.
maxChars, kanal textChunkLimit değerine sıkıştırılır; bu yüzden kanal başına üst sınırları aşamazsınız.
Birleştirme (akışla gelen blokları birleştir)
Blok akışı etkinleştirildiğinde OpenClaw, dışarı göndermeden önce ardışık blok parçalarını birleştirebilir. Bu, ilerlemeli çıktı sağlamaya devam ederken "tek satırlık spam"i azaltır.
- Birleştirme, boşaltmadan önce boşta kalma aralıklarını (
idleMs) bekler. - Arabellekler
maxCharsile sınırlandırılır ve bunu aşarsa boşaltılır. minChars, yeterli metin birikene kadar küçük parçaların gönderilmesini engeller (son boşaltma kalan metni her zaman gönderir).- Birleştirici
blockStreamingChunk.breakPreferencedeğerinden türetilir (paragraph→\n\n,newline→\n,sentence→ boşluk). - Kanal geçersiz kılmaları
*.blockStreamingCoalesceüzerinden kullanılabilir (hesap başına yapılandırmalar dahil). - Varsayılan birleştirme
minCharsdeğeri, geçersiz kılınmadıkça Signal/Slack/Discord için 1500'e yükseltilir.
Bloklar arasında insan benzeri tempo
Blok akışı etkinleştirildiğinde, blok yanıtları arasına (ilk bloktan sonra) rastgeleleştirilmiş bir duraklama ekleyebilirsiniz. Bu, çok baloncuklu yanıtların daha doğal hissettirmesini sağlar.
- Yapılandırma:
agents.defaults.humanDelay(ajan başınaagents.list[].humanDelayile geçersiz kılın). - Modlar:
off(varsayılan),natural(800-2500 ms),custom(minMs/maxMs). - Yalnızca blok yanıtlarına uygulanır; son yanıtlara veya araç özetlerine uygulanmaz.
"Parçaları veya her şeyi akışla gönder"
Bu şuna karşılık gelir:
- Parçaları akışla gönder:
blockStreamingDefault: "on"+blockStreamingBreak: "text_end"(ilerledikçe yay). Telegram dışı kanalların ayrıca*.blockStreaming: trueayarına ihtiyacı vardır. - Her şeyi sonda akışla gönder:
blockStreamingBreak: "message_end"(bir kez boşalt, çok uzunsa muhtemelen birden çok parça). - Blok akışı yok:
blockStreamingDefault: "off"(yalnızca son yanıt).
Kanal notu: *.blockStreaming açıkça true olarak ayarlanmadıkça blok akışı kapalıdır. Kanallar, blok yanıtları olmadan canlı önizleme akışı (channels.<channel>.streaming) yapabilir.
Yapılandırma konumu hatırlatması: blockStreaming* varsayılanları kök yapılandırmada değil, agents.defaults altında bulunur.
Önizleme akışı modları
Standart anahtar: channels.<channel>.streaming
Modlar:
off: önizleme akışını devre dışı bırakır.partial: en son metinle değiştirilen tek önizleme.block: parçalı/eklemeli adımlarla önizleme güncellemeleri.progress: oluşturma sırasında ilerleme/durum önizlemesi, tamamlandığında son yanıt.
streaming.mode: "block", Discord ve Telegram gibi düzenleme destekli kanallar için bir önizleme akışı modudur. Orada kanal blok teslimini etkinleştirmez. Normal blok yanıtları istediğinizde streaming.block.enabled veya eski blockStreaming kanal anahtarını kullanın. Microsoft Teams istisnadır: taslak önizleme blok taşıması yoktur, bu yüzden streaming.mode: "block" yerel kısmi/ilerleme akışı yerine Teams blok teslimine eşlenir.
Kanal eşlemesi
| Kanal | off |
partial |
block |
progress |
|---|---|---|---|---|
| Telegram | ✅ | ✅ | ✅ | düzenlenebilir ilerleme taslağı |
| Discord | ✅ | ✅ | ✅ | düzenlenebilir ilerleme taslağı |
| Slack | ✅ | ✅ | ✅ | ✅ |
| Mattermost | ✅ | ✅ | ✅ | ✅ |
| MS Teams | ✅ | ✅ | ✅ | yerel ilerleme akışı |
Yalnızca Slack:
channels.slack.streaming.nativeTransport,channels.slack.streaming.mode="partial"olduğunda Slack yerel akış API çağrılarını açıp kapatır (varsayılan:true).- Slack yerel akışı ve Slack asistan konu durumu bir yanıt konusu hedefi gerektirir. Üst düzey DM'ler bu konu tarzı önizlemeyi göstermez, ancak Slack taslak önizleme gönderilerini ve düzenlemelerini yine de kullanabilir.
Eski anahtar geçişi:
- Telegram: eski
streamModeve skaler/booleanstreamingdeğerleri doctor/yapılandırma uyumluluk yolları tarafından algılanır vestreaming.modedeğerine taşınır. - Discord:
streamMode+ booleanstreaming,streamingenum'u için çalışma zamanı takma adları olarak kalır; kalıcı yapılandırmayı yeniden yazmak içinopenclaw doctor --fixçalıştırın. - Slack:
streamMode,streaming.modeiçin çalışma zamanı takma adı olarak kalır; booleanstreaming,streaming.modeartıstreaming.nativeTransportiçin çalışma zamanı takma adı olarak kalır; eskinativeStreaming,streaming.nativeTransportiçin çalışma zamanı takma adı olarak kalır. Kalıcı yapılandırmayı yeniden yazmak içinopenclaw doctor --fixçalıştırın.
Çalışma zamanı davranışı
Telegram:
- DM'ler ve grup/konular genelinde
sendMessage+editMessageTextönizleme güncellemelerini kullanır. - Son metin etkin önizlemeyi yerinde düzenler; uzun son yanıtlar ilk parça için bu iletiyi yeniden kullanır ve yalnızca kalan parçaları gönderir.
progressmodu araç ilerlemesini düzenlenebilir bir durum taslağında tutar, tamamlandığında bu taslağı temizler ve son yanıtı normal teslim üzerinden gönderir.- Tamamlanmış metin doğrulanmadan önce son düzenleme başarısız olursa, OpenClaw normal son teslimi kullanır ve bayat önizlemeyi temizler.
- Telegram blok akışı açıkça etkinleştirildiğinde önizleme akışı atlanır (çifte akışı önlemek için).
/reasoning stream, son teslimden sonra silinen geçici bir önizlemeye akıl yürütme yazabilir.
Discord:
- Gönderme + düzenleme önizleme iletileri kullanır.
blockmodu taslak parçalamayı (draftChunk) kullanır.- Discord blok akışı açıkça etkinleştirildiğinde önizleme akışı atlanır.
- Son medya, hata ve açık yanıt yükleri bekleyen önizlemeleri yeni bir taslak boşaltmadan iptal eder, ardından normal teslimi kullanır.
Slack:
partial, kullanılabilir olduğunda Slack yerel akışını (chat.startStream/append/stop) kullanabilir.block, ekleme tarzı taslak önizlemeleri kullanır.progress, durum önizleme metnini, ardından son yanıtı kullanır.- Yanıt konusu olmayan üst düzey DM'ler, Slack yerel akışı yerine taslak önizleme gönderilerini ve düzenlemelerini kullanır.
- Yerel ve taslak önizleme akışı o tur için blok yanıtlarını bastırır; böylece bir Slack yanıtı yalnızca tek bir teslim yolu tarafından akışla gönderilir.
- Son medya/hata yükleri ve ilerleme sonları geçici taslak iletileri oluşturmaz; yalnızca önizlemeyi düzenleyebilen metin/blok sonları bekleyen taslak metni boşaltır.
Mattermost:
- Düşünmeyi, araç etkinliğini ve kısmi yanıt metnini, son yanıt güvenle gönderilebilir olduğunda yerinde sonlanan tek bir taslak önizleme gönderisine akışla gönderir.
- Önizleme gönderisi silinmişse veya sonlandırma zamanında başka şekilde kullanılamıyorsa yeni bir son gönderi göndermeye geri döner.
- Son medya/hata yükleri, geçici bir önizleme gönderisi boşaltmak yerine normal teslimden önce bekleyen önizleme güncellemelerini iptal eder.
Matrix:
- Son metin önizleme olayını yeniden kullanabildiğinde taslak önizlemeler yerinde sonlandırılır.
- Yalnızca medya, hata ve yanıt-hedefi-uyumsuzluğu sonları normal teslimden önce bekleyen önizleme güncellemelerini iptal eder; zaten görünür olan bayat önizleme sansürlenir.
Araç ilerlemesi önizleme güncellemeleri
Önizleme akışı, araçlar çalışırken aynı önizleme iletisinde görünen ve son yanıttan önce gelen "web'de aranıyor", "dosya okunuyor" veya "araç çağrılıyor" gibi kısa durum satırları olan araç ilerlemesi güncellemelerini de içerebilir. Bu, çok adımlı araç turlarını ilk düşünme önizlemesi ile son yanıt arasında sessiz bırakmak yerine görsel olarak canlı tutar.
Desteklenen yüzeyler:
- Discord, Slack, Telegram ve Matrix, önizleme akışı etkin olduğunda varsayılan olarak araç ilerlemesini canlı önizleme düzenlemesine aktarır. Microsoft Teams kişisel sohbetlerde kendi yerel ilerleme akışını kullanır.
- Telegram, araç ilerlemesi önizleme güncellemeleri etkin olarak
v2026.4.22sürümünden beri gönderildi; bunları etkin tutmak yayımlanan bu davranışı korur. - Mattermost araç etkinliğini zaten tek taslak önizleme gönderisine katlar (yukarıya bakın).
- Araç ilerlemesi düzenlemeleri etkin önizleme akışı modunu izler; önizleme akışı
offolduğunda veya blok akışı mesajı devraldığında atlanırlar. Telegram’dastreaming.mode: "off"yalnızca finaldir: genel ilerleme konuşmaları bağımsız durum mesajları olarak iletilmek yerine bastırılır; onay istemleri, medya yükleri ve hatalar ise normal şekilde yönlendirilir. - Önizleme akışını koruyup araç ilerlemesi satırlarını gizlemek için o kanal için
streaming.preview.toolProgressdeğerinifalseolarak ayarlayın. Komut/yürütme metnini gizlerken araç ilerlemesi satırlarını görünür tutmak içinstreaming.preview.commandTextdeğerini"status"veyastreaming.progress.commandTextdeğerini"status"olarak ayarlayın; varsayılan değer, yayımlanan davranışı korumak için"raw"değeridir. Bu politika, Discord, Matrix, Microsoft Teams, Mattermost, Slack taslak önizlemeleri ve Telegram dahil olmak üzere OpenClaw’ın kompakt ilerleme oluşturucusunu kullanan taslak/ilerleme kanalları tarafından paylaşılır. Önizleme düzenlemelerini tamamen devre dışı bırakmak içinstreaming.modedeğerinioffolarak ayarlayın. - Telegram seçili alıntı yanıtları bir istisnadır:
replyToMode"off"değilse ve seçili alıntı metni varsa, OpenClaw bu tur için yanıt önizleme akışını atlar; bu nedenle araç ilerlemesi önizleme satırları işlenemez. Seçili alıntı metni olmayan geçerli mesaj yanıtları ise önizleme akışını korur. Ayrıntılar için Telegram kanal belgelerine bakın.
İlerleme satırlarını görünür tutup ham komut/yürütme metnini gizleyin:
{
"channels": {
"telegram": {
"streaming": {
"mode": "partial",
"preview": {
"toolProgress": true,
"commandText": "status"
}
}
}
}
}
Aynı yapıyı başka bir kompakt ilerleme kanalı anahtarı altında kullanın; örneğin channels.discord, channels.matrix, channels.msteams, channels.mattermost veya Slack taslak önizlemeleri. İlerleme taslağı modu için aynı politikayı streaming.progress altına koyun:
{
"channels": {
"telegram": {
"streaming": {
"mode": "progress",
"progress": {
"toolProgress": true,
"commandText": "status"
}
}
}
}
}
İlgili
- Mesaj yaşam döngüsü yeniden düzenlemesi - paylaşılan önizleme, düzenleme, akış ve sonlandırma tasarımını hedefler
- İlerleme taslakları - uzun turlar sırasında güncellenen görünür devam eden çalışma mesajları
- Mesajlar - mesaj yaşam döngüsü ve teslim
- Yeniden deneme - teslim hatasında yeniden deneme davranışı
- Kanallar - kanal başına akış desteği