OpenClaw จัดการข้อความขาเข้าผ่านไปป์ไลน์ของการระบุเซสชัน การเข้าคิว การสตรีม การเรียกใช้เครื่องมือ และการมองเห็น reasoning หน้านี้แสดงเส้นทางตั้งแต่ข้อความขาเข้าจนถึงการตอบกลับDocumentation Index
Fetch the complete documentation index at: https://docs.openclaw.ai/llms.txt
Use this file to discover all available pages before exploring further.
โฟลว์ข้อความ (ภาพรวมระดับสูง)
messages.*สำหรับคำนำหน้า การเข้าคิว และพฤติกรรมของกลุ่มagents.defaults.*สำหรับค่าเริ่มต้นของการสตรีมแบบบล็อกและการแบ่งชิ้นข้อความ- การแทนที่ตามช่องทาง (
channels.whatsapp.*,channels.telegram.*ฯลฯ) สำหรับเพดานจำกัดและสวิตช์การสตรีม
การตัดข้อความขาเข้าซ้ำ
ช่องทางอาจส่งข้อความเดิมซ้ำหลังจากเชื่อมต่อใหม่ OpenClaw เก็บแคชอายุสั้นที่ใช้ channel/account/peer/session/message id เป็นคีย์ เพื่อไม่ให้การส่งซ้ำทริกเกอร์การรันเอเจนต์อีกครั้งการ debounce ข้อความขาเข้า
ข้อความที่ส่งต่อเนื่องอย่างรวดเร็วจาก ผู้ส่งคนเดียวกัน สามารถถูกรวมเป็นเทิร์นเอเจนต์เดียวได้ผ่านmessages.inbound การ debounce มีขอบเขตต่อช่องทาง + บทสนทนา และใช้ข้อความล่าสุดสำหรับ threading/ID ของการตอบกลับ
การกำหนดค่า (ค่าเริ่มต้นส่วนกลาง + การแทนที่รายช่องทาง):
- Debounce ใช้กับข้อความ ข้อความล้วน เท่านั้น สื่อ/ไฟล์แนบจะ flush ทันที
- คำสั่งควบคุมจะข้ามการ debounce เพื่อให้ยังคงเป็นรายการเดี่ยว ช่องทางที่เลือกใช้การรวม DM จากผู้ส่งเดียวกันอย่างชัดเจนสามารถเก็บคำสั่ง DM ไว้ในช่วง debounce ได้ เพื่อให้ payload ที่ถูกแยกส่งเข้าร่วมเทิร์นเอเจนต์เดียวกันได้
เซสชันและอุปกรณ์
เซสชันเป็นของ Gateway ไม่ใช่ของไคลเอนต์- แชทโดยตรงจะถูกรวมเข้าเป็นคีย์เซสชันหลักของเอเจนต์
- กลุ่ม/ช่องทางจะได้คีย์เซสชันของตัวเอง
- ที่เก็บเซสชันและทรานสคริปต์อยู่บนโฮสต์ Gateway
เมตาดาตาผลลัพธ์เครื่องมือ
content ของผลลัพธ์เครื่องมือคือผลลัพธ์ที่โมเดลมองเห็น details ของผลลัพธ์เครื่องมือคือเมตาดาตารันไทม์สำหรับการเรนเดอร์ UI การวินิจฉัย การส่งสื่อ และ Plugin
OpenClaw รักษาขอบเขตนั้นไว้อย่างชัดเจน:
toolResult.detailsจะถูกลบออกก่อนการ replay ของผู้ให้บริการและอินพุตของ Compaction- ทรานสคริปต์เซสชันที่คงอยู่จะเก็บเฉพาะ
detailsที่มีขอบเขต เมตาดาตาที่ใหญ่เกินไปจะถูกแทนที่ด้วยสรุปขนาดกะทัดรัดที่ทำเครื่องหมายpersistedDetailsTruncated: true - Plugin และเครื่องมือควรใส่ข้อความที่โมเดลต้องอ่านไว้ใน
contentไม่ใช่เฉพาะในdetails
เนื้อความขาเข้าและบริบทประวัติ
OpenClaw แยก เนื้อความพรอมป์ ออกจาก เนื้อความคำสั่ง:BodyForAgent: ข้อความหลักที่ส่งให้โมเดลสำหรับข้อความปัจจุบัน Plugin ช่องทางควรรักษาส่วนนี้ให้โฟกัสที่ข้อความปัจจุบันของผู้ส่งซึ่งมีพรอมป์อยู่Body: fallback พรอมป์แบบเดิม ส่วนนี้อาจมีซองห่อของช่องทางและ wrapper ประวัติที่เลือกใช้ได้ แต่ช่องทางปัจจุบันไม่ควรพึ่งพาส่วนนี้เป็นอินพุตหลักของโมเดลเมื่อมีBodyForAgentCommandBody: ข้อความผู้ใช้ดิบสำหรับการแยกวิเคราะห์ directive/คำสั่งRawBody: alias แบบเดิมของCommandBody(เก็บไว้เพื่อความเข้ากันได้)
[Chat messages since your last reply - for context][Current message - respond to this]
CommandBody (หรือ RawBody) เป็นข้อความต้นฉบับ และเก็บ Body เป็นพรอมป์ที่รวมแล้ว ประวัติแบบมีโครงสร้าง การตอบกลับ ข้อความที่ส่งต่อ และเมตาดาตาช่องทางจะถูกเรนเดอร์เป็นบล็อกบริบทที่ไม่น่าเชื่อถือในบทบาทผู้ใช้ระหว่างการประกอบพรอมป์
บัฟเฟอร์ประวัติกำหนดค่าได้ผ่าน messages.groupChat.historyLimit (ค่าเริ่มต้นส่วนกลาง) และการแทนที่รายช่องทาง เช่น channels.slack.historyLimit หรือ channels.telegram.accounts.<id>.historyLimit (ตั้งเป็น 0 เพื่อปิดใช้งาน)
การเข้าคิวและ followup
หากมีการรันที่กำลังทำงานอยู่แล้ว ข้อความขาเข้าสามารถถูกเข้าคิว ชี้นำเข้าในการรันปัจจุบัน หรือรวบรวมไว้สำหรับเทิร์น followup ได้- กำหนดค่าผ่าน
messages.queue(และmessages.queue.byChannel) - โหมดเริ่มต้นคือ
steerพร้อม debounce followup 500ms เมื่อการชี้นำ fallback ไปเป็นการส่ง followup ที่เข้าคิว - โหมด:
steer,followup,collect,steer-backlog,interruptและโหมดเดิมqueueที่ทำทีละรายการ
ความเป็นเจ้าของการรันของช่องทาง
Plugin ช่องทางอาจรักษาลำดับ debounce อินพุต และใช้ backpressure ของการขนส่งก่อนที่ข้อความจะเข้าสู่คิวเซสชัน ไม่ควรกำหนด timeout แยกต่างหากรอบเทิร์นเอเจนต์เอง เมื่อข้อความถูก route ไปยังเซสชันแล้ว งานที่ใช้เวลานานจะถูกควบคุมโดยวงจรชีวิตของเซสชัน เครื่องมือ และรันไทม์ เพื่อให้ทุกช่องทางรายงานและกู้คืนจากเทิร์นที่ช้าได้อย่างสอดคล้องกันการสตรีม การแบ่งชิ้นข้อความ และการ batching
การสตรีมแบบบล็อกจะส่งการตอบกลับบางส่วนขณะที่โมเดลสร้างบล็อกข้อความ การแบ่งชิ้นข้อความเคารพขีดจำกัดข้อความของช่องทางและหลีกเลี่ยงการตัด fenced code การตั้งค่าหลัก:agents.defaults.blockStreamingDefault(on|off, ค่าเริ่มต้นปิดอยู่)agents.defaults.blockStreamingBreak(text_end|message_end)agents.defaults.blockStreamingChunk(minChars|maxChars|breakPreference)agents.defaults.blockStreamingCoalesce(การ batching ตามช่วงว่าง)agents.defaults.humanDelay(การหยุดพักคล้ายมนุษย์ระหว่างการตอบกลับแบบบล็อก)- การแทนที่ตามช่องทาง:
*.blockStreamingและ*.blockStreamingCoalesce(ช่องทางที่ไม่ใช่ Telegram ต้องมี*.blockStreaming: trueอย่างชัดเจน)
การมองเห็น reasoning และโทเค็น
OpenClaw สามารถแสดงหรือซ่อน reasoning ของโมเดลได้:/reasoning on|off|streamควบคุมการมองเห็น- เนื้อหา reasoning ยังคงนับรวมในการใช้โทเค็นเมื่อโมเดลสร้างขึ้น
- Telegram รองรับสตรีม reasoning เข้าไปในบับเบิลร่างชั่วคราวซึ่งจะถูกลบหลังส่งผลลัพธ์สุดท้าย ใช้
/reasoning onสำหรับเอาต์พุต reasoning แบบคงอยู่
คำนำหน้า threading และการตอบกลับ
การจัดรูปแบบข้อความขาออกถูกรวมศูนย์ไว้ในmessages:
messages.responsePrefix,channels.<channel>.responsePrefixและchannels.<channel>.accounts.<id>.responsePrefix(ลำดับ cascade ของคำนำหน้าขาออก) รวมถึงchannels.whatsapp.messagePrefix(คำนำหน้าขาเข้าของ WhatsApp)- Reply threading ผ่าน
replyToModeและค่าเริ่มต้นรายช่องทาง
การตอบกลับแบบเงียบ
โทเค็นเงียบที่ตรงตัวNO_REPLY / no_reply หมายถึง “อย่าส่งการตอบกลับที่ผู้ใช้มองเห็นได้”
เมื่อเทิร์นหนึ่งยังมีสื่อเครื่องมือที่รออยู่ เช่น เสียง TTS ที่สร้างขึ้น OpenClaw จะตัดข้อความเงียบออกแต่ยังส่งไฟล์แนบสื่อนั้น
OpenClaw แก้พฤติกรรมนั้นตามประเภทบทสนทนา:
- บทสนทนาโดยตรงไม่อนุญาตความเงียบโดยค่าเริ่มต้น และเขียนการตอบกลับเงียบล้วนใหม่เป็น fallback สั้น ๆ ที่มองเห็นได้
- กลุ่ม/ช่องทางอนุญาตความเงียบโดยค่าเริ่มต้น
- การประสานงานภายในอนุญาตความเงียบโดยค่าเริ่มต้น
/verbose เป็น on หรือ full
ค่าเริ่มต้นอยู่ภายใต้ agents.defaults.silentReply และ agents.defaults.silentReplyRewrite; surfaces.<id>.silentReply และ surfaces.<id>.silentReplyRewrite สามารถแทนที่เป็นราย surface ได้
เมื่อเซสชันแม่มีการรัน subagent ที่ spawn แล้วและรอดำเนินการอย่างน้อยหนึ่งรายการ การตอบกลับเงียบล้วนจะถูกทิ้งในทุก surface แทนที่จะถูกเขียนใหม่ เพื่อให้เซสชันแม่เงียบอยู่จนกว่าเหตุการณ์เสร็จสิ้นของ child จะส่งการตอบกลับจริง
ที่เกี่ยวข้อง
- การ refactor วงจรชีวิตข้อความ - การออกแบบเป้าหมายสำหรับการส่งและรับที่ทนทาน
- การสตรีม — การส่งข้อความแบบเรียลไทม์
- การลองซ้ำ — พฤติกรรมการลองส่งข้อความซ้ำ
- คิว — คิวประมวลผลข้อความ
- ช่องทาง — การผสานรวมแพลตฟอร์มรับส่งข้อความ