Messages and delivery

پیش‌نویس‌ها را پیش ببرید

Edit source

پیش‌نویس‌های پیشرفت باعث می‌شوند نوبت‌های طولانی عامل در چت زنده به نظر برسند، بدون اینکه گفت‌وگو به پشته‌ای از پاسخ‌های وضعیت موقت تبدیل شود.

وقتی پیش‌نویس‌های پیشرفت فعال باشند، 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 یک برچسب تک‌کلمه‌ای خودکار انتخاب می‌کند، صبر می‌کند تا کار دست‌کم پنج ثانیه طول بکشد یا یک رویداد کاری دوم منتشر شود، هنگام رخ دادن کار مفید خطوط پیشرفت فشرده اضافه می‌کند، و گفت‌وگوی پیشرفت مستقل و تکراری را برای آن نوبت سرکوب می‌کند.

آنچه کاربران می‌بینند

یک پیش‌نویس پیشرفت دو بخش دارد:

بخش هدف
برچسب یک خط آغازگر/وضعیت کوتاه مانند Thinking... یا 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
Thinking...Shelling...Scuttling...Clawing...Pinching...Molting...Bubbling...Tiding...Reefing...Cracking...Sifting...Brining...Nautiling...Krilling...Barnacling...Lobstering...Tidepooling...Pearling...Snapping...Surfacing...

از یک برچسب ثابت استفاده کنید:

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,        },      },    },  },}

کنترل خطوط پیشرفت

خطوط پیشرفت به‌طور پیش‌فرض در حالت پیشرفت فعال هستند. آن‌ها از رویدادهای اجرای واقعی می‌آیند: شروع ابزارها، به‌روزرسانی آیتم‌ها، برنامه‌های کار، تأییدها، خروجی فرمان، خلاصه‌های وصله، و فعالیت‌های مشابه عامل.

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 به‌طور پیش‌فرض خطوط پیشرفت طولانی را کوتاه می‌کند تا ویرایش‌های تکراری پیش‌نویس در هر به‌روزرسانی به شکل متفاوتی نشکنند. پیشوند خوانا می‌ماند، و جزئیات طولانی مانند مسیرها یا فرمان‌های خام با سه‌نقطه کوتاه می‌شوند.

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ِ گمشده، پیام‌های پیش‌نمایش حذف‌شده، یا نهایی‌سازی ناموفق جریان بومی رخ دهد.

هنوز پیام‌های پیشرفت مستقل می‌بینم.

وقتی پیش‌نویس فعال باشد، حالت پیشرفت پیام‌های پیش‌فرض پیشرفت ابزارِ مستقل را سرکوب می‌کند. اگر پیام‌های مستقل هنوز ظاهر می‌شوند، بررسی کنید که نوبت واقعاً از حالت پیشرفت استفاده می‌کند و نه streaming.mode: "off" یا مسیر کانالی که نمی‌تواند برای آن پیام پیش‌نویس ایجاد کند.

Teams رفتاری متفاوت از Discord یا Telegram دارد.

Microsoft Teams در چت‌های شخصی به‌جای انتقال پیش‌نمایش عمومیِ ارسال و ویرایش، از یک جریان بومی استفاده می‌کند. Teams همچنین streaming.mode: "block" را به‌عنوان تحویل بلوکی Teams در نظر می‌گیرد، چون حالت بلوک پیش‌نمایش پیش‌نویس مشابهی را که Discord و Telegram استفاده می‌کنند ندارد.

مرتبط

Was this useful?