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 ใช้

ที่เกี่ยวข้อง