Sessions and memory

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

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

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

เครื่องมือ สิ่งที่ทำ
sessions_list แสดงรายการเซสชันพร้อมตัวกรองที่เลือกได้ (kind, label, agent, recency, preview)
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 ให้เพิ่ม:

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

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

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

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

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

  • ข้อความของ 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 <|...|> อื่น ๆ และตัวแปรแบบเต็มความกว้าง <|...|> จะถูกลบออก
    • XML การเรียกเครื่องมือ MiniMax ที่ผิดรูป เช่น <invoke ...> / </minimax:tool_call> จะถูกลบออก
  • ข้อความที่ดูเหมือนข้อมูลประจำตัว/โทเค็นจะถูกปกปิดก่อนคืนค่า
  • บล็อกข้อความยาวจะถูกตัดให้สั้นลง
  • ประวัติที่ใหญ่มากอาจทิ้งแถวเก่ากว่า หรือแทนที่แถวที่ใหญ่เกินด้วย [sessions_history omitted: message too large]
  • เครื่องมือรายงาน flag สรุป เช่น truncated, droppedMessages, contentTruncated, contentRedacted, bytes และ metadata การแบ่งหน้า

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

หากต้องการทรานสคริปต์แบบตรงทุก byte ให้ตรวจสอบไฟล์ทรานสคริปต์บนดิสก์ แทนการใช้ sessions_history เป็น dump ดิบ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ตัวเลือกหลัก:

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

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

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

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

การมองเห็น

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

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

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

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

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

Was this useful?
On this page

On this page