Sessions and memory
เครื่องมือเซสชัน
OpenClaw มอบเครื่องมือให้เอเจนต์ทำงานข้ามเซสชัน ตรวจสอบสถานะ และ จัดประสานเอเจนต์ย่อย
เครื่องมือที่พร้อมใช้งาน
| เครื่องมือ | สิ่งที่ทำ |
|---|---|
sessions_list |
แสดงรายการเซสชันพร้อมตัวกรองเสริม (ชนิด ป้ายกำกับ เอเจนต์ ความใหม่ ตัวอย่าง) |
sessions_history |
อ่านบทสนทนาของเซสชันที่ระบุ |
sessions_send |
ส่งข้อความไปยังเซสชันอื่นและเลือกได้ว่าจะรอหรือไม่ |
sessions_spawn |
สร้างเซสชันเอเจนต์ย่อยแบบแยกสำหรับงานเบื้องหลัง |
sessions_yield |
จบเทิร์นปัจจุบันและรอผลลัพธ์ติดตามจากเอเจนต์ย่อย |
subagents |
แสดงรายการ ควบคุม หรือหยุดเอเจนต์ย่อยที่สร้างขึ้นสำหรับเซสชันนี้ |
session_status |
แสดงการ์ดแบบ /status และเลือกตั้งค่าการ override โมเดลต่อเซสชันได้ |
เครื่องมือเหล่านี้ยังคงอยู่ภายใต้โปรไฟล์เครื่องมือที่ใช้งานอยู่และนโยบาย
อนุญาต/ปฏิเสธ tools.profile: "coding" รวมชุดการจัดประสานเซสชันทั้งหมด
ไว้ด้วย รวมถึง sessions_spawn, sessions_yield และ subagents
tools.profile: "messaging" รวมเครื่องมือส่งข้อความข้ามเซสชัน
(sessions_list, sessions_history, sessions_send, session_status) แต่
ไม่รวมการสร้างเอเจนต์ย่อย หากต้องการคงโปรไฟล์การส่งข้อความไว้และยัง
อนุญาตการมอบหมายงานแบบ native ให้เพิ่ม:
{
tools: {
profile: "messaging",
alsoAllow: ["sessions_spawn", "sessions_yield", "subagents"],
},
}
นโยบายระดับกลุ่ม provider sandbox และต่อเอเจนต์ยังสามารถลบเครื่องมือเหล่านั้น
หลังขั้นตอนโปรไฟล์ได้ ใช้ /tools จากเซสชันที่ได้รับผลกระทบเพื่อตรวจสอบ
รายการเครื่องมือที่มีผลจริง
การแสดงรายการและอ่านเซสชัน
sessions_list ส่งคืนเซสชันพร้อมคีย์ agentId ชนิด ช่องทาง โมเดล
จำนวนโทเค็น และ timestamp กรองตามชนิด (main, group, cron, hook,
node), label แบบตรงกัน, agentId แบบตรงกัน, ข้อความค้นหา หรือความใหม่
(activeMinutes) ได้ เมื่อคุณต้องการคัดแยกแบบกล่องจดหมาย เครื่องมือนี้ยัง
ขอชื่อเรื่องที่อนุมานตามขอบเขตการมองเห็น ตัวอย่างข้อความล่าสุด หรือข้อความ
ล่าสุดแบบจำกัดจำนวนในแต่ละแถวได้ ชื่อเรื่องและตัวอย่างที่อนุมานจะถูกสร้าง
เฉพาะสำหรับเซสชันที่ผู้เรียกเห็นได้อยู่แล้วภายใต้นโยบายการมองเห็นเครื่องมือ
เซสชันที่กำหนดค่าไว้ ดังนั้นเซสชันที่ไม่เกี่ยวข้องจะยังถูกซ่อนไว้
sessions_history ดึงบทสนทนาของเซสชันที่ระบุ โดยค่าเริ่มต้น ผลลัพธ์จาก
เครื่องมือจะถูกตัดออก ส่ง includeTools: true เพื่อดูผลลัพธ์เหล่านั้น
มุมมองที่ส่งคืนถูกจำกัดขอบเขตและกรองด้านความปลอดภัยโดยตั้งใจ:
- ข้อความของ assistant จะถูกปรับให้เป็นมาตรฐานก่อนเรียกคืน:
- แท็ก thinking จะถูกตัดออก
- บล็อกโครง scaffolding ของ
<relevant-memories>/<relevant_memories>จะถูกตัดออก - บล็อก payload XML ของการเรียกเครื่องมือแบบข้อความล้วน เช่น
<tool_call>...</tool_call>,<function_call>...</function_call>,<tool_calls>...</tool_calls>และ<function_calls>...</function_calls>จะถูกตัดออก รวมถึง payload ที่ถูกตัดทอน และไม่เคยปิดอย่างสมบูรณ์ - โครง scaffolding ของการเรียกเครื่องมือ/ผลลัพธ์ที่ถูกลดระดับ เช่น
[Tool Call: ...],[Tool Result ...]และ[Historical context ...]จะถูกตัดออก - โทเค็นควบคุมโมเดลที่รั่วไหล เช่น
<|assistant|>โทเค็น ASCII อื่นๆ ในรูปแบบ<|...|>และรูปแบบ full-width<|...|>จะถูกตัดออก - XML การเรียกเครื่องมือ MiniMax ที่ผิดรูปแบบ เช่น
<invoke ...>/</minimax:tool_call>จะถูกตัดออก
- ข้อความที่มีลักษณะเป็นข้อมูลรับรอง/โทเค็นจะถูกปกปิดก่อนส่งคืน
- บล็อกข้อความยาวจะถูกตัดทอน
- ประวัติที่ใหญ่มากอาจทิ้งแถวเก่ากว่า หรือแทนที่แถวที่ใหญ่เกินด้วย
[sessions_history omitted: message too large] - เครื่องมือจะรายงานแฟล็กสรุป เช่น
truncated,droppedMessages,contentTruncated,contentRedactedและbytes
ทั้งสองเครื่องมือรับได้ทั้ง คีย์เซสชัน (เช่น "main") หรือ ID เซสชัน
จากการเรียกรายการก่อนหน้า
หากคุณต้องการบทสนทนาแบบ byte-for-byte ที่ตรงทุกไบต์ ให้ตรวจสอบไฟล์บทสนทนา
บนดิสก์แทนการถือว่า sessions_history เป็น raw dump
การส่งข้อความข้ามเซสชัน
sessions_send ส่งข้อความไปยังเซสชันอื่นและเลือกได้ว่าจะรอคำตอบหรือไม่:
- ส่งแล้วไม่รอ: ตั้ง
timeoutSeconds: 0เพื่อเข้าคิวและส่งคืนทันที - รอคำตอบ: ตั้ง timeout แล้วรับคำตอบแบบ inline
เซสชันแชทที่ผูกกับเธรด เช่น คีย์ Slack หรือ Discord ที่ลงท้ายด้วย
:thread:<id> ไม่ใช่เป้าหมาย sessions_send ที่ใช้ได้ ใช้คีย์เซสชันช่องทาง
หลักสำหรับการประสานงานระหว่างเอเจนต์ เพื่อให้ข้อความที่ส่งผ่านเครื่องมือ
ไม่ปรากฏภายในเธรดที่มนุษย์กำลังใช้งานอยู่
ข้อความและคำตอบติดตาม A2A จะถูกทำเครื่องหมายเป็นข้อมูลระหว่างเซสชันใน prompt
ฝั่งรับ ([Inter-session message ... isUser=false]) และใน provenance ของบทสนทนา
เอเจนต์ฝั่งรับควรถือว่าเป็นข้อมูลที่ส่งผ่านเครื่องมือ ไม่ใช่คำสั่งที่ผู้ใช้
ปลายทางเขียนโดยตรง
หลังจากเป้าหมายตอบกลับ OpenClaw สามารถรัน ลูปตอบกลับ ที่เอเจนต์สลับกัน
ส่งข้อความ (สูงสุด 5 เทิร์น) ได้ เอเจนต์เป้าหมายสามารถตอบ REPLY_SKIP
เพื่อหยุดก่อนกำหนด
ตัวช่วยสถานะและการจัดประสาน
session_status คือเครื่องมือขนาดเบาที่เทียบเท่ากับ /status สำหรับเซสชัน
ปัจจุบันหรือเซสชันอื่นที่มองเห็นได้ เครื่องมือนี้รายงานการใช้งาน เวลา
สถานะโมเดล/runtime และบริบทงานเบื้องหลังที่เชื่อมโยงไว้เมื่อมี เช่นเดียวกับ
/status เครื่องมือนี้สามารถเติมค่าตัวนับโทเค็น/cache ที่เบาบางจากรายการ
การใช้งานล่าสุดในบทสนทนาได้ และ model=default จะล้าง override ต่อเซสชัน
ใช้ sessionKey="current" สำหรับเซสชันปัจจุบันของผู้เรียก ป้ายกำกับไคลเอนต์
ที่มองเห็นได้ เช่น openclaw-tui ไม่ใช่คีย์เซสชัน
sessions_yield ตั้งใจจบเทิร์นปัจจุบันเพื่อให้ข้อความถัดไปเป็นเหตุการณ์
ติดตามที่คุณกำลังรอ ใช้หลังจากสร้างเอเจนต์ย่อยเมื่อคุณต้องการให้ผลลัพธ์
การเสร็จสิ้นมาถึงเป็นข้อความถัดไป แทนการสร้างลูป polling
subagents คือตัวช่วย control-plane สำหรับเอเจนต์ย่อย OpenClaw ที่สร้างไว้แล้ว
รองรับ:
action: "list"เพื่อตรวจสอบการรันที่ใช้งานอยู่/ล่าสุดaction: "steer"เพื่อส่งคำแนะนำติดตามไปยัง child ที่กำลังรันaction: "kill"เพื่อหยุด child หนึ่งรายการหรือall
การสร้างเอเจนต์ย่อย
sessions_spawn สร้างเซสชันแบบแยกสำหรับงานเบื้องหลังโดยค่าเริ่มต้น
เครื่องมือนี้เป็นแบบไม่บล็อกเสมอ โดยจะส่งคืนทันทีพร้อม runId และ
childSessionKey
ตัวเลือกสำคัญ:
runtime: "subagent"(ค่าเริ่มต้น) หรือ"acp"สำหรับเอเจนต์ harness ภายนอก- override
modelและthinkingสำหรับเซสชัน child thread: trueเพื่อผูกการสร้างกับเธรดแชท (Discord, Slack ฯลฯ)sandbox: "require"เพื่อบังคับใช้ sandboxing กับ childcontext: "fork"สำหรับเอเจนต์ย่อย native เมื่อ child ต้องการบทสนทนา requester ปัจจุบัน ให้ละไว้หรือใช้context: "isolated"สำหรับ child ที่สะอาด เอเจนต์ย่อย native ที่ผูกกับเธรดจะใช้ค่าเริ่มต้นเป็นcontext: "fork"เว้นแต่threadBindings.defaultSpawnContextจะกำหนดไว้อย่างอื่น
เอเจนต์ย่อย leaf ค่าเริ่มต้นจะไม่ได้รับเครื่องมือเซสชัน เมื่อ
maxSpawnDepth >= 2 เอเจนต์ย่อย orchestrator ระดับ depth-1 จะได้รับ
sessions_spawn, subagents, sessions_list และ sessions_history เพิ่มเติม
เพื่อให้จัดการ child ของตนเองได้ การรันแบบ leaf ยังคงไม่ได้รับเครื่องมือ
การจัดประสานแบบ recursive
หลังเสร็จสิ้น ขั้นตอนประกาศจะโพสต์ผลลัพธ์ไปยังช่องทางของ requester
การส่งผลการเสร็จสิ้นจะรักษาการกำหนดเส้นทางเธรด/topic ที่ผูกไว้เมื่อมี และ
หากต้นทางการเสร็จสิ้นระบุเพียงช่องทาง OpenClaw ยังสามารถใช้เส้นทางที่เก็บไว้
ของเซสชัน requester (lastChannel / lastTo) ซ้ำสำหรับการส่งโดยตรงได้
สำหรับพฤติกรรมเฉพาะ ACP โปรดดู เอเจนต์ ACP
การมองเห็น
เครื่องมือเซสชันถูกจำกัดขอบเขตเพื่อจำกัดสิ่งที่เอเจนต์เห็นได้:
| ระดับ | ขอบเขต |
|---|---|
self |
เฉพาะเซสชันปัจจุบัน |
tree |
เซสชันปัจจุบัน + เอเจนต์ย่อยที่สร้างขึ้น |
agent |
ทุกเซสชันสำหรับเอเจนต์นี้ |
all |
ทุกเซสชัน (ข้ามเอเจนต์หากกำหนดค่าไว้) |
ค่าเริ่มต้นคือ tree เซสชันที่อยู่ใน sandbox จะถูกจำกัดไว้ที่ tree
ไม่ว่าคอนฟิกจะเป็นอย่างไร
อ่านเพิ่มเติม
- การจัดการเซสชัน -- การกำหนดเส้นทาง วงจรชีวิต การบำรุงรักษา
- เอเจนต์ ACP -- การสร้าง harness ภายนอก
- หลายเอเจนต์ -- สถาปัตยกรรมหลายเอเจนต์
- การกำหนดค่า Gateway -- ปุ่มปรับแต่งคอนฟิกเครื่องมือเซสชัน