ทำไม USER.md และ MEMORY.md ไม่สามารถรวมกันได้
สรุป
USER.md และ MEMORY.md คือสมุดบันทึกส่วนตัวสองเล่มที่อยู่เบื้องหลังความทรงจําระยะยาวของ Hermes Agent และมีข้อจํากัดที่ชัดเจนสามประการที่อธิบายว่าทําไมจึงไม่สามารถรวมกันได้ประการแรก ความจุเป็นอิสระ (USER.md ประมาณ 1,375 ตัวอักษร / 500 โทเคน; MEMORY.md ประมาณ 2,200 ตัวอักษร / 800 โทเคน) ดังนั้นไม่มีอันไหนบีบอีกฝ่ายประการที่สอง ความหมายในการโหลดแตกต่างกัน: ทั้งสองโหลดในแต่ละเซสชัน แต่บทบาทของแต่ละอันแตกต่างกันโดยสิ้นเชิง — อันหนึ่งอธิบาย "คุณเป็นใครอย่างมั่นคง" อีกอันมักจะบันทึก "สิ่งที่เราทํา"อันดับสาม ความหมายการอัปเดตแตกต่างกัน: ฟิลด์การตั้งค่าใน USER.md ส่วนใหญ่จะเขียนทับค่าเก่า ในขณะที่ MEMORY.md มักจะเพิ่มและรวมตามความต้องการ การรวมกันเป็น NOTES.md เดียวจะทําให้ข้อจํากัดทั้งสามถูกทําลายพร้อมกัน — เป็นกรณีตัวอย่างที่ว่า "ดูเรียบง่ายแต่ทํางานแย่กว่า".**
คำถามที่ยุติธรรมสำหรับเริ่มต้น
ทั่วความทรงจำแบบชั้นของ Hermes, USER.md และ MEMORY.md รวมกันได้เพียง ~3,575 อักขระ / ~1,300 โทเค็น — ถือว่าควบคุมได้อย่างน่าทึ่งในยุคที่มีหน้าต่างบริบทหกหลัก
ดังนั้นปฏิกิริยาแรกของคนส่วนใหญ่คือสามคำถาม:
- ทำไมไม่รวมพวกมันเข้าเป็น
NOTES.mdเดียวล่ะ? - ทำไมไม่ขยายขึ้นไปถึงหลายหมื่นไบต์ล่ะ?
- ทำไมสองไฟล์นี้ถึงมีเพดานต่างกัน (2,200 กับ 1,375) ด้วยล่ะ?
ทั้งสามชี้ไปที่คำตอบเดียวกัน: USER.md และ MEMORY.md เป็นหน่วยความจำสองประเภทที่แตกต่างกัน และการนำมารวมกันทำให้ทั้งสองแย่ลง ด้านล่างนี้ หลักการออกแบบนั้นจะถูกอธิบายออกเป็นสามชั้น
1. USER.md: โปรไฟล์ผู้ใช้ที่มั่นคงและมีโครงสร้าง
USER.md เป็น คำอธิบายที่มั่นคงของคุณ:
- เอกลักษณ์: ชื่อ, บทบาท, สถานที่.
- ความชอบ: รูปแบบการสื่อสาร, ชุดเทคโนโลยีที่ใช้ปกติ.
- ข้อจำกัด: ตารางเวลา, ภาษา, หัวข้อที่ควรหลีกเลี่ยง.
- รูปแบบการทำงาน: สรุปก่อนหรือกระบวนการก่อน.
- เป้าหมายระยะยาว: สิ่งที่คุณกำลังทำงานไปสู่.
คุณลักษณะสำคัญของมัน:
- เสถียร: อัปเดตทุก ๆ ไม่กี่วันหรือไม่กี่สัปดาห์
- มีโครงสร้าง: แบ่งเป็นส่วน ๆ, ระบุรายการ, อิงตามฟิลด์
- โหลดอยู่เสมอ: ถูกฉีดเข้าไปในพรอมต์ของระบบเมื่อเริ่มแต่ละเซสชัน
- เพดานสูงสุด: ประมาณ 1,375 ตัวอักษร / ประมาณ 500 โทเคน
คิดว่า USER.md เป็น โพสต์-อิทบนขอบหน้าจอของเอเจนต์ — มีข้อความไม่มาก แต่เห็นอยู่เสมอและมีประโยชน์เสมอ
2. MEMORY.md: แหล่งเก็บข้อเท็จจริงที่เติบโตและมีให้ตามต้องการ
MEMORY.md เก็บ สิ่งที่คุณและเอเจนต์ได้ทำร่วมกัน:
- สถานะโครงการ: ส่วนหน้าของ agent-demo ทำงานบนพอร์ต dev ภายในเครื่อง
- การตัดสินใจ: สัปดาห์ที่แล้ว ส่วน hero ถูกเปลี่ยนเป็นกราฟิกไล่สีแบบเคลื่อนไหว
- เหตุการณ์เฉพาะ: ตกลงกับทีม A ว่า X จะถูกส่งในไตรมาส 4
- ความรู้เฉพาะ: สิ่งนี้ API ทำการยืนยันตัวตนผ่าน SDK ภายในแทนการใช้จุดเข้าของสาธารณะ
คุณลักษณะสำคัญของมัน:
- ไดนามิก: เกือบทุกเซสชันที่มีเนื้อหาสำคัญจะเขียนหนึ่งหรือสองรายการ
- แยกรายการ: เพิ่มทีละรายการเพื่อให้ง่ายต่อการเรียกคืน
- โหลดเสมอพร้อมการจับคู่ FTS5 ตามต้องการ: รายการทั่วไปจะโหลดทุกเซสชัน รายการประวัติศาสตร์จะถูกดึงโดยการจับคู่ FTS5
- โดยทั่วไป 8–15 รายการ: เป้าหมายคือ 8–15 รายการ รวมประมาณ ~2,200 ตัวอักษร / ~800 โทเค็น
คิดถึง MEMORY.md เป็น สมุดบันทึกบนโต๊ะของคุณ — มากกว่ากระดาษโน้ต แต่ยังเขียนอย่างประหยัดเพื่อให้สามารถอ่านผ่านได้อย่างรวดเร็ว
3. "ทำไมไม่รวมพวกมันเป็น NOTES.md ไฟล์เดียว?" — สามข้อจำกัดที่เข้มงวด
จะมีคนถามอยู่เสมอ: ทั้งคู่เป็น Markdown ที่ถูกโหลดในทุกเซสชัน ดังนั้นทำไมไม่รวมพวกมันเข้าด้วยกันล่ะ?
นี่คือข้อจำกัดที่เข้มงวดสามข้อ แต่ละข้อแข็งแรงพอที่จะทำให้แนวคิดล้มเหลวได้
ข้อจำกัด 1: ความสามารถอิสระ ไม่บีบกันและกัน
USER.md ได้รับ 500 โทเค็น, MEMORY.md ได้รับ 800. หลังจากรวมกัน, NOTES.md ขนาด 1,300 โทเค็นเพียงตัวเดียวก็เจอปัญหา: เมื่อหน่วยความจำใกล้เต็ม, เอเจนต์จะลบบรรทัดเกี่ยวกับ "ผู้ใช้คือใคร" เพื่อบันทึกเหตุการณ์อีกหนึ่งเหตุการณ์หรือไม่?
อย่างชัดเจน มัน ไม่ควร — แต่เมื่อรวมกันแล้ว การตัดสินใจนั้นต้องถูกตัดสิน และตัดสิน ทุกครั้งที่มีการเขียน หากเก็บแยกกัน สองกลุ่มนี้จะพัฒนาไปอย่างอิสระ: เมื่อ MEMORY.md เต็ม มันจะบีบตัวเองเท่านั้นและไม่เคยทำให้โปรไฟล์ปนเปื้อน
ข้อจำกัด 2: พฤติกรรมการโหลดที่แตกต่างกัน
ทั้งสองไฟล์ถูก โหลดในทุกเซสชัน จริง ๆ แต่บทบาทของพวกมันในพรอมต์ของระบบแตกต่างกันโดยสิ้นเชิง:
- ส่วน
USER.mdตอบคำถาม "คุณกำลังรับมือกับใคร" กำหนดโทนของเอเจนต์ ระดับรายละเอียด และสมมติฐานเกี่ยวกับสแตก - ส่วน
MEMORY.mdตอบคำถาม "คุณทำอะไรด้วยกันมาแล้วบ้าง" ให้เอเจนต์มีข้อมูลเชิงข้อเท็จจริง
หากรวมกัน ทั้งสองจะ เจือจางซึ่งกันและกัน — เอเจนต์จะไม่สามารถบอกได้อย่างรวดเร็วอีกต่อไปว่า “นี่คือสไตล์การสื่อสารที่ฉันต้องปฏิบัติตาม หรือเป็นข้อเท็จจริงในอดีตที่ฉันควรอ้าง?”
ข้อจำกัด 3: พฤติกรรมการอัปเดตที่แตกต่างกัน
- ฟิลด์การตั้งค่าใน
USER.mdส่วนใหญ่จะเขียนทับ: เมื่อผู้ใช้บอกว่า "หยุดสรุปตั้งแต่ตอนนี้" บรรทัดการตั้งค่าที่เกี่ยวข้องจะถูกเขียนทับโดยตรง MEMORY.mdส่วนใหญ่จะต่อท้ายและรวบรวมตามต้องการ: เหตุการณ์เป็นลำดับเหตุการณ์ตามเวลา ดังนั้นประวัติไม่สามารถลบออกได้โดยง่าย เมื่อความจุเต็ม การตอบข้อผิดพลาดต่อไปนี้จะกระตุ้นการรวบรวมอย่างกระตือรือร้น:
{
"success": false,
"error": "Memory at 2,100/2,200 chars. Consolidate now...",
"current_entries": [...],
"usage": "2,100/2,200"
}หลังจากการรวม add / replace / remove ทั้งหมดจะต้องอยู่ร่วมกันในไฟล์เดียว ซึ่งทำให้ทั้งการดำเนินการและแบบจำลองทางจิตของผู้ใช้แย่ลง พร้อมกัน
4. ตัวอย่างที่ชัดเจน
สมมติว่าคุณบอกเอเจนต์:
"ฉันชื่อจัสมิน เป็นวิศวกรด้าน frontend และฉันชอบการสื่อสารแบบสรุปก่อน ฉันกำลังทำงานในเว็บไซต์ระดับโลกสำหรับ agent-demo (แอป AI agent) ด้วย Next.js เมื่อสัปดาห์ที่แล้วเราปรับส่วน hero ให้เป็นกราฟิกเคลื่อนไหวแบบไล่สี"
เอเจนต์ Hermes ที่ผ่านการฝึกอบรมมาอย่างดีจะแบ่งสิ่งนั้นออกดังนี้:
เขียนถึง USER.md:
## Identity
- Name: Jasmin
- Role: Frontend engineer
## Preferences
- Communication style: conclusion first
- Usual stack: Next.jsเขียนถึง MEMORY.md:
- [2026-07-30] agent-demo: hero section on the global site changed to an animated gradient.
- Related project: agent-demo / global site (global region)เห็นความแตกต่างหรือไม่?
- “คุณเป็นคนแบบไหน” ใส่ลงในโปรไฟล์; “สิ่งที่เราเคยทำด้วยกัน” ใส่ลงในคลังข้อมูล
- ข้อแรกจะเปลี่ยนก็ต่อเมื่อ คุณ เปลี่ยน (งานใหม่ ทีมใหม่); ข้อหลังจะเติบโตขึ้นกับ ทุกวันที่สนทนา
- การแยกไฟล์คือสิ่งที่ทำให้แต่ละอย่างพัฒนาได้ด้วยตัวเอง
5. รายการข้ามห้ารายการ
Hermes ไม่ผลักทุกอย่างเข้าไปใน USER.md มันเก็บ รายการข้าม:
- อารมณ์ชั่วครั้งชั่วคราว: "วันนี้หัวฉันเจ็บ" — ไม่ใช่ลักษณะคงที่
- พารามิเตอร์งานชั่วคราว: "เปลี่ยนหัวข้อนี้เป็น X ให้ฉันหน่อย" — ใช้ครั้งเดียว
- ทัศนคติไม่ชัดเจน: "ฉันคิดว่าฉันชอบสิ่งที่กระชับมากขึ้นหน่อย" — ไม่สามารถนำกลับมาใช้ได้มากพอ (ต้องปรับคุณสมบัติหรือข้ามไป)
- สิ่งใดก็ตามที่สามารถคาดเดาได้จากบริบทการสนทนาสด — ไม่จำเป็นต้องเก็บ
- ข้อมูลที่ละเอียดอ่อน (อีเมล รหัสผ่าน ที่อยู่ที่ผู้ใช้ไม่ได้ยืนยันโดยตรง) — ข้อมูลเกี่ยวกับความเป็นส่วนตัวโดยปกติจะไม่ถูกบันทึก
รายการข้ามนั้นคือสิ่งที่ทำให้ USER.md อยู่ที่ "500 โทเค็นและความหนาแน่นสูง"
6. สิ่งนี้หมายถึงอะไรสำหรับผลิตภัณฑ์
สำหรับผลิตภัณฑ์ของเอเจนต์ การแบ่งระหว่าง USER.md และ MEMORY.md ไม่ใช่เพียงรายละเอียดทางวิศวกรรม มันกำหนดสามสิ่ง:
- คุณสามารถแสดงให้ผู้ใช้เห็น "สิ่งที่ฉันคิดเกี่ยวกับคุณ" ได้หรือไม่ — นั่นต้องการโปรไฟล์ที่เสถียร อ่านได้ และแก้ไขได้ (ความหมายของ
USER.md) - เอเจนต์สามารถหลีกเลี่ยงการลืมในระยะยาวได้หรือไม่ — นั่นต้องการคลังข้อเท็จจริงที่เติบโตและสามารถเรียกคืนได้ (ความหมายของ
MEMORY.md) - ต้นทุนยังคงถูกจำกัดหรือไม่ — มีเพียงการโหลดแบบหลายชั้นเท่านั้นที่สามารถ "รู้ว่าคุณคือใคร" และหลีกเลี่ยงการใช้บริบททั้งหมดจนหมดได้
7. LightVela: การเปลี่ยนสมุดบัญชีสองเล่มนี้ให้กลายเป็นผลิตภัณฑ์
การออกแบบหน่วยความจำของเอเจนต์ภายในของ LightVela ยืมแนวคิดแบบเป็นชั้นนี้อย่างตรงไปตรงมา Hermes' USER.md และ MEMORY.md เป็นไฟล์ Markdown ที่เขียนขึ้นสำหรับนักพัฒนา; LightVela แปลงไฟล์เหล่านี้เป็นสองสิ่งที่ผู้ใช้ทั่วไปสามารถใช้งานได้โดยตรง:
- เลเยอร์โปรไฟล์ที่มองเห็นได้: ผู้ใช้สามารถดูได้ว่าเอเจนต์จำข้อเท็จจริงในโปรไฟล์ใดบ้างและมาจากการสนทนาใด และสามารถแก้ไขได้เพียงคลิกเดียว โปรไฟล์ไม่ใช่กล่องดำอีกต่อไป
USER.md - เลเยอร์ข้อเท็จจริงที่จัดระเบียบได้: ความจำเชิงข้อเท็จจริงไม่ใช่เพียงกองของรายการ — สามารถติดแท็กตามโปรเจกต์ งาน หรือเวลาเพื่อให้จำและทำความสะอาดได้ง่ายขึ้น ในสถานการณ์ทีม ความจำของทีมและความจำส่วนตัวสามารถจัดการเป็นเลเยอร์แยกได้
- เส้นทางที่สั้นที่สุด: หากไอเดียเลเยอร์ความจำดึงดูดคุณ แต่คุณไม่อยากแก้ไข
~/.hermes/USER.md, ดูแล FTS5 และสำรอง SQLite ด้วยตัวเอง LightVela คือเส้นทางที่สั้นที่สุดสู่ไอเดียนั้นในรูปแบบผลิตภัณฑ์สำเร็จ
ในหนึ่งบรรทัด: Hermes ให้แผนผังวิศวกรรมสำหรับหน่วยความจำแบบหลายชั้น และ LightVela เปลี่ยนมันให้เป็นประสบการณ์ผลิตภัณฑ์ที่ใคร ๆ ก็สามารถใช้ได้.
ข้อสรุปสำคัญ
USER.md: โปรไฟล์ผู้ใช้ ที่มั่นคงและมีโครงสร้าง ถูกโหลดทุกครั้งที่เปิดใช้งาน (~500 โทเค็น, 8–15 ช่องข้อมูลโปรไฟล์).MEMORY.md: คลังข้อเท็จจริง ที่เติบโตและใช้ตามความต้องการ (~800 โทเค็น, 8–15 รายการเหตุการณ์).- มีข้อจำกัดสามประการที่ทำให้ทั้งสองแยกจากกัน: ความจุอิสระ / วิธีโหลดที่ต่างกัน / วิธีอัปเดตที่ต่างกัน.
- การวางชั้นเป็นความสามารถพื้นฐานสำหรับความจำที่ดีของเอเจนต์ และเป็นจุดเริ่มต้นสำหรับการทำให้ความจำเป็นผลิตภัณฑ์ที่ LightVela.
อัปเดตล่าสุดเมื่อ 2026-10-09
เอเจนต์ Hermes จำคุณได้อย่างไร?
ค้นพบระบบความจำระยะยาวสี่ชั้นที่อยู่ด้านหลัง Hermes เอเจนต์: USER.md, MEMORY.md, เก็บบันทึกการสนทนา SQLite+FTS5 และทักษะ รวมถึงวิธีการเขียนและเรียกคืนที่ออกแบบมา
Hermes การจัดเก็บความทรงจำระยะยาวของเอเจนต์: กฎเหล็กสี่ข้อสำหรับ "น้อยแต่แม่นยำ"
ทำลายกฎเหล็กสี่ข้อ — ผูกมัด แข็งตัว โปร่งใส รวมตัว — ซึ่งรับประกันความทรงจำระยะยาวของตัวแทน Hermes แม่นยำและไม่บวม