Messages and delivery

Черновики прогресса

Черновики прогресса помогают длительным ходам агента выглядеть живыми в чате, не превращая разговор в стопку временных ответов со статусом.

Когда черновики прогресса включены, OpenClaw создает одно видимое сообщение о работе в процессе только после того, как ход подтверждает, что выполняет настоящую работу, обновляет его, пока агент читает, планирует, вызывает инструменты или ждет одобрения, а затем превращает этот черновик в финальный ответ, когда канал может сделать это безопасно.

text
Shelling...📖 from docs/concepts/progress-drafts.md🔎 Web Search: for "discord edit message"🛠️ Bash: run tests

Используйте черновики прогресса, когда вам нужно одно аккуратное сообщение о статусе во время работы с большим числом инструментов и финальный ответ после завершения хода.

Быстрый старт

Включите черновики прогресса для канала с помощью streaming.mode: "progress":

json5
{  channels: {    discord: {      streaming: {        mode: "progress",      },    },  },}

Обычно этого достаточно. OpenClaw выберет автоматическую метку из одного слова, подождет, пока работа продлится не менее пяти секунд или выдаст второе рабочее событие, добавит компактные строки прогресса, пока выполняется полезная работа, и подавит дублирующую отдельную болтовню о прогрессе для этого хода.

Что видят пользователи

Черновик прогресса состоит из двух частей:

Часть Назначение
Метка Короткая начальная строка или строка статуса, например Working или Shelling.
Строки прогресса Компактные обновления запуска с теми же значками инструментов и форматтером деталей, что и подробный вывод.

Метка появляется после того, как агент начинает осмысленную работу и либо остается занятым пять секунд, либо выдает второе рабочее событие. Она является частью прокручиваемого списка строк прогресса, поэтому начальный статус уходит из видимой области, когда появляется достаточно конкретной работы. Ответы только в виде простого текста не показывают черновик прогресса. Строки прогресса добавляются только тогда, когда агент выдает полезные рабочие обновления, например 🛠️ Bash: run tests, 🔎 Web Search: for "discord edit message" или ✍️ Write: to /tmp/file. По умолчанию они используют тот же компактный режим объяснения, что и /verbose; задайте agents.defaults.toolProgressDetail: "raw" при отладке, если также хотите добавлять исходные команды и детали. Финальный ответ заменяет черновик, когда это возможно; иначе OpenClaw отправляет финальный ответ обычным способом и очищает черновик или прекращает его обновлять в соответствии с транспортом канала.

Выберите режим

channels.<channel>.streaming.mode управляет видимым поведением во время работы:

Режим Лучше всего для Что появляется в чате
off Тихих каналов Только финальный ответ.
partial Наблюдения за появлением текста ответа Один черновик, редактируемый последним текстом ответа.
block Более крупных фрагментов предпросмотра ответа Один предпросмотр, обновляемый или дополняемый более крупными фрагментами.
progress Ходов с большим числом инструментов или длительным выполнением Один черновик статуса, затем финальный ответ.

Выбирайте progress, когда пользователям важнее понимать, «что происходит», чем наблюдать за потоковой передачей текста ответа токен за токеном.

Выбирайте partial, когда сам ответ является сигналом прогресса.

Выбирайте block, когда нужны обновления предпросмотра черновика более крупными текстовыми фрагментами. В Discord и Telegram streaming.mode: "block" по-прежнему означает потоковый предпросмотр, а не обычную блочную доставку. Используйте streaming.block.enabled или устаревший blockStreaming, когда нужны обычные блочные ответы.

Настройка меток

Метки прогресса находятся в channels.<channel>.streaming.progress.

Метка по умолчанию — auto; она выбирает значение из встроенного в OpenClaw набора однословных меток:

text
WorkingShellingScuttlingClawingPinchingMoltingBubblingTidingReefingCrackingSiftingBriningNautilingKrillingBarnaclingLobsteringTidepoolingPearlingSnappingSurfacing

Используйте фиксированную метку:

