Memory & State
ถามต่อว่า “…แล้วพรุ่งนี้ล่ะ?” แล้วผู้ช่วยทำหน้างง — เพราะ LLM ไม่มีความจำ มันอ่าน context window ก้อนเดียวต่อหนึ่งครั้ง จบแล้วลืม บทนี้แยกให้ชัดระหว่างสามสิ่งที่คนมักรวมเป็น “สมองที่จำได้”: context window (เห็นรอบนี้), compaction (ย่อแล้วล้างเมื่อเต็ม), และ external memory (จดไว้นอก window ให้อยู่ข้ามเซสชัน)
พูดแบบเข้าใจง่าย
LLM ไม่มี state ข้ามการเรียก — “ความจำ” เดียวของมันคือข้อความที่อัดอยู่ใน context window ของ รอบนั้น window มีขนาดจำกัด พอ agent ทำงานยาว ๆ มันก็เต็ม
- Compaction = ท่ารับมือเมื่อ window เต็ม: ย่อบทสนทนาเก่าเป็นสรุปสั้น ๆ ทิ้งของเดิม แล้วเริ่ม window ใหม่ — สูญเสียข้อมูลโดยตั้งใจ รายละเอียดที่สรุปไม่ติด = หายถาวร
- External memory = เขียนสิ่งที่ต้องคงอยู่ลง “นอก window” (ไฟล์ ฐานข้อมูล สมุดโน้ต) แล้วอ่านกลับเมื่อต้องใช้
- Context editing = ลบของก้อนใหญ่ที่ใช้เสร็จแล้วออกจาก window อย่างจงใจ (เช่นผังที่สกัดเลขไปแล้ว) เพื่อชะลอไม่ให้ window เต็มเร็ว
ทักษะของวิศวกรคือ ตัดสินทีละข้อว่าอันไหน “ชั่วคราว” (ปล่อยให้หายได้) อันไหน “ต้องคงอยู่” (จดลง external memory) กับดักคลาสสิก: เก็บแค่ ตัวชี้ (pointer) ของเซสชันไว้ ไม่ใช่ เนื้อหา ของบทสนทนา
ในระบบของเรา — แหล่งความจริงอยู่นอก context
ระบบของเราออกแบบให้ ฐานข้อมูล (Postgres) เป็นแหล่งความจริง ผู้ช่วยจึงไม่ต้อง “จำ” ค่าการจองหรือข้อมูลนักศึกษาไว้ในบทสนทนา — มัน ดึงใหม่จากระบบทุกครั้งที่ต้องใช้ ดังนั้น compaction จะดุแค่ไหนก็ได้ ความจริงไม่หาย เพราะความจริงไม่เคยถูกเก็บไว้ในบทสนทนาตั้งแต่แรก
อีกตัวอย่างที่จับต้องได้: ผู้ช่วยตัวที่ช่วยร่างคู่มือนี้ มี ความจำแบบไฟล์ของตัวเอง — มันรู้บริบทของโปรเจกต์นี้ตั้งแต่ข้อความแรกของเซสชันใหม่ ทั้งที่ window ว่างเปล่า เพราะข้อเท็จจริงสำคัญถูก เขียนลงไฟล์ในเซสชันก่อน ๆ จึงรอดข้ามขอบเขตเซสชันมาได้ — นี่คือ external memory ที่ทำถูก
ทำพลาด vs ทำถูก
ลองเอง — เอาตัวรอดจาก compaction
สรุปบทที่ 06
- LLM ไร้ state — ความจำเดียวคือ context window ของรอบนั้น ซึ่งมีขอบเขต
- Compaction ย่อ+ล้างเมื่อเต็ม (สูญเสียโดยตั้งใจ); context editing ลบของก้อนใหญ่อย่างจงใจ
- สิ่งที่ต้องคงอยู่ต้องเขียนลง external memory; ความจริงควรดึงสดจาก แหล่งความจริง
- กับดัก: เก็บ pointer ≠ เก็บเนื้อหา — เซสชันหลุดเมื่อไร เนื้อหาก็หาย
📋 build-your-harness checklist · บรรทัดที่ 6 “ตัดสินทีละข้อ: ชั่วคราว (ปล่อยหายได้) vs ต้องคงอยู่ (เขียนลง external memory / แหล่งความจริง)”