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) แต่
ไม่รวมการสร้างเอเจนต์ย่อย หากต้องการคงโปรไฟล์รับส่งข้อความไว้และยังคง
อนุญาตการมอบหมายงานแบบเนทีฟ ให้เพิ่ม:
{ 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 โดยไม่คำนึงถึง
การกำหนดค่า
อ่านเพิ่มเติม
- การจัดการเซสชัน -- การกำหนดเส้นทาง วงจรชีวิต การบำรุงรักษา
- เอเจนต์ ACP -- การสร้างฮาร์เนสภายนอก
- หลายเอเจนต์ -- สถาปัตยกรรมหลายเอเจนต์
- การกำหนดค่า Gateway -- ปุ่มปรับแต่งการกำหนดค่าเครื่องมือเซสชัน