OpenClaw có hai lớp truyền phát riêng biệt:Documentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
- Truyền phát khối (kênh): phát ra các khối hoàn chỉnh khi assistant đang viết. Đây là các thông điệp kênh thông thường (không phải token delta).
- Truyền phát bản xem trước (Telegram/Discord/Slack): cập nhật một thông điệp xem trước tạm thời trong khi tạo nội dung.
Truyền phát khối (thông điệp kênh)
Truyền phát khối gửi đầu ra của assistant theo các đoạn lớn khi chúng sẵn sàng.text_delta/events: sự kiện luồng mô hình (có thể thưa thớt với các mô hình không truyền phát).chunker:EmbeddedBlockChunkeráp dụng giới hạn tối thiểu/tối đa + ưu tiên điểm ngắt.channel send: thông điệp gửi đi thực tế (phản hồi khối).
agents.defaults.blockStreamingDefault:"on"/"off"(mặc định tắt).- Ghi đè theo kênh:
*.blockStreaming(và các biến thể theo tài khoản) để buộc"on"/"off"cho từng kênh. agents.defaults.blockStreamingBreak:"text_end"hoặc"message_end".agents.defaults.blockStreamingChunk:{ minChars, maxChars, breakPreference? }.agents.defaults.blockStreamingCoalesce:{ minChars?, maxChars?, idleMs? }(gộp các khối đã truyền phát trước khi gửi).- Giới hạn cứng theo kênh:
*.textChunkLimit(ví dụ:channels.whatsapp.textChunkLimit). - Chế độ chia đoạn của kênh:
*.chunkMode(lengthlà mặc định,newlinetách theo dòng trống (ranh giới đoạn văn) trước khi chia theo độ dài). - Giới hạn mềm của Discord:
channels.discord.maxLinesPerMessage(mặc định 17) tách các phản hồi cao để tránh bị cắt trong UI.
text_end: truyền phát khối ngay khi chunker phát ra; xả ở mỗitext_end.message_end: đợi đến khi thông điệp assistant hoàn tất, rồi xả đầu ra đã đệm.
message_end vẫn dùng chunker nếu văn bản đã đệm vượt quá maxChars, nên nó có thể phát ra nhiều đoạn ở cuối.
Phân phối phương tiện với truyền phát khối
Chỉ thịMEDIA: là siêu dữ liệu phân phối thông thường. Khi truyền phát khối gửi sớm một khối phương tiện, OpenClaw ghi nhớ lần phân phối đó cho lượt này. Nếu payload assistant cuối cùng lặp lại cùng URL phương tiện, lần phân phối cuối sẽ loại bỏ phương tiện trùng lặp thay vì gửi lại tệp đính kèm.
Các payload cuối cùng trùng khớp chính xác sẽ bị chặn. Nếu payload cuối cùng thêm văn bản riêng biệt quanh phương tiện đã được truyền phát, OpenClaw vẫn gửi văn bản mới trong khi giữ phương tiện chỉ được phân phối một lần. Điều này ngăn ghi chú thoại hoặc tệp bị trùng lặp trên các kênh như Telegram khi agent phát ra MEDIA: trong lúc truyền phát và provider cũng đưa nó vào phản hồi hoàn tất.
Thuật toán chia đoạn (giới hạn thấp/cao)
Việc chia đoạn khối được triển khai bởiEmbeddedBlockChunker:
- Giới hạn thấp: không phát ra cho đến khi bộ đệm >=
minChars(trừ khi bị buộc). - Giới hạn cao: ưu tiên tách trước
maxChars; nếu bị buộc, tách tạimaxChars. - Ưu tiên điểm ngắt:
paragraph→newline→sentence→whitespace→ ngắt cứng. - Hàng rào mã: không bao giờ tách bên trong hàng rào; khi bị buộc tại
maxChars, đóng + mở lại hàng rào để giữ Markdown hợp lệ.
maxChars bị giới hạn theo textChunkLimit của kênh, nên bạn không thể vượt quá giới hạn của từng kênh.
Gộp (hợp nhất các khối đã truyền phát)
Khi truyền phát khối được bật, OpenClaw có thể gộp các đoạn khối liên tiếp trước khi gửi chúng ra ngoài. Điều này giảm “spam một dòng” trong khi vẫn cung cấp đầu ra tăng dần.- Gộp sẽ chờ khoảng nghỉ không hoạt động (
idleMs) trước khi xả. - Bộ đệm bị giới hạn bởi
maxCharsvà sẽ xả nếu vượt quá giới hạn đó. minCharsngăn các mảnh quá nhỏ được gửi cho đến khi tích lũy đủ văn bản (lần xả cuối luôn gửi văn bản còn lại).- Bộ nối được suy ra từ
blockStreamingChunk.breakPreference(paragraph→\n\n,newline→\n,sentence→ dấu cách). - Ghi đè theo kênh có sẵn qua
*.blockStreamingCoalesce(bao gồm cấu hình theo tài khoản). minCharsgộp mặc định được tăng lên 1500 cho Signal/Slack/Discord trừ khi bị ghi đè.
Nhịp độ giống con người giữa các khối
Khi truyền phát khối được bật, bạn có thể thêm một khoảng tạm dừng ngẫu nhiên giữa các phản hồi khối (sau khối đầu tiên). Điều này làm cho các phản hồi nhiều bong bóng có cảm giác tự nhiên hơn.- Cấu hình:
agents.defaults.humanDelay(ghi đè theo agent quaagents.list[].humanDelay). - Chế độ:
off(mặc định),natural(800–2500ms),custom(minMs/maxMs). - Chỉ áp dụng cho phản hồi khối, không áp dụng cho phản hồi cuối cùng hoặc tóm tắt công cụ.
”Truyền phát từng đoạn hoặc toàn bộ”
Điều này ánh xạ thành:- Truyền phát từng đoạn:
blockStreamingDefault: "on"+blockStreamingBreak: "text_end"(phát ra khi đang tạo). Các kênh không phải Telegram cũng cần*.blockStreaming: true. - Truyền phát toàn bộ ở cuối:
blockStreamingBreak: "message_end"(xả một lần, có thể thành nhiều đoạn nếu rất dài). - Không truyền phát khối:
blockStreamingDefault: "off"(chỉ phản hồi cuối cùng).
*.blockStreaming được đặt rõ ràng thành true. Các kênh có thể truyền phát bản xem trước trực tiếp (channels.<channel>.streaming) mà không có phản hồi khối.
Nhắc lại vị trí cấu hình: các mặc định blockStreaming* nằm dưới agents.defaults, không phải cấu hình gốc.
Chế độ truyền phát bản xem trước
Khóa chuẩn:channels.<channel>.streaming
Chế độ:
off: tắt truyền phát bản xem trước.partial: một bản xem trước duy nhất được thay thế bằng văn bản mới nhất.block: bản xem trước cập nhật theo các bước được chia đoạn/nối thêm.progress: bản xem trước tiến trình/trạng thái trong khi tạo, câu trả lời cuối cùng khi hoàn tất.
Ánh xạ kênh
| Kênh | off | partial | block | progress |
|---|---|---|---|---|
| Telegram | ✅ | ✅ | ✅ | ánh xạ tới partial |
| Discord | ✅ | ✅ | ✅ | ánh xạ tới partial |
| Slack | ✅ | ✅ | ✅ | ✅ |
| Mattermost | ✅ | ✅ | ✅ | ✅ |
channels.slack.streaming.nativeTransportbật/tắt các lệnh gọi API truyền phát gốc của Slack khichannels.slack.streaming.mode="partial"(mặc định:true).- Truyền phát gốc của Slack và trạng thái luồng assistant của Slack yêu cầu mục tiêu luồng phản hồi; DM cấp cao nhất không hiển thị bản xem trước kiểu luồng đó.
- Telegram:
streamModecũ và các giá trịstreamingdạng vô hướng/boolean được phát hiện và di chuyển bởi các đường dẫn tương thích doctor/cấu hình sangstreaming.mode. - Discord:
streamMode+ booleanstreamingtự động di chuyển sang enumstreaming. - Slack:
streamModetự động di chuyển sangstreaming.mode; booleanstreamingtự động di chuyển sangstreaming.modecộng vớistreaming.nativeTransport;nativeStreamingcũ tự động di chuyển sangstreaming.nativeTransport.
Hành vi runtime
Telegram:- Dùng các cập nhật bản xem trước
sendMessage+editMessageTexttrên DM và nhóm/chủ đề. - Gửi thông điệp cuối cùng mới thay vì chỉnh sửa tại chỗ khi bản xem trước đã hiển thị khoảng một phút, rồi dọn bản xem trước để dấu thời gian của Telegram phản ánh thời điểm hoàn tất phản hồi.
- Bỏ qua truyền phát bản xem trước khi truyền phát khối của Telegram được bật rõ ràng (để tránh truyền phát kép).
/reasoning streamcó thể ghi lập luận vào bản xem trước.
- Dùng gửi + chỉnh sửa thông điệp xem trước.
- Chế độ
blockdùng chia đoạn bản nháp (draftChunk). - Bỏ qua truyền phát bản xem trước khi truyền phát khối của Discord được bật rõ ràng.
- Phương tiện cuối cùng, lỗi và payload phản hồi rõ ràng sẽ hủy các bản xem trước đang chờ mà không xả bản nháp mới, rồi dùng phân phối thông thường.
partialcó thể dùng truyền phát gốc của Slack (chat.startStream/append/stop) khi có sẵn.blockdùng bản xem trước bản nháp kiểu nối thêm.progressdùng văn bản xem trước trạng thái, rồi câu trả lời cuối cùng.- Truyền phát bản xem trước gốc và bản nháp sẽ chặn phản hồi khối cho lượt đó, để một phản hồi Slack chỉ được truyền phát qua một đường phân phối.
- Payload phương tiện/lỗi cuối cùng và kết thúc tiến trình không tạo thông điệp bản nháp dùng một lần; chỉ các kết thúc văn bản/khối có thể chỉnh sửa bản xem trước mới xả văn bản bản nháp đang chờ.
- Truyền phát suy nghĩ, hoạt động công cụ và văn bản phản hồi từng phần vào một bài đăng xem trước bản nháp duy nhất, hoàn tất tại chỗ khi câu trả lời cuối cùng an toàn để gửi.
- Quay về gửi một bài đăng cuối cùng mới nếu bài đăng xem trước đã bị xóa hoặc không khả dụng khi hoàn tất.
- Payload phương tiện/lỗi cuối cùng hủy các cập nhật xem trước đang chờ trước khi phân phối thông thường, thay vì xả một bài đăng xem trước tạm thời.
- Bản xem trước bản nháp hoàn tất tại chỗ khi văn bản cuối cùng có thể tái sử dụng sự kiện xem trước.
- Các kết thúc chỉ có phương tiện, lỗi và không khớp mục tiêu phản hồi sẽ hủy các cập nhật xem trước đang chờ trước khi phân phối thông thường; bản xem trước cũ đã hiển thị sẽ bị biên tập xóa.
Cập nhật bản xem trước tiến trình công cụ
Truyền phát bản xem trước cũng có thể bao gồm các cập nhật tiến trình công cụ — các dòng trạng thái ngắn như “đang tìm kiếm trên web”, “đang đọc tệp” hoặc “đang gọi công cụ” — xuất hiện trong cùng thông điệp xem trước khi công cụ đang chạy, trước phản hồi cuối cùng. Điều này giữ cho các lượt công cụ nhiều bước có chuyển động trực quan thay vì im lặng giữa bản xem trước suy nghĩ đầu tiên và câu trả lời cuối cùng. Bề mặt được hỗ trợ:- Discord, Slack, Telegram và Matrix mặc định truyền phát tiến trình công cụ vào chỉnh sửa bản xem trước trực tiếp khi truyền phát bản xem trước đang hoạt động.
- Telegram đã phát hành với cập nhật bản xem trước tiến trình công cụ được bật kể từ
v2026.4.22; giữ chúng được bật sẽ duy trì hành vi đã phát hành đó. - Mattermost đã gộp hoạt động công cụ vào một bài đăng xem trước bản nháp duy nhất của nó (xem ở trên).
- Các chỉnh sửa tiến trình công cụ tuân theo chế độ truyền phát bản xem trước đang hoạt động; chúng bị bỏ qua khi truyền phát bản xem trước là
offhoặc khi truyền phát khối đã tiếp quản thông điệp. Trên Telegram,streaming.mode: "off"là chỉ-final: cuộc trao đổi tiến trình chung cũng bị chặn thay vì được phân phối dưới dạng các thông điệp “Working…” độc lập, trong khi lời nhắc phê duyệt, payload phương tiện và lỗi vẫn được định tuyến bình thường. - Để giữ truyền phát bản xem trước nhưng ẩn các dòng tiến trình công cụ, đặt
streaming.preview.toolProgressthànhfalsecho kênh đó. Để tắt hoàn toàn chỉnh sửa bản xem trước, đặtstreaming.modethànhoff.
Liên quan
- Thông điệp — vòng đời và phân phối thông điệp
- Thử lại — hành vi thử lại khi phân phối thất bại
- Kênh — hỗ trợ truyền phát theo từng kênh