Sessions and memory

เครื่องมือเซสชัน

OpenClaw มอบเครื่องมือให้เอเจนต์ทำงานข้ามเซสชัน ตรวจสอบสถานะ และ ประสานงานเอเจนต์ย่อย

เครื่องมือที่มีให้ใช้

เครื่องมือ สิ่งที่ทำ
sessions_list แสดงรายการเซสชันพร้อมตัวกรองเสริม (ชนิด ป้ายกำกับ เอเจนต์ คลังเก็บ ตัวอย่าง)
sessions_history อ่านทรานสคริปต์ของเซสชันที่ระบุ
sessions_send ส่งข้อความไปยังเซสชันอื่นและเลือกได้ว่าจะรอหรือไม่
sessions_spawn สร้างเซสชันเอเจนต์ย่อยแบบแยกอิสระสำหรับงานเบื้องหลัง
sessions_yield จบเทิร์นปัจจุบันและรอผลลัพธ์ติดตามจากเอเจนต์ย่อย
subagents แสดงรายการสถานะเอเจนต์ย่อยที่สร้างขึ้นสำหรับเซสชันนี้
session_status แสดงการ์ดแบบ /status และเลือกตั้งค่าทับโมเดลรายเซสชันได้

เครื่องมือเหล่านี้ยังคงอยู่ภายใต้โปรไฟล์เครื่องมือที่ใช้งานอยู่และนโยบาย อนุญาต/ปฏิเสธ tools.profile: "coding" รวมชุดการประสานงานเซสชันครบถ้วน รวมถึง sessions_spawn, sessions_yield และ subagents tools.profile: "messaging" รวมเครื่องมือรับส่งข้อความข้ามเซสชัน (sessions_list, sessions_history, sessions_send, session_status) แต่ ไม่รวมการสร้างเอเจนต์ย่อย หากต้องการคงโปรไฟล์รับส่งข้อความไว้และยังคง อนุญาตการมอบหมายงานแบบเนทีฟ ให้เพิ่ม:

json5
{  tools: {    profile: "messaging",    alsoAllow: ["sessions_spawn", "sessions_yield", "subagents"],  },}

นโยบายของกลุ่ม ผู้ให้บริการ แซนด์บ็อกซ์ และรายเอเจนต์ยังสามารถลบเครื่องมือเหล่านั้น หลังขั้นตอนโปรไฟล์ได้ ใช้ /tools จากเซสชันที่ได้รับผลกระทบเพื่อตรวจสอบ รายการเครื่องมือที่มีผลจริง

การแสดงรายการและอ่านเซสชัน

sessions_list ส่งคืนเซสชันพร้อมคีย์ agentId ชนิด ช่องทาง โมเดล จำนวนโทเค็น และเวลา กรองตามชนิด (main, group, cron, hook, node), label แบบตรงกัน, agentId แบบตรงกัน, ข้อความค้นหา หรือความใหม่ (activeMinutes) เซสชันที่ใช้งานอยู่จะถูกส่งคืนโดยค่าเริ่มต้น ส่ง archived: true เพื่อตรวจสอบเซสชันที่เก็บถาวร แถวต่างๆ รวมสถานะปักหมุดและเก็บถาวรไว้ด้วย เมื่อ คุณต้องการคัดแยกแบบกล่องจดหมาย เครื่องมือนี้ยังขอชื่อเรื่องที่อนุมานภายใต้ขอบเขต การมองเห็น ตัวอย่างข้อความล่าสุด หรือข้อความล่าสุดแบบมีขอบเขตในแต่ละแถวได้ ชื่อเรื่องและตัวอย่างที่อนุมานจะถูกสร้างเฉพาะสำหรับเซสชันที่ผู้เรียกมองเห็นได้อยู่แล้ว ภายใต้นโยบายการมองเห็นเครื่องมือเซสชันที่กำหนดค่าไว้ ดังนั้นเซสชันที่ไม่เกี่ยวข้อง จะยังคงถูกซ่อนอยู่ เมื่อการมองเห็นถูกจำกัด sessions_list จะส่งคืนเมตาดาต้า visibility แบบเลือกได้ซึ่งแสดงโหมดที่มีผลและคำเตือนว่า ผลลัพธ์อาจถูกจำกัดขอบเขต

sessions_history ดึงทรานสคริปต์การสนทนาสำหรับเซสชันที่ระบุ โดยค่าเริ่มต้น ผลลัพธ์ของเครื่องมือจะถูกยกเว้น -- ส่ง includeTools: true เพื่อดูผลลัพธ์เหล่านั้น ใช้ limit สำหรับส่วนท้ายล่าสุดแบบมีขอบเขต ส่ง offset: 0 เมื่อคุณต้องการ เมตาดาต้าการแบ่งหน้า จากนั้นส่งค่า nextOffset ที่ได้รับกลับมาเพื่อย้อนหน้า ผ่านหน้าต่างทรานสคริปต์ OpenClaw ที่เก่ากว่าโดยไม่ต้องอ่านไฟล์ทรานสคริปต์ดิบ หน้าที่ระบุออฟเซ็ตอย่างชัดเจนจะไม่รวมการนำเข้าสำรองจาก CLI ภายนอก ใช้มุมมอง ส่วนท้ายล่าสุดตามค่าเริ่มต้นเมื่อคุณต้องการประวัติการแสดงผลที่รวมแล้วนั้น มุมมองที่ส่งคืนถูกจำกัดขอบเขตและกรองเพื่อความปลอดภัยโดยตั้งใจ:

  • ข้อความของผู้ช่วยถูกทำให้เป็นมาตรฐานก่อนเรียกคืน:
    • แท็กการคิดถูกลบออก
    • บล็อกโครงรองรับ <relevant-memories> / <relevant_memories> ถูกลบออก
    • บล็อกเพย์โหลด XML ของการเรียกเครื่องมือแบบข้อความล้วน เช่น <tool_call>...</tool_call>, <function_call>...</function_call>, <tool_calls>...</tool_calls> และ <function_calls>...</function_calls> ถูกลบออก รวมถึงเพย์โหลดที่ถูกตัดทอน และไม่เคยปิดอย่างถูกต้อง
    • โครงรองรับการเรียกเครื่องมือ/ผลลัพธ์ที่ถูกลดระดับ เช่น [Tool Call: ...], [Tool Result ...] และ [Historical context ...] ถูกลบออก
    • โทเค็นควบคุมโมเดลที่รั่วออกมา เช่น <|assistant|> โทเค็น ASCII <|...|> อื่นๆ และรูปแบบเต็มความกว้าง <|...|> ถูกลบออก
    • XML การเรียกเครื่องมือ MiniMax ที่ผิดรูป เช่น <invoke ...> / </minimax:tool_call> ถูกลบออก
  • ข้อความที่คล้ายข้อมูลรับรอง/โทเค็นถูกปกปิดก่อนส่งคืน
  • บล็อกข้อความยาวถูกตัดทอน
  • ประวัติที่ใหญ่มากอาจทิ้งแถวเก่ากว่าหรือแทนที่แถวที่ใหญ่เกินด้วย [sessions_history omitted: message too large]
  • เครื่องมือรายงานแฟล็กสรุป เช่น truncated, droppedMessages, contentTruncated, contentRedacted, bytes และเมตาดาต้าการแบ่งหน้า

เครื่องมือทั้งสองยอมรับได้ทั้ง คีย์เซสชัน (เช่น "main") หรือ ID เซสชัน จากการเรียกรายการก่อนหน้า

หากคุณต้องการทรานสคริปต์ที่ตรงทุกไบต์ ให้ตรวจสอบไฟล์ทรานสคริปต์บนดิสก์ แทนการถือว่า sessions_history เป็นการดัมพ์ดิบ

การส่งข้อความข้ามเซสชัน

sessions_send ส่งข้อความไปยังเซสชันอื่นและเลือกได้ว่าจะรอ คำตอบหรือไม่:

  • ส่งแล้วไม่รอ: ตั้ง timeoutSeconds: 0 เพื่อเข้าคิวและส่งคืน ทันที
  • รอคำตอบ: ตั้งค่าหมดเวลาและรับคำตอบแบบอินไลน์

เซสชันแชทที่มีขอบเขตเธรด เช่น คีย์ Slack หรือ Discord ที่ลงท้ายด้วย :thread:<id> ไม่ใช่เป้าหมาย sessions_send ที่ถูกต้อง ใช้คีย์เซสชัน ช่องทางหลักสำหรับการประสานงานระหว่างเอเจนต์ เพื่อไม่ให้ข้อความที่ส่งผ่านเครื่องมือ ปรากฏในเธรดที่หันหน้าเข้าหามนุษย์ซึ่งกำลังใช้งานอยู่

ข้อความและการตอบกลับติดตาม A2A ถูกทำเครื่องหมายเป็นข้อมูลระหว่างเซสชันใน พรอมป์ที่รับ ([Inter-session message ... isUser=false]) และในที่มาของทรานสคริปต์ เอเจนต์ที่รับควรมองสิ่งเหล่านี้เป็นข้อมูลที่ส่งผ่านเครื่องมือ ไม่ใช่คำสั่งที่ผู้ใช้ปลายทาง เขียนโดยตรง

หลังจากเป้าหมายตอบกลับ OpenClaw สามารถเรียกใช้ ลูปตอบกลับไปกลับมา ซึ่ง เอเจนต์จะสลับกันส่งข้อความ (สูงสุด session.agentToAgent.maxPingPongTurns, ช่วง 0-20, ค่าเริ่มต้น 5) เอเจนต์เป้าหมายสามารถตอบ REPLY_SKIP เพื่อหยุดก่อนกำหนดได้

ตัวช่วยสถานะและการประสานงาน

session_status เป็นเครื่องมือเบาๆ ที่เทียบเท่า /status สำหรับเซสชันปัจจุบัน หรือเซสชันอื่นที่มองเห็นได้ เครื่องมือนี้รายงานการใช้งาน เวลา สถานะโมเดล/รันไทม์ และ บริบทงานเบื้องหลังที่เชื่อมโยงเมื่อมีอยู่ เช่นเดียวกับ /status เครื่องมือนี้สามารถเติม ตัวนับโทเค็น/แคชที่มีข้อมูลน้อยจากรายการการใช้งานทรานสคริปต์ล่าสุด และ model=default จะล้างการตั้งค่าทับรายเซสชัน ใช้ sessionKey="current" สำหรับ เซสชันปัจจุบันของผู้เรียก ป้ายกำกับไคลเอนต์ที่มองเห็นได้ เช่น openclaw-tui ไม่ใช่ คีย์เซสชัน

เมื่อมีเมตาดาต้าเส้นทาง session_status จะรวมบล็อก JSON Route context ที่มองเห็นได้และฟิลด์ details แบบมีโครงสร้างที่ตรงกันด้วย ฟิลด์เหล่านี้ช่วยแยกความแตกต่างระหว่างคีย์เซสชันกับเส้นทางที่กำลังจัดการ การรันสดในปัจจุบัน:

  • origin คือจุดที่สร้างเซสชัน หรือผู้ให้บริการที่อนุมานจากคำนำหน้าคีย์เซสชัน ที่ส่งมอบได้เมื่อสถานะเก่าขาดเมตาดาต้าแหล่งที่มาที่จัดเก็บไว้
  • active คือเส้นทางการรันสดปัจจุบัน จะรายงานเฉพาะสำหรับเซสชันสดหรือ เซสชันปัจจุบันที่กำลังถูกจัดการในตอนนี้
  • deliveryContext คือเส้นทางการส่งมอบที่คงอยู่ซึ่งจัดเก็บไว้บนเซสชัน ซึ่ง OpenClaw สามารถใช้ซ้ำสำหรับการส่งมอบภายหลังได้ แม้ว่าพื้นผิวที่ใช้งานอยู่ จะแตกต่างกัน

sessions_yield ตั้งใจจบเทิร์นปัจจุบันเพื่อให้ข้อความถัดไปเป็น เหตุการณ์ติดตามที่คุณกำลังรอ ใช้หลังจากสร้างเอเจนต์ย่อยเมื่อคุณต้องการให้ ผลลัพธ์การทำงานเสร็จมาถึงเป็นข้อความถัดไป แทนการสร้างลูปโพล

subagents เป็นตัวช่วยการมองเห็นสำหรับเอเจนต์ย่อย OpenClaw ที่สร้างไว้แล้ว รองรับ action: "list" เพื่อตรวจสอบการรันที่ใช้งานอยู่/ล่าสุด

การสร้างเอเจนต์ย่อย

sessions_spawn สร้างเซสชันแบบแยกอิสระสำหรับงานเบื้องหลังโดยค่าเริ่มต้น เครื่องมือนี้ไม่บล็อกเสมอ -- ส่งคืนทันทีพร้อม runId และ childSessionKey การรันเอเจนต์ย่อยแบบเนทีฟจะได้รับงานที่มอบหมายใน ข้อความ [Subagent Task] แรกที่มองเห็นได้ของเซสชันลูก ขณะที่พรอมป์ระบบ มีเฉพาะกฎรันไทม์ของเอเจนต์ย่อยและบริบทการกำหนดเส้นทาง

ตัวเลือกสำคัญ:

  • runtime: "subagent" (ค่าเริ่มต้น) หรือ "acp" สำหรับเอเจนต์ฮาร์เนสภายนอก
  • การตั้งค่าทับ model และ thinking สำหรับเซสชันลูก
  • thread: true เพื่อผูกการสร้างกับเธรดแชท (Discord, Slack ฯลฯ)
  • sandbox: "require" เพื่อบังคับใช้แซนด์บ็อกซ์กับเซสชันลูก
  • context: "fork" สำหรับเอเจนต์ย่อยแบบเนทีฟเมื่อเซสชันลูกต้องการ ทรานสคริปต์ของผู้ร้องขอปัจจุบัน ละไว้หรือใช้ context: "isolated" สำหรับลูกที่สะอาด เอเจนต์ย่อยแบบเนทีฟที่ผูกกับเธรดจะใช้ค่าเริ่มต้นเป็น context: "fork" เว้นแต่ threadBindings.defaultSpawnContext ระบุไว้เป็นอย่างอื่น

เอเจนต์ย่อยปลายทางตามค่าเริ่มต้นจะไม่ได้รับเครื่องมือเซสชัน เมื่อ maxSpawnDepth >= 2 เอเจนต์ย่อยตัวประสานงานที่ความลึก 1 จะได้รับ sessions_spawn, subagents, sessions_list และ sessions_history เพิ่มเติม เพื่อให้ จัดการลูกของตนเองได้ การรันปลายทางยังคงไม่ได้รับเครื่องมือประสานงานแบบเรียกซ้ำ

หลังเสร็จสิ้น ขั้นตอนประกาศจะโพสต์ผลลัพธ์ไปยังช่องทางของผู้ร้องขอ การส่งมอบผลลัพธ์เสร็จสิ้นจะรักษาการกำหนดเส้นทางเธรด/หัวข้อที่ผูกไว้เมื่อมี และหาก แหล่งที่มาของผลลัพธ์เสร็จสิ้นระบุเพียงช่องทาง OpenClaw ยังสามารถใช้เส้นทางที่จัดเก็บไว้ ของเซสชันผู้ร้องขอ (lastChannel / lastTo) ซ้ำสำหรับการส่งมอบโดยตรงได้

สำหรับพฤติกรรมเฉพาะ ACP โปรดดู เอเจนต์ ACP

การมองเห็น

เครื่องมือเซสชันถูกจำกัดขอบเขตเพื่อจำกัดสิ่งที่เอเจนต์มองเห็นได้:

ระดับ ขอบเขต
self เฉพาะเซสชันปัจจุบัน
tree เซสชันปัจจุบัน + เอเจนต์ย่อยที่สร้างขึ้น
agent เซสชันทั้งหมดสำหรับเอเจนต์นี้
all เซสชันทั้งหมด (ข้ามเอเจนต์หากกำหนดค่าไว้)

ค่าเริ่มต้นคือ tree เซสชันที่อยู่ในแซนด์บ็อกซ์จะถูกจำกัดไว้ที่ tree โดยไม่คำนึงถึง การกำหนดค่า

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

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

Was this useful?
On this page

On this page