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 กับ child
  • context: "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 ไม่ว่าคอนฟิกจะเป็นอย่างไร

อ่านเพิ่มเติม

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