json5
{  channels: {    discord: {      streaming: {        mode: "progress",        progress: {          label: "Investigating",        },      },    },  },}

Используйте собственный пул автоматических меток:

json5
{  channels: {    discord: {      streaming: {        mode: "progress",        progress: {          label: "auto",          labels: ["Checking", "Reading", "Testing", "Finishing"],        },      },    },  },}

Скройте метку и показывайте только строки прогресса:

json5
{  channels: {    discord: {      streaming: {        mode: "progress",        progress: {          label: false,        },      },    },  },}

Управление строками прогресса

Строки прогресса включены по умолчанию в режиме progress. Они приходят из реальных событий запуска: запусков инструментов, обновлений элементов, планов задач, одобрений, вывода команд, сводок патчей и похожей активности агента.

Инструменты также могут выдавать типизированный прогресс, пока один вызов инструмента еще выполняется. Именно так медленная загрузка или поиск могут обновить видимый черновик до того, как инструмент вернет финальный результат. Обновление прогресса — это частичный результат инструмента с пустым содержимым модели и явными публичными метаданными канала:

json
{  "content": [],  "progress": {    "text": "Fetching page content...",    "visibility": "channel",    "privacy": "public",    "id": "web_fetch:fetching"  }}

OpenClaw отображает в интерфейсе прогресса канала только progress.text. Обычный результат инструмента все равно приходит позже как content и details и является единственной частью, возвращаемой модели.

Добавляя прогресс в инструмент, используйте короткое общее сообщение и откладывайте его до тех пор, пока операция не будет ожидать достаточно долго, чтобы это стало полезным:

typescript
const clearProgressTimer = scheduleToolProgress(  onUpdate,  { text: "Fetching page content...", id: "web_fetch:fetching" },  5_000,  { signal },); try {  return await runToolWork();} finally {  clearProgressTimer();}

Этот шаблон означает, что быстрые вызовы не показывают строку прогресса, длительные вызовы показывают ее, пока они еще ожидают завершения, а отмененные вызовы очищают таймер до появления устаревшего прогресса. Текст прогресса — это публичный побочный UI-канал, поэтому он не должен содержать секреты, исходные аргументы, полученное содержимое, вывод команд или текст страницы.

OpenClaw использует один и тот же форматтер для черновиков прогресса и /verbose:

json5
{  agents: {    defaults: {      toolProgressDetail: "explain", // explain | raw    },  },}

"explain" используется по умолчанию и делает черновики стабильными с лаконичными метками вроде 🛠️ check JS syntax for /tmp/app.js. "raw" добавляет базовую команду или детали, когда они доступны; это полезно при отладке, но создает больше шума в чате.

Например, одна и та же команда выглядит по-разному в зависимости от режима детализации:

Режим Строка прогресса
explain 🛠️ check JS syntax for /tmp/app.js
raw 🛠️ check JS syntax for /tmp/app.js, node --check /tmp/app.js

Ограничьте число строк, остающихся видимыми:

json5
{  channels: {    discord: {      streaming: {        mode: "progress",        progress: {          maxLines: 4,        },      },    },  },}

Строки прогресса автоматически сжимаются, чтобы уменьшить перекомпоновку чат-пузыря во время редактирования черновика.

По умолчанию OpenClaw обрезает длинные строки прогресса, чтобы повторные правки черновика не переносились по-разному при каждом обновлении. Бюджет по умолчанию для одной строки составляет 120 символов. Проза обрезается по границе слова, а длинные детали, такие как пути или исходные команды, сокращаются многоточием в середине, чтобы суффикс оставался видимым.

Настройте бюджет для одной строки:

json5
{  channels: {    discord: {      streaming: {        mode: "progress",        progress: {          maxLineChars: 160,        },      },    },  },}

Slack может отображать строки прогресса как структурированные поля Block Kit вместо единого текстового тела:

json5
{  channels: {    slack: {      streaming: {        mode: "progress",        progress: {          render: "rich",        },      },    },  },}

Расширенный рендеринг сохраняет тот же запасной вариант в виде простого текста, чтобы каналы и клиенты без поддержки более богатой структуры все равно могли показывать компактный текст прогресса.

Сохраните единый черновик прогресса, но скройте строки инструментов и задач:

json5
{  channels: {    discord: {      streaming: {        mode: "progress",        progress: {          toolProgress: false,        },      },    },  },}

При toolProgress: false OpenClaw все равно подавляет старые отдельные сообщения о прогрессе инструментов для этого хода. Канал остается визуально тихим до финального ответа, кроме метки, если она настроена.

Поведение каналов

Каждый канал использует самый чистый транспорт, который он поддерживает:

Канал Транспорт прогресса Примечания
Discord Отправить одно сообщение, затем редактировать его. Финальный текст редактируется на месте, когда он помещается в одно безопасное сообщение предпросмотра.
Matrix Отправить одно событие, затем редактировать его. Конфигурация потоковой передачи уровня аккаунта управляет черновиками уровня аккаунта.
Microsoft Teams Нативный поток Teams в личных чатах. streaming.mode: "block" сопоставляется с блочной доставкой Teams.
Slack Нативный поток или редактируемый черновой пост. Доступность треда влияет на то, можно ли использовать нативную потоковую передачу.
Telegram Отправить одно сообщение, затем редактировать его. Более старые видимые черновики могут заменяться, чтобы финальные временные метки оставались полезными.
Mattermost Редактируемый черновой пост. Активность инструментов сворачивается в тот же пост в стиле черновика.

Каналы без безопасной поддержки редактирования обычно откатываются к индикаторам набора текста или доставке только финального ответа.

Финализация

Когда финальный ответ готов, OpenClaw старается сохранить чат чистым:

  • Если черновик может безопасно стать финальным ответом, OpenClaw редактирует его на месте.
  • Если канал использует нативную потоковую передачу прогресса, OpenClaw завершает этот поток, когда нативный транспорт принимает финальный текст.
  • Если финальный ответ содержит медиа, запрос одобрения, явную цель ответа, слишком много фрагментов или неудачное редактирование/отправку, OpenClaw отправляет финальный ответ через обычный путь доставки канала.

Запасной путь выбран намеренно. Лучше отправить новый финальный ответ, чем потерять текст, ошибиться с тредом ответа или перезаписать черновик полезной нагрузкой, которую канал не может безопасно представить.

Устранение неполадок

Я вижу только финальный ответ.

Проверьте, что channels.<channel>.streaming.mode задан как progress для аккаунта или канала, который обработал сообщение. Некоторые пути групп или ответов с цитированием могут отключать предпросмотры черновиков для хода, когда канал не может безопасно редактировать нужное сообщение.

Я вижу метку, но не вижу строк инструментов.

Проверьте streaming.progress.toolProgress. Если он равен false, OpenClaw сохраняет поведение единого черновика, но скрывает строки прогресса инструментов и задач.

Я вижу новое финальное сообщение вместо отредактированного черновика.

Это безопасный запасной вариант. Такое может происходить для ответов с медиа, длинных ответов, явных целей ответа, старых черновиков Telegram, отсутствующих целей треда Slack, удаленных сообщений предпросмотра или неудачного завершения нативного потока.

Я все еще вижу отдельные сообщения о прогрессе.

Режим progress подавляет стандартные отдельные сообщения о прогрессе инструментов, когда черновик активен. Если отдельные сообщения все еще появляются, убедитесь, что ход действительно использует режим progress, а не streaming.mode: "off" или путь канала, который не может создать черновик для этого сообщения.

Teams ведет себя иначе, чем Discord или Telegram.

Microsoft Teams использует нативный поток в личных чатах вместо универсального транспорта предпросмотра с отправкой и редактированием. Teams также обрабатывает streaming.mode: "block" как блочную доставку Teams, потому что у него нет такого же блочного режима чернового предпросмотра, который используется Discord и Telegram.

Связанные материалы

Was this useful?
On this page

On this page