- Phát trực tuyến theo khối (kênh): phát ra các khối đã hoàn tất khi trợ lý viết. Đây là các tin nhắn kênh thông thường, không phải delta token.
- Phát trực tuyến bản xem trước (Telegram/Discord/Slack/Matrix/Mattermost/MS Teams): cập nhật một tin nhắn xem trước tạm thời trong khi tạo (gửi + chỉnh sửa/nối thêm).
Phát trực tuyến theo khối (tin nhắn kênh)
Phát trực tuyến theo khối gửi đầu ra của trợ lý thành các đoạn lớn khi chúng sẵn sàng.text_delta/events: các sự kiện luồng mô hình (có thể thưa đối với các mô hình không phát trực tuyến).chunker:EmbeddedBlockChunkeráp dụng giới hạn tối thiểu/tối đa + tùy chọn điểm ngắt.channel send: các tin nhắn gửi đi thực tế (phản hồi theo khối).
agents.defaults trừ khi có ghi chú):
streaming.chunkMode: "newline" chia tại các dòng trống (ranh giới đoạn văn),
không phải tại mọi ký tự xuống dòng, trước khi chuyển sang chia theo độ dài khi văn bản
vượt quá giới hạn.
Các kênh đi kèm biểu diễn những tùy chọn ghi đè này dưới dạng
channels.<id>.streaming.{chunkMode,block.enabled,block.coalesce}. Các dạng phẳng
*.chunkMode / *.blockStreaming / *.blockStreamingCoalesce là
dạng cũ trên mọi kênh đi kèm: openclaw doctor --fix di chuyển chúng sang
cấu trúc lồng nhau và các lược đồ kênh sẽ từ chối chúng. Cấu hình Plugin SDK bên ngoài
vẫn sử dụng các dạng phẳng tiếp tục hoạt động thông qua một cơ chế dự phòng đã lỗi thời
(kèm cảnh báo lúc chạy) cho đến đợt phát hành tiếp theo.
Ngữ nghĩa ranh giới cho blockStreamingBreak:
text_end: phát trực tuyến các khối ngay khi trình chia đoạn phát ra; xả tại mỗitext_end.message_end: chờ đến khi tin nhắn của trợ lý hoàn tất, sau đó xả đầu ra đã đệm. Vẫn sử dụng trình chia đoạn nếu văn bản đã đệm vượt quámaxChars, vì vậy có thể phát ra nhiều đoạn ở cuối.
Phân phối nội dung đa phương tiện với phát trực tuyến theo khối
Nội dung đa phương tiện phát trực tuyến phải sử dụng các trường tải trọng có cấu trúc nhưmediaUrl hoặc
mediaUrls; văn bản phát trực tuyến không được phân tích cú pháp như một lệnh đính kèm. Khi phát trực tuyến theo khối
gửi nội dung đa phương tiện sớm, OpenClaw ghi nhớ lần phân phối đó trong lượt này. Nếu
tải trọng cuối cùng của trợ lý lặp lại cùng URL nội dung đa phương tiện, lần phân phối cuối
sẽ loại bỏ nội dung đa phương tiện trùng lặp thay vì gửi lại tệp đính kèm.
Các tải trọng cuối cùng trùng khớp hoàn toàn sẽ bị loại bỏ. Nếu tải trọng cuối cùng thêm
văn bản riêng biệt xung quanh nội dung đa phương tiện đã được phát trực tuyến, OpenClaw vẫn gửi
văn bản mới trong khi chỉ phân phối nội dung đa phương tiện một lần. Điều này ngăn các ghi chú thoại
hoặc tệp bị trùng lặp trên các kênh như Telegram.
Thuật toán chia đoạn (giới hạn thấp/cao)
Việc chia đoạn theo 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 chia trước
maxChars; nếu bị buộc, chia tạimaxChars. - Chuỗi ưu tiên điểm ngắt:
paragraph->newline->sentence-> khoảng trắng -> ngắt cứng. - Hàng rào mã: không bao giờ chia bên trong hàng rào; khi buộc tại
maxChars, hãy đóng rồi mở lại hàng rào để giữ Markdown hợp lệ.
maxChars được giới hạn theo textChunkLimit của kênh, vì vậy không thể vượt quá
giới hạn của từng kênh.
Hợp nhất (gộp các khối được phát trực tuyến)
Khi phát trực tuyến theo khối được bật, OpenClaw có thể hợp nhất các đoạn khối liên tiếp trước khi gửi, giảm tình trạng tràn ngập tin nhắn một dòng trong khi vẫn cung cấp đầu ra tuần tự.- Việc hợp nhất chờ khoảng thời gian rảnh (
idleMs) trước khi xả. - Bộ đệm bị giới hạn bởi
maxCharsvà được xả nếu vượt quá giới hạn đó. minCharsngăn gửi các mảnh quá nhỏ cho đến khi tích lũy đủ văn bản (lần xả cuối luôn gửi phần văn bản còn lại).- Ký tự nối được suy ra từ
blockStreamingChunk.breakPreference:paragraph->\n\n,newline->\n,sentence-> khoảng trắng. - Có thể ghi đè theo kênh qua
*.streaming.block.coalesce(bao gồm cấu hình theo từng tài khoản). - Discord, Signal và Slack mặc định hợp nhất theo
{ minChars: 1500, idleMs: 1000 }trừ khi được ghi đè.
Nhịp nghỉ giống con người giữa các khối
Khi phát trực tuyến theo khối được bật, thêm một khoảng nghỉ ngẫu nhiên giữa các phản hồi theo khối, sau khối đầu tiên, để phản hồi nhiều bong bóng có cảm giác tự nhiên hơn.
Ghi đè theo từng tác tử qua
agents.list[].humanDelay. Chỉ áp dụng cho phản hồi theo
khối, không áp dụng cho phản hồi cuối cùng hoặc bản tóm tắt công cụ.
”Phát trực tuyến các đoạn hoặc toàn bộ”
- Phát trực tuyến các đoạn:
blockStreamingDefault: "on"+blockStreamingBreak: "text_end"(phát ra trong quá trình tạo). Các kênh không phải Telegram cũng cần*.streaming.block.enabled: true. - Phát trực tuyến 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 phát trực tuyến theo khối:
blockStreamingDefault: "off"(chỉ phản hồi cuối cùng).
*.streaming.block.enabled được đặt rõ ràng
thành true (ngoại lệ: QQ Bot không có các khóa streaming.block và phát trực tuyến
các phản hồi theo khối trừ khi channels.qqbot.streaming.mode là "off"). Các kênh có thể
phát trực tuyến bản xem trước trực tiếp (channels.<channel>.streaming.mode) mà không cần phản hồi
theo khối. Các giá trị mặc định blockStreaming* nằm dưới agents.defaults, không phải tại
gốc cấu hình.
Các chế độ phát trực tuyến bản xem trước
Khóa chuẩn:channels.<channel>.streaming ({ mode, ... } lồng nhau; các dạng
boolean/chuỗi cấp cao nhất cũ được openclaw doctor --fix viết lại).
streaming.mode: "block" là chế độ phát trực tuyến bản xem trước dành cho các
kênh hỗ trợ chỉnh sửa như Discord và Telegram; bản thân nó không bật cơ chế phân phối
theo khối của kênh tại đó. Sử dụng streaming.block.enabled cho phản hồi theo khối thông thường.
Microsoft Teams là
ngoại lệ: không có cơ chế vận chuyển khối bản xem trước nháp, vì vậy streaming.mode: "block" tắt hoàn toàn cơ chế phát trực tuyến gốc và phản hồi được gửi dưới dạng
phân phối theo khối thông thường thay vì phát trực tuyến từng phần/tiến trình gốc. Mattermost cũng
khác biệt: trong chế độ block, nó luân phiên bản xem trước giữa văn bản đã hoàn tất và
các khối hoạt động công cụ, vì vậy các khối trước đó vẫn hiển thị dưới dạng bài đăng riêng biệt
thay vì bị ghi đè trong một bản nháp có thể chỉnh sửa.
Ánh xạ kênh
Cấu hình đoạn xem trước (
streaming.preview.chunk.*, ví dụ: dưới
channels.discord.streaming hoặc channels.telegram.streaming) mặc định là
minChars: 200, maxChars: 800 (được giới hạn theo textChunkLimit của kênh) và
breakPreference: "paragraph".
Chỉ dành cho Slack:
channels.slack.streaming.nativeTransportbật/tắt các lệnh gọi API phát trực tuyến gốc của Slack (chat.startStream/chat.appendStream/chat.stopStream) khichannels.slack.streaming.mode="partial"(mặc định:true).- Phát trực tuyến gốc của Slack và trạng thái luồng trợ lý Slack yêu cầu một đích luồng phản hồi. Tin nhắn trực tiếp cấp cao nhất không hiển thị bản xem trước kiểu luồng đó, nhưng vẫn có thể sử dụng các bài đăng bản xem trước nháp và thao tác chỉnh sửa của Slack.
Di chuyển khóa cũ
Hành vi lúc chạy
Telegram
- Sử dụng các bản cập nhật bản xem trước
sendMessage+editMessageTexttrên các DM và nhóm/chủ đề; văn bản cuối cùng chỉnh sửa trực tiếp bản xem trước đang hoạt động. Các bản nháp “đang nhập” tạm thời trong 30 giây của Telegram (sendMessageDraft) không được dùng để truyền phát câu trả lời. - Các bản xem trước ban đầu ngắn vẫn được chống dội để tối ưu trải nghiệm thông báo đẩy, nhưng sẽ xuất hiện sau một khoảng trễ có giới hạn để các lượt chạy đang hoạt động không im lặng về mặt hiển thị.
- Các kết quả cuối dài tái sử dụng thông báo xem trước cho đoạn đầu tiên và chỉ gửi các đoạn còn lại.
- Chế độ
blockluân chuyển bản xem trước sang một thông báo mới tạistreaming.preview.chunk.maxChars(mặc định 800, giới hạn ở mức chỉnh sửa 4096 của Telegram); các chế độ khác mở rộng một bản xem trước lên đến 4096 ký tự. - Chế độ
progressgiữ tiến trình công cụ trong một bản nháp trạng thái có thể chỉnh sửa, hiển thị nhãn trạng thái khi truyền phát câu trả lời đang hoạt động nhưng chưa có dòng công cụ, xóa bản nháp khi hoàn tất và gửi câu trả lời cuối cùng qua cơ chế phân phối thông thường. - Nếu lần chỉnh sửa cuối không thành công trước khi văn bản hoàn chỉnh được xác nhận, OpenClaw sử dụng cơ chế phân phối kết quả cuối thông thường và dọn dẹp bản xem trước cũ.
- Truyền phát bản xem trước bị bỏ qua 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 nội dung suy luận vào một bản xem trước tạm thời sẽ bị xóa sau khi phân phối kết quả cuối.- Các phản hồi trích dẫn được chọn trên Telegram là một ngoại lệ: khi
replyToModekhông phải là"off"và có văn bản trích dẫn được chọn, OpenClaw bỏ qua luồng bản xem trước câu trả lời cho lượt đó (câu trả lời cuối cùng phải đi qua đường dẫn phản hồi trích dẫn gốc) nên các dòng xem trước tiến trình công cụ không thể hiển thị. Các phản hồi cho thông báo hiện tại không có văn bản trích dẫn được chọn vẫn giữ truyền phát bản xem trước. Xem tài liệu kênh Telegram để biết chi tiết.
Discord
- Sử dụng thao tác gửi + chỉnh sửa thông báo xem trước.
- Chế độ
blocksử dụng chia đoạn bản nháp (draftChunk). - Truyền phát bản xem trước bị bỏ qua khi truyền phát khối của Discord được bật rõ ràng.
- Chế độ
progressnối thêm một biên nhận hoạt động-#nhỏ (số lượt suy nghĩ/gọi công cụ và thời gian đã trôi qua) vào câu trả lời cuối cùng và xóa bản nháp trạng thái sau khi câu trả lời đó được phân phối, để các kênh bận rộn không giữ nhật ký công cụ mồ côi phía trên câu trả lời. Kết quả cuối có lỗi giữ lại bản nháp làm bản ghi của lượt thất bại. - Các payload phương tiện, lỗi và phản hồi rõ ràng ở kết quả cuối sẽ hủy các bản xem trước đang chờ mà không đẩy ra bản nháp mới, sau đó sử dụng cơ chế phân phối thông thường.
Slack
partialcó thể sử dụng truyền phát gốc của Slack (chat.startStream/append/stop) khi khả dụng.blocksử dụng các bản xem trước bản nháp theo kiểu nối thêm.progresssử dụng văn bản xem trước trạng thái, sau đó là câu trả lời cuối cùng.- Các DM cấp cao nhất không có luồng phản hồi sử dụng bài đăng bản nháp xem trước và thao tác chỉnh sửa thay vì truyền phát gốc của Slack.
- Truyền phát bản xem trước gốc và bản nháp ngă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 dẫn phân phối.
- Các payload phương tiện/lỗi cuối cùng và kết quả cuối tiến trình không tạo thông báo bản nháp dùng một lần; chỉ các kết quả cuối dạng văn bản/khối có thể chỉnh sửa bản xem trước mới đẩy văn bản bản nháp đang chờ.
Mattermost
- Ở chế độ
partial, truyền phát nội dung suy nghĩ và văn bản phản hồi từng phần vào một bài đăng bản nháp xem trước duy nhất, được hoàn tất tại chỗ khi câu trả lời cuối cùng có thể được gửi an toàn. - Ở chế độ
progress, truyền phát nội dung suy nghĩ và hoạt động công cụ vào một bản xem trước trạng thái duy nhất, được hoàn tất tại chỗ khi câu trả lời cuối cùng có thể được gửi an toàn. - Ở chế độ
block, luân chuyển giữa các bài đăng văn bản đã hoàn tất và hoạt động công cụ; các bản cập nhật công cụ song song và liên tiếp dùng chung bài đăng hoạt động công cụ hiện tại. - Chuyển sang gửi một bài đăng cuối mới nếu bài đăng xem trước đã bị xóa hoặc không khả dụng vì lý do khác tại thời điểm hoàn tất.
- Các payload phương tiện/lỗi cuối cùng hủy các bản cập nhật bản xem trước đang chờ trước khi phân phối thông thường thay vì đẩy ra một bài đăng xem trước tạm thời.
Matrix
- Các bản xem trước bản nháp được hoàn tất tại chỗ khi văn bản cuối có thể tái sử dụng sự kiện xem trước.
- Các kết quả cuối chỉ có phương tiện, có lỗi và không khớp đích phản hồi sẽ hủy các bản cập nhật bản 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ị che đi.
Các bản cập nhật 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 bản cập nhật tiến trình công cụ: những 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 báo xem trước khi các công cụ đang chạy, trước phản hồi cuối cùng. Trong chế độ máy chủ ứng dụng Codex, các thông báo phần mở đầu/bình luận của Codex sử dụng cùng đường dẫn xem trước này, vì vậy các ghi chú tiến trình ngắn “Tôi đang kiểm tra…” có thể được truyền phát vào bản nháp có thể chỉnh sửa mà không trở thành một phần của câu trả lời cuối cùng. Điều này giúp các lượt công cụ nhiều bước duy trì hiển thị hoạt động 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. Các công cụ chạy lâu có thể phát tiến trình được định kiểu trước khi trả về. Ví dụ,web_fetch kích hoạt bộ hẹn giờ năm giây khi bắt đầu: nếu thao tác tìm nạp vẫn
đang chờ, bản xem trước hiển thị Fetching page content...; nếu thao tác tìm nạp hoàn tất hoặc
bị hủy trước thời điểm đó, không có dòng tiến trình nào được phát. Kết quả công cụ cuối cùng sau đó
vẫn được phân phối bình thường cho mô hình.
Các bề mặt được hỗ trợ:
- Discord, Slack, Telegram và Matrix truyền phát tiến trình công cụ và các bản cập nhật phần mở đầu Codex vào thao tác chỉnh sửa bản xem trước trực tiếp theo mặc định khi truyền phát bản xem trước đang hoạt động. Microsoft Teams sử dụng luồng tiến trình gốc trong các cuộc trò chuyện cá nhân.
- Telegram đã phát hành với các bản cập nhật xem trước tiến trình công cụ được bật kể từ
v2026.4.22; việc tiếp tục bật chúng 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 trong các chế độ
partialvàprogress, hoặc một bài đăng hoạt động công cụ giữa các khối văn bản trong chế độblock(xem phía 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 báo. Trên Telegram,streaming.mode: "off"chỉ dành cho kết quả cuối: lời dẫn tiến trình chung cũng bị ngăn thay vì được phân phối dưới dạng các thông báo trạng thái độc lập, trong khi các 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ụ, hãy đặt
streaming.preview.toolProgressthànhfalsecho kênh đó (mặc địnhtrue). Để giữ các dòng tiến trình công cụ hiển thị trong khi ẩn văn bản lệnh/thực thi, hãy đặtstreaming.preview.commandTextthành"status"hoặcstreaming.progress.commandTextthành"status"; mặc định là"raw"để duy trì hành vi đã phát hành. Chính sách này được dùng chung bởi các kênh bản nháp/tiến trình sử dụng trình kết xuất tiến trình thu gọn của OpenClaw, bao gồm Discord, Matrix, Microsoft Teams, Mattermost, các bản xem trước bản nháp Slack và Telegram. Để tắt hoàn toàn thao tác chỉnh sửa bản xem trước, hãy đặtstreaming.modethànhoff.
Kết xuất bản nháp tiến trình
Các bản nháp chế độ tiến trình (streaming.progress.*) có giới hạn và có thể cấu hình theo từng
kênh:
Luồng tiến trình bình luận
Ngoài tiến trình công cụ, trình kết xuất tiến trình thu gọn có thể hiển thị thêm một luồng trong bản nháp:streaming.progress.commentary- kết xuất phần bình luận trước công cụ của mô hình (một lời dẫn ngắn “Tôi sẽ kiểm tra… rồi…”) xen kẽ với các dòng công cụ trong bản nháp tiến trình. Trên Discord và Telegram ở chế độ tiến trình, cùng phần mở đầu đó cung cấp tiêu đề trạng thái ngay cả khi luồng tùy chọn này bị tắt; các kênh khác giữ nguyên hành vi tiến trình hiện có. Xem Bản nháp tiến trình.
channels.discord, channels.matrix, channels.msteams,
channels.mattermost hoặc các bản xem trước bản nháp Slack. Đối với chế độ bản nháp tiến trình, hãy đặt
cùng chính sách trong streaming.progress:
Liên quan
- Tái cấu trúc vòng đời thông báo - thiết kế dùng chung mục tiêu cho bản xem trước, chỉnh sửa, truyền phát và hoàn tất
- Bản nháp tiến trình - các thông báo công việc đang tiến hành hiển thị và cập nhật trong các lượt dài
- Thông báo - vòng đời và phân phối thông báo
- 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