Messages and delivery
แบบร่างความคืบหน้า
ฉบับร่างความคืบหน้าทำให้เทิร์นของเอเจนต์ที่ทำงานนานดูมีชีวิตในแชท โดยไม่เปลี่ยน บทสนทนาให้กลายเป็นกองข้อความตอบกลับสถานะชั่วคราว
เมื่อเปิดใช้ฉบับร่างความคืบหน้า OpenClaw จะสร้างข้อความงานที่กำลังดำเนินอยู่ ที่มองเห็นได้เพียงหนึ่งข้อความหลังจากเทิร์นพิสูจน์แล้วว่ากำลังทำงานจริง อัปเดตข้อความนั้นขณะที่ เอเจนต์อ่าน วางแผน เรียกใช้เครื่องมือ หรือรอการอนุมัติ แล้วเปลี่ยนฉบับร่างนั้น เป็นคำตอบสุดท้ายเมื่อช่องทางทำเช่นนั้นได้อย่างปลอดภัย
Shelling...
📖 Read: from docs/concepts/progress-drafts.md
🔎 Web Search: for "discord edit message"
🛠️ Exec: run tests
ใช้ฉบับร่างความคืบหน้าเมื่อคุณต้องการข้อความสถานะที่เป็นระเบียบหนึ่งข้อความระหว่างงานที่ใช้เครื่องมือมาก และคำตอบสุดท้ายเมื่อเทิร์นเสร็จสิ้น
เริ่มต้นอย่างรวดเร็ว
เปิดใช้ฉบับร่างความคืบหน้าต่อช่องทางด้วย streaming.mode: "progress":
{
channels: {
discord: {
streaming: {
mode: "progress",
},
},
},
}
โดยทั่วไปเท่านี้ก็เพียงพอแล้ว OpenClaw จะเลือกป้ายกำกับหนึ่งคำโดยอัตโนมัติ รอ จนกว่างานจะใช้เวลาอย่างน้อยห้าวินาทีหรือปล่อยเหตุการณ์งานครั้งที่สอง เพิ่มบรรทัด ความคืบหน้าแบบกะทัดรัดขณะที่มีงานที่เป็นประโยชน์เกิดขึ้น และระงับข้อความคุยเรื่องความคืบหน้า แบบแยกต่างหากที่ซ้ำกันสำหรับเทิร์นนั้น
สิ่งที่ผู้ใช้เห็น
ฉบับร่างความคืบหน้ามีสองส่วน:
| ส่วน | วัตถุประสงค์ |
|---|---|
| ป้ายกำกับ | ชื่อสั้น ๆ เช่น Thinking... หรือ Shelling... |
| บรรทัดความคืบหน้า | อัปเดตการรันแบบกะทัดรัด โดยใช้ป้ายกำกับและไอคอนเครื่องมือเดียวกับเอาต์พุตแบบละเอียด |
ป้ายกำกับจะปรากฏหลังจากเอเจนต์เริ่มงานที่มีความหมาย และยังคงยุ่งอยู่
เป็นเวลาห้าวินาทีหรือปล่อยเหตุการณ์งานครั้งที่สอง ข้อความตอบกลับแบบข้อความล้วนเท่านั้นจะไม่
แสดงฉบับร่างความคืบหน้า บรรทัดความคืบหน้าจะถูกเพิ่มเฉพาะเมื่อเอเจนต์ปล่อยการอัปเดตงาน
ที่เป็นประโยชน์ เช่น 🛠️ Exec, 🔎 Web Search หรือ ✍️ 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" เป็นค่าเริ่มต้นและทำให้ฉบับร่างคงที่ด้วยป้ายกำกับกระชับ เช่น
🛠️ Exec: check JS syntax for /tmp/app.js "raw" จะต่อท้าย
คำสั่ง/รายละเอียดเบื้องหลังเมื่อมี ซึ่งมีประโยชน์ขณะดีบักแต่ทำให้แชทมีข้อมูลมากขึ้น
ตัวอย่างเช่น คำสั่งเดียวกันจะแสดงต่างกันตามโหมดรายละเอียด:
| โหมด | บรรทัดความคืบหน้า |
|---|---|
explain |
🛠️ Exec: check JS syntax for /tmp/app.js |
raw |
🛠️ Exec: 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",
},
},
},
},
}
การเรนเดอร์แบบสมบูรณ์ยังคงมีข้อความสำรองแบบข้อความล้วนเดิม เพื่อให้ช่องทางและไคลเอนต์ที่ ไม่รองรับรูปแบบที่สมบูรณ์กว่ายังคงแสดงข้อความความคืบหน้าแบบกะทัดรัดได้
คงฉบับร่างความคืบหน้าเดียวไว้ แต่ซ่อนบรรทัดเครื่องมือและงาน:
{
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 ใช้