เซสชันและหน่วยความจำ
เซสชัน
วิธีทำงานของเซสชัน
การสนทนาทุกครั้งกับเอเจนต์เกิดขึ้นใน เซสชัน เซสชันถูกระบุด้วยคีย์ที่เข้ารหัส context, เอเจนต์ตัวไหน ช่องทางไหน แชทไหน
เซสชันรักษา transcript ที่สมบูรณ์ (append-only JSONL) ของข้อความทั้งหมด การเรียกเครื่องมือ และผลลัพธ์ Transcript นี้คือสิ่งที่ให้ context แก่เอเจนต์เกี่ยวกับการสนทนาที่กำลังดำเนินอยู่
Session Key
เซสชันถูกกำหนดเส้นทางโดยอัตโนมัติตาม context:
| รูปแบบ | ความหมาย |
|, --, -|, --, -|
| agent:main:main | การสนทนาโดยตรงหลัก |
| agent:<id>:<channel>:group:<id> | แชทกลุ่มบนช่องทางเฉพาะ |
| agent:<id>:<channel>:channel:<id> | การสนทนาช่องทาง/ห้อง |
| cron:<jobId> | การรัน scheduled job |
| hook:<uuid> | การรันที่ทริกเกอร์ด้วย Webhook |
วงจรชีวิตเซสชัน
- การรีเซ็ตรายวัน, เซสชันรีเซ็ตอัตโนมัติในเวลาที่กำหนดค่าได้ (ค่าเริ่มต้น 4 โมงเช้าตามเวลาท้องถิ่น) ซึ่งสร้าง context การสนทนาใหม่ทุกวันในขณะที่รักษาประวัติ
- การหมดอายุเมื่อไม่ได้ใช้งาน, เซสชันที่ไม่ได้ใช้งานในช่วงเวลาที่กำหนดค่าได้สามารถรีเซ็ตอัตโนมัติ
- การรีเซ็ตด้วยตนเอง, เริ่มใหม่ได้ทุกเวลาด้วยคำสั่ง
/newหรือ/reset
การติดตามโทเค็น
เซสชันติดตามการใช้โทเค็นสะสม (อินพุต เอาต์พุต อ่านแคช เขียนแคช) สำหรับการตรวจสอบต้นทุนและการจัดการ context window
Compaction
Compaction คืออะไร?
เมื่อการสนทนาเข้าใกล้ขีดจำกัด context window ของ model Neotask จะ compact มัน, สรุปข้อความเก่าเป็นภาพรวมแบบย่อและเริ่มเซสชันใหม่ด้วยสรุปนั้นพร้อมข้อความล่าสุด
วิธีทำงาน
- การตรวจจับ, ตรวจสอบการใช้งาน context (ค่าเริ่มต้นทริกเกอร์: 80% ของ context window)
- การสรุป, ข้อความเก่าถูกสรุปเป็น compaction entry
- เซสชันใหม่, เซสชันใหม่เริ่มต้นด้วยสรุปที่ฉีดเข้าที่ด้านบน
- การรักษา, Transcript เก่าถูกเก็บสำหรับประวัติแต่ไม่โหลดเข้า context อีกต่อไป
การกำหนดค่า
- เปิดใช้งาน/ปิดใช้งาน, สลับการ compaction อัตโนมัติ
- เกณฑ์, เปอร์เซ็นต์ของ context window ที่ทริกเกอร์ compaction (ค่าเริ่มต้น 80%)
- จำนวนข้อความขั้นต่ำ, ไม่ compact หากมีข้อความน้อยกว่า N รายการ
การ Compact ด้วยตนเอง
คุณสามารถทริกเกอร์ compaction ด้วยตนเองได้ทุกเวลาด้วยคำสั่ง /compact ซึ่งมีประโยชน์เมื่อคุณต้องการรีเซ็ต context โดยไม่สูญเสียข้อมูลสำคัญ
หน่วยความจำ
หน่วยความจำเอเจนต์
เอเจนต์แต่ละตัวมีระบบหน่วยความจำสำหรับการคงข้อมูลสำคัญข้ามเซสชัน:
- MEMORY.md, ไฟล์ markdown ใน workspace ของเอเจนต์ที่จัดเก็บข้อเท็จจริงสำคัญ ค่ากำหนด และ context
- Memory directory, ไฟล์เพิ่มเติมใน
memory/สำหรับความรู้ที่มีโครงสร้าง
Vector Search
Neotask รองรับการค้นหาความคล้ายคลึง vector ข้ามหน่วยความจำเอเจนต์:
- การ Index, ไฟล์หน่วยความจำถูก index โดยใช้ embedding
- การค้นหา, เอเจนต์ค้นหาหน่วยความจำด้วยภาษาธรรมชาติ ("ผู้ใช้พูดอะไรเกี่ยวกับค่ากำหนด API ของพวกเขา?")
- การเรียกคืน, หน่วยความจำที่เกี่ยวข้องถูกส่งคืนตามลำดับความคล้ายคลึง
Memory Plugin (LanceDB)
Memory plugin ของ LanceDB ให้การจัดเก็บ vector ขั้นสูง:
- ฐานข้อมูล vector ถาวร
- ขนาด chunk และ overlap ที่กำหนดค่าได้
- การค้นหาความคล้ายคลึงที่มีประสิทธิภาพ
- การ re-index อัตโนมัติเมื่อไฟล์หน่วยความจำเปลี่ยนแปลง
การเรียกคืนอัตโนมัติ
เมื่อเริ่มต้นเซสชัน หน่วยความจำที่เกี่ยวข้องสามารถถูกเรียกคืนและฉีดเข้าใน context ของเอเจนต์โดยอัตโนมัติ ซึ่งให้ความต่อเนื่องแก่เอเจนต์ข้ามเซสชันโดยไม่ต้องโหลดประวัติการสนทนาทั้งหมด
การคงเซสชัน
ข้อมูลเซสชันทั้งหมดถูกจัดเก็บในเครื่อง:
- Session metadata,
sessions.jsonติดตามเซสชันที่ใช้งานอยู่ กิจกรรมล่าสุด จำนวนโทเค็น และ config - Transcript, Transcript เซสชันแต่ละรายการจัดเก็บเป็นไฟล์
.jsonl - การกู้คืน, เซสชันรอดพ้นการรีสตาร์ท Gateway โดยไม่สูญเสียข้อมูล
การทำความสะอาด
- เซสชันที่ไม่ได้เข้าถึงในช่วงเวลาที่กำหนดค่าได้ (ค่าเริ่มต้น 30 วัน) มีสิทธิ์สำหรับการทำความสะอาด
- การจัดการเซสชันด้วยตนเองมีผ่าน UI หรือ API
- Transcript ที่ compact แล้วถูก archive แต่สามารถตรวจสอบได้