Messages and delivery
ร่างความคืบหน้า
ฉบับร่างความคืบหน้าทำให้เทิร์นของเอเจนต์ที่ใช้เวลานานรู้สึกมีความเคลื่อนไหวในแชตโดยไม่เปลี่ยน การสนทนาให้กลายเป็นกองข้อความสถานะชั่วคราว
เมื่อเปิดใช้ฉบับร่างความคืบหน้า OpenClaw จะสร้างข้อความงานที่กำลังดำเนินอยู่ซึ่งมองเห็นได้ เพียงหนึ่งข้อความหลังจากเทิร์นนั้นพิสูจน์แล้วว่ากำลังทำงานจริง อัปเดตข้อความนั้นขณะที่ เอเจนต์อ่าน วางแผน เรียกใช้เครื่องมือ หรือรอการอนุมัติ แล้วเปลี่ยนฉบับร่างนั้น ให้เป็นคำตอบสุดท้ายเมื่อช่องทางทำได้อย่างปลอดภัย
Shelling...📖 from docs/concepts/progress-drafts.md🔎 Web Search: for "discord edit message"🛠️ Bash: run testsใช้ฉบับร่างความคืบหน้าเมื่อคุณต้องการข้อความสถานะที่เรียบร้อยเพียงข้อความเดียวระหว่างงานที่ใช้เครื่องมือจำนวนมาก และคำตอบสุดท้ายเมื่อเทิร์นเสร็จสิ้น
เริ่มต้นอย่างรวดเร็ว
เปิดใช้ฉบับร่างความคืบหน้าแยกตามช่องทางด้วย streaming.mode: "progress":
{ 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:
Thinking...Shelling...Scuttling...Clawing...Pinching...Molting...Bubbling...Tiding...Reefing...Cracking...Sifting...Brining...Nautiling...Krilling...Barnacling...Lobstering...Tidepooling...Pearling...Snapping...Surfacing...ใช้ป้ายกำกับคงที่:
{ channels: { discord: { streaming: { mode: "progress", progress: { label: "Investigating", }, }, }, },}ใช้พูลป้ายกำกับอัตโนมัติของคุณเอง:
{ channels: { discord: { streaming: { mode: "progress", progress: { label: "auto", labels: ["Checking", "Reading", "Testing", "Finishing"], }, }, }, },}ซ่อนป้ายกำกับและแสดงเฉพาะบรรทัดความคืบหน้า:
{ channels: { discord: { streaming: { mode: "progress", progress: { label: false, }, }, }, },}ควบคุมบรรทัดความคืบหน้า
บรรทัดความคืบหน้าถูกเปิดใช้โดยค่าเริ่มต้นในโหมดความคืบหน้า บรรทัดเหล่านี้มาจากเหตุการณ์การทำงานจริง: การเริ่มใช้เครื่องมือ การอัปเดตรายการ แผนงาน การอนุมัติ เอาต์พุตคำสั่ง สรุปแพตช์ และกิจกรรมของเอเจนต์ในลักษณะคล้ายกัน
OpenClaw ใช้ตัวจัดรูปแบบเดียวกันสำหรับฉบับร่างความคืบหน้าและ /verbose:
{ 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 |
จำกัดจำนวนบรรทัดที่ยังคงมองเห็นได้:
{ channels: { discord: { streaming: { mode: "progress", progress: { maxLines: 4, }, }, }, },}บรรทัดความคืบหน้าจะถูกบีบอัดโดยอัตโนมัติเพื่อลดการจัดวางฟองแชตใหม่ขณะที่แก้ไขฉบับร่าง
OpenClaw ตัดบรรทัดความคืบหน้าที่ยาวโดยค่าเริ่มต้น เพื่อให้การแก้ไขฉบับร่างซ้ำๆ ไม่ ตัดบรรทัดแตกต่างกันในการอัปเดตแต่ละครั้ง คำนำหน้ายังคงอ่านได้ และรายละเอียดที่ยาว เช่นพาธหรือคำสั่งดิบจะถูกย่อด้วยจุดไข่ปลา
Slack สามารถเรนเดอร์บรรทัดความคืบหน้าเป็นฟิลด์ Block Kit แบบมีโครงสร้างแทน เนื้อความข้อความเดี่ยวได้:
{ channels: { slack: { streaming: { mode: "progress", progress: { render: "rich", }, }, }, },}การเรนเดอร์แบบ rich ยังคงมี fallback แบบข้อความล้วนเดียวกัน เพื่อให้ช่องทางและไคลเอนต์ที่ ไม่รองรับรูปแบบที่สมบูรณ์กว่า ยังคงแสดงข้อความความคืบหน้าแบบกะทัดรัดได้
คงฉบับร่างความคืบหน้าเดียวไว้ แต่ซ่อนบรรทัดเครื่องมือและงาน:
{ channels: { discord: { streaming: { mode: "progress", progress: { toolProgress: false, }, }, }, },}เมื่อใช้ toolProgress: false, OpenClaw ยังคงระงับข้อความ
ความคืบหน้าเครื่องมือแบบเดี่ยวเดิมสำหรับเทิร์นนั้น ช่องทางจะยังคงเงียบทางสายตาจนถึง
คำตอบสุดท้าย ยกเว้นป้ายกำกับหากมีการกำหนดค่าไว้
พฤติกรรมของช่องทาง
แต่ละช่องทางใช้การขนส่งที่สะอาดที่สุดที่รองรับ:
| ช่องทาง | การขนส่งความคืบหน้า | หมายเหตุ |
|---|---|---|
| Discord | ส่งข้อความหนึ่งข้อความ แล้วแก้ไขข้อความนั้น | ข้อความสุดท้ายถูกแก้ไขในตำแหน่งเดิมเมื่อพอดีกับข้อความพรีวิวที่ปลอดภัยหนึ่งข้อความ |
| Matrix | ส่งเหตุการณ์หนึ่งรายการ แล้วแก้ไขเหตุการณ์นั้น | การกำหนดค่าสตรีมมิงระดับบัญชีควบคุมฉบับร่างระดับบัญชี |
| Microsoft Teams | สตรีม Teams แบบเนทีฟในแชตส่วนตัว | streaming.mode: "block" แมปไปยังการส่งแบบบล็อกของ Teams |
| Slack | สตรีมเนทีฟหรือโพสต์ฉบับร่างที่แก้ไขได้ | ความพร้อมใช้งานของเธรดมีผลต่อว่าจะใช้สตรีมมิงเนทีฟได้หรือไม่ |
| Telegram | ส่งข้อความหนึ่งข้อความ แล้วแก้ไขข้อความนั้น | ฉบับร่างเก่าที่มองเห็นได้อาจถูกแทนที่ เพื่อให้เวลาประทับสุดท้ายยังมีประโยชน์ |
| Mattermost | โพสต์ฉบับร่างที่แก้ไขได้ | กิจกรรมของเครื่องมือถูกพับรวมเข้าในโพสต์รูปแบบฉบับร่างเดียวกัน |
ช่องทางที่ไม่มีการรองรับการแก้ไขอย่างปลอดภัยมัก fallback ไปใช้ตัวบอกสถานะกำลังพิมพ์หรือ การส่งเฉพาะคำตอบสุดท้าย
การจบงาน
เมื่อคำตอบสุดท้ายพร้อมแล้ว OpenClaw จะพยายามรักษาแชตให้สะอาด:
- หากฉบับร่างสามารถกลายเป็นคำตอบสุดท้ายได้อย่างปลอดภัย OpenClaw จะแก้ไขในตำแหน่งเดิม
- หากช่องทางใช้สตรีมมิงความคืบหน้าแบบเนทีฟ OpenClaw จะจบสตรีมนั้น เมื่อการขนส่งเนทีฟยอมรับข้อความสุดท้าย
- หากคำตอบสุดท้ายมีสื่อ พรอมป์อนุมัติ เป้าหมายการตอบกลับที่ระบุชัดเจน มีชิ้นส่วนมากเกินไป หรือการแก้ไข/ส่งล้มเหลว OpenClaw จะส่งคำตอบสุดท้ายผ่าน เส้นทางการส่งของช่องทางตามปกติ
เส้นทาง fallback เป็นสิ่งที่ตั้งใจไว้ การส่งคำตอบสุดท้ายใหม่ดีกว่า การทำข้อความหาย ส่งคำตอบผิดเธรด หรือเขียนทับฉบับร่างด้วยเพย์โหลดที่ช่องทาง ไม่สามารถแสดงได้อย่างปลอดภัย
การแก้ไขปัญหา
ฉันเห็นเฉพาะคำตอบสุดท้ายเท่านั้น
ตรวจสอบว่า channels.<channel>.streaming.mode ถูกตั้งเป็น progress สำหรับ
บัญชีหรือช่องทางที่จัดการข้อความนั้น บางเส้นทางของกลุ่มหรือการตอบกลับแบบอ้างอิงอาจ
ปิดใช้พรีวิวฉบับร่างสำหรับเทิร์นหนึ่ง เมื่อช่องทางไม่สามารถแก้ไขข้อความที่ถูกต้องได้อย่างปลอดภัย
ฉันเห็นป้ายกำกับแต่ไม่มีบรรทัดเครื่องมือ
ตรวจสอบ streaming.progress.toolProgress หากเป็น false, OpenClaw จะคง
พฤติกรรมฉบับร่างเดี่ยวไว้ แต่ซ่อนบรรทัดความคืบหน้าของเครื่องมือและงาน
ฉันเห็นข้อความสุดท้ายใหม่แทนฉบับร่างที่ถูกแก้ไข
นั่นคือ fallback เพื่อความปลอดภัย อาจเกิดขึ้นกับคำตอบที่มีสื่อ คำตอบยาว เป้าหมายการตอบกลับที่ระบุชัดเจน ฉบับร่าง Telegram เก่า เป้าหมายเธรด Slack ที่ขาดหาย ข้อความพรีวิวที่ถูกลบ หรือการจบสตรีมเนทีฟที่ล้มเหลว
ฉันยังเห็นข้อความความคืบหน้าแบบเดี่ยว
โหมดความคืบหน้าจะระงับข้อความความคืบหน้าเครื่องมือแบบเดี่ยวตามค่าเริ่มต้นเมื่อมีฉบับร่าง
ทำงานอยู่ หากข้อความเดี่ยวยังคงปรากฏ ให้ตรวจสอบว่าเทิร์นนั้นกำลัง
ใช้โหมดความคืบหน้าจริง และไม่ใช่ streaming.mode: "off" หรือเส้นทางช่องทางที่
ไม่สามารถสร้างฉบับร่างสำหรับข้อความนั้นได้
Teams มีพฤติกรรมต่างจาก Discord หรือ Telegram
Microsoft Teams ใช้สตรีมเนทีฟในแชตส่วนตัว แทนการขนส่งพรีวิวแบบ
ส่งแล้วแก้ไขทั่วไป Teams ยังถือว่า streaming.mode: "block" เป็น
การส่งแบบบล็อกของ Teams เพราะไม่มีโหมดบล็อกแบบพรีวิวฉบับร่างเดียวกับที่
Discord และ Telegram ใช้