Multi-agent

สถานะออนไลน์

OpenClaw "presence" เป็นมุมมองแบบเบาและทำงานอย่างสุดความสามารถของ:

  • ตัว Gateway เอง และ
  • ไคลเอ็นต์ที่ผู้ใช้มองเห็นซึ่งเชื่อมต่อกับ Gateway (แอป Mac, WebChat, โหนด เป็นต้น)

Presence แสดงผลเมทาดาทาการเชื่อมต่อแบบสดในหน้า Devices ของ Control UI (ภายใต้ Settings → Devices) และแท็บ Instances ของแอป macOS

หน้านี้ครอบคลุมรายชื่อไคลเอ็นต์ของ Gateway หากต้องการตรวจหา Mac ที่ใช้งานล่าสุด และกำหนดเส้นทางการแจ้งเตือนของโหนดไปยังเครื่องนั้น โปรดดู Presence ของคอมพิวเตอร์ที่ใช้งานอยู่

ฟิลด์ Presence (ข้อมูลที่แสดง)

รายการ Presence เป็นออบเจ็กต์ที่มีโครงสร้างพร้อมฟิลด์ต่างๆ เช่น:

  • instanceId (ไม่บังคับแต่แนะนำอย่างยิ่ง): ข้อมูลประจำตัวไคลเอ็นต์ที่คงที่ (โดยทั่วไปคือ connect.client.instanceId)
  • host: ชื่อโฮสต์ที่มนุษย์เข้าใจได้ง่าย
  • ip: ที่อยู่ IP ที่ระบุอย่างสุดความสามารถ
  • version: สตริงเวอร์ชันของไคลเอ็นต์
  • deviceFamily / modelIdentifier: ข้อมูลบ่งชี้ฮาร์ดแวร์
  • mode: ui, webchat, cli, backend, node, probe, test
  • lastInputSeconds: จำนวนวินาทีตั้งแต่การป้อนข้อมูลครั้งล่าสุดของผู้ใช้ หากทราบ
  • reason: สตริงรูปแบบอิสระที่ไคลเอ็นต์ระบุ โดยตัว Gateway เองจะส่งเฉพาะ self, connect และ disconnect
  • deviceId, roles, scopes: ข้อมูลประจำตัวอุปกรณ์และข้อมูลบ่งชี้บทบาท/ขอบเขตจากการแฮนด์เชคการเชื่อมต่อ
  • ts: การประทับเวลาของการอัปเดตล่าสุด (มิลลิวินาทีตั้งแต่ epoch)

แหล่งสร้าง (Presence มาจากที่ใด)

รายการ Presence ถูกสร้างจากหลายแหล่งและถูก ผสาน เข้าด้วยกัน

1) รายการของ Gateway เอง

Gateway จะสร้างรายการ "self" เริ่มต้นเสมอเมื่อเริ่มทำงาน เพื่อให้ UI แสดงโฮสต์ของ Gateway แม้ก่อนที่จะมีไคลเอ็นต์เชื่อมต่อ

2) การเชื่อมต่อ WebSocket

ไคลเอ็นต์ WS ทุกตัวเริ่มต้นด้วยคำขอ connect เมื่อแฮนด์เชคสำเร็จ Gateway จะเพิ่มหรืออัปเดตรายการ Presence สำหรับการเชื่อมต่อนั้น

เหตุใดการเชื่อมต่อระยะสั้นของระนาบควบคุมจึงไม่ปรากฏ

คำสั่ง CLI, ไคลเอ็นต์ RPC ฝั่งแบ็กเอนด์ และโพรบมักเชื่อมต่อเพียงชั่วครู่ เพื่อหลีกเลี่ยง การเก็บความเปลี่ยนแปลงเหล่านั้นไว้ตลอด TTL ของ Presence ไคลเอ็นต์ในโหมด cli, backend หรือ probe จะ ไม่ ถูกแปลงเป็นรายการ Presence ไคลเอ็นต์ในโหมดทดสอบ ยังคงได้รับการติดตาม เนื่องจากชุดทดสอบใช้ไคลเอ็นต์เหล่านี้แทนไคลเอ็นต์จริง

3) บีคอน system-event

ไคลเอ็นต์สามารถส่งบีคอนตามช่วงเวลาที่มีข้อมูลละเอียดขึ้นผ่านเมธอด system-event แอป Mac ใช้วิธีนี้เพื่อรายงานชื่อโฮสต์, IP, เวอร์ชัน และเมทาดาทาความพร้อมใช้งาน กิจกรรมจาก การป้อนข้อมูลทางกายภาพไม่ใช่ส่วนหนึ่งของบีคอนทั่วไปนี้ เหตุการณ์โหนดแบบเนทีฟสำหรับวัตถุประสงค์เฉพาะ ที่อธิบายไว้ใน Presence ของคอมพิวเตอร์ที่ใช้งานอยู่ เป็นผู้รับผิดชอบข้อมูลดังกล่าว Mac ติดแท็กบีคอนเหล่านี้ด้วย system-presence-clear-last-input; Gateway เวอร์ชันปัจจุบัน ใช้เครื่องหมายที่เข้ากันได้ย้อนหลังนี้เพื่อลบข้อมูลความใหม่ของการป้อนข้อมูลที่อาจหลงเหลือจาก แอปเวอร์ชันเก่า บีคอนยังมีค่าคงที่ 30 วัน เพื่อให้ Gateway เวอร์ชันเก่าที่ ละเว้นแท็กเขียนทับค่าความใหม่ที่แน่นอนแทนการเก็บค่านั้นไว้ ไม่มีการสุ่มตัวอย่างกิจกรรมใหม่ สำหรับค่าความเข้ากันได้นี้

4) การเชื่อมต่อของโหนด (บทบาท: node)

เมื่อโหนดเชื่อมต่อผ่าน WebSocket ของ Gateway ด้วย role: node Gateway จะเพิ่มหรืออัปเดตรายการ Presence สำหรับโหนดนั้น (เป็นขั้นตอนเดียวกับไคลเอ็นต์ WS อื่นๆ)

กฎการผสานและขจัดรายการซ้ำ (เหตุใด instanceId จึงสำคัญ)

รายการ Presence ถูกจัดเก็บไว้ในแมปในหน่วยความจำเพียงชุดเดียว โดยใช้คีย์แบบไม่คำนึงถึงตัวพิมพ์เล็ก-ใหญ่ จากค่าแรกที่มีอยู่ตามลำดับดังนี้: ID อุปกรณ์ที่จับคู่, connect.client.instanceId หรือ ID ประจำการเชื่อมต่อเป็นทางเลือกสุดท้าย

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

TTL และขนาดที่มีขอบเขตจำกัด

Presence ถูกออกแบบให้เป็นข้อมูลชั่วคราว:

  • TTL: รายการที่เก่ากว่า 5 นาทีจะถูกตัดออก
  • จำนวนรายการสูงสุด: 200 (รายการที่เก่าที่สุดจะถูกนำออกก่อน)

วิธีนี้ช่วยให้รายการเป็นปัจจุบันและหลีกเลี่ยงการใช้หน่วยความจำที่เพิ่มขึ้นอย่างไม่มีขอบเขต

ข้อควรระวังเกี่ยวกับการเชื่อมต่อระยะไกล/ทันเนล (IP แบบลูปแบ็ก)

เมื่อไคลเอ็นต์เชื่อมต่อผ่านทันเนล SSH / การส่งต่อพอร์ตภายในเครื่อง Gateway อาจเห็นที่อยู่ระยะไกลเป็น 127.0.0.1 เพื่อหลีกเลี่ยงการบันทึกที่อยู่ทันเนลนั้น เป็น IP ของไคลเอ็นต์ การจัดการการเชื่อมต่อจะละเว้น ip ทั้งหมดสำหรับ ไคลเอ็นต์ที่ตรวจพบว่าเป็นภายในเครื่อง (ลูปแบ็ก) แทนการเขียนที่อยู่ลูปแบ็ก ลงในรายการ

ส่วนที่นำข้อมูลไปใช้

หน้า Devices ของ Control UI

หน้า Devices เชื่อมโยง system-presence เข้ากับระเบียนการจับคู่และโหนด ที่จัดเก็บถาวร โดยปักหมุดบีคอนของ Gateway เองไว้เป็นลำดับแรก และใช้ ID อุปกรณ์หรือ อินสแตนซ์ที่ตรงกันสำหรับเมทาดาทาแพลตฟอร์ม เวอร์ชัน โมเดล และความใหม่ของการป้อนข้อมูลแบบสด

แท็บ Instances ของ macOS

แอป macOS แสดงผลลัพธ์จาก system-presence และใช้ตัวบ่งชี้สถานะขนาดเล็ก (Active/Idle/Stale) ตามอายุของการอัปเดตล่าสุด

เคล็ดลับการแก้ไขข้อบกพร่อง

  • หากต้องการดูรายการดิบ ให้เรียก system-presence กับ Gateway
  • หากพบรายการซ้ำ:
    • ตรวจสอบว่าไคลเอ็นต์ส่ง client.instanceId ที่คงที่ในการแฮนด์เชค
    • ตรวจสอบว่าบีคอนตามช่วงเวลาใช้ instanceId เดียวกัน
    • ตรวจสอบว่ารายการที่ได้จากการเชื่อมต่อไม่มี instanceId หรือไม่ (คาดว่าจะเกิดรายการซ้ำ)

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

Was this useful?
On this page

On this page