AI และเอเจนต์อัปเดต 17 นาทีในการอ่าน

หน่วยความจำของ Hermes Agent: 5 ชั้น 7 provider และวิธีเลือก

หน่วยความจำของ Hermes Agent ทำงานอย่างไร: ห้าชั้นตั้งแต่ MEMORY.md ถึงสกิล รวมถึง provider เจ็ดตัวตั้งแต่ holographic ถึง mem0 และทำไมเอเจนต์ไม่จำรายการใหม่

หน่วยความจำของ Hermes Agent: 5 ชั้น 7 provider และวิธีเลือก
สารบัญ

หน่วยความจำของ Hermes Agent (Hermes Agent memory) ไม่ใช่โมดูลเดียว แต่เป็นห้าชั้นที่แยกจากกัน: หน้าต่างบทสนทนาที่กำลังคุยอยู่ โน้ต MEMORY.md และ USER.md คลังเก็บทุกเซสชันที่ค้นหาได้ สกิล และ provider หน่วยความจำภายนอก แต่ละชั้นมีที่เก็บของตัวเอง มีคนเขียนรายการของตัวเอง และมีเส้นทางไปถึงโมเดลของตัวเอง Hermes เคยมี provider ในตัวเจ็ดตัว และตอนนี้เองที่พวกมันกำลังย้ายออกจากแกนหลักไปอยู่ในแคตตาล็อกปลั๊กอิน: ในแกนหลักและใน Hermes 0.22 เหลือแค่ byterover กับ retaindb

ผมใช้ Hermes (เฮอร์มีส) เป็นเอเจนต์ประจำครอบครัว และได้ยินคำถามเดิมซ้ำ ๆ: “ก็บอกให้จำแล้ว ทำไมมันไม่จำ?” คำตอบแทบไม่เคยอยู่ที่หน่วยความจำ “พัง” แต่อยู่ที่ว่าชั้นไหนรับผิดชอบข้อเท็จจริงนั้น และโมเดลจะเห็นมันเมื่อไร ด้านล่างคือกลไกทั้งหมดนี้ โดยอิงจากโค้ดของ Hermes เวอร์ชัน 0.21.6 ซึ่งออกเมื่อ 8 ตุลาคม 2569 ส่วนสิ่งที่เปลี่ยนใน 0.21.7 มีบอกไว้ในหัวข้อเรื่อง provider เรื่องกลไกของ provider แบบโลคัลอย่าง holographic มีบทความยาวแยกไว้

หน่วยความจำไปถึงโมเดลได้อย่างไร

ถ้าจะเข้าใจหน่วยความจำของ Hermes ให้แยกเส้นทางที่ข้อมูลเข้าไปอยู่ในคำขอที่ส่งถึงโมเดลออกเป็นสามทาง: system prompt ประวัติข้อความ และผลลัพธ์จากเครื่องมือ กับหน่วยความจำชั้นไหนก็ตาม มีคำถามข้อเดียวที่ควรถาม: มันมาทางไหนในสามทางนี้ และเข้ามาตอนไหน

การตัดสินใจเกือบทั้งหมดในหน่วยความจำของ Hermes ขึ้นอยู่กับการประหยัดผ่านแคช ผู้ให้บริการโมเดลแคชส่วนต้นของคำขอที่ไม่เปลี่ยน และคำขอซ้ำที่ขึ้นต้นเหมือนเดิมจะถูกลงหลายเท่า Hermes จึงพยายามไม่แตะสิ่งที่ส่งไปแล้ว: ระหว่างเหตุการณ์ที่สร้าง system prompt ใหม่ ตัว system prompt จะคงเดิม แม้คุณเพิ่งเขียนอะไรเพิ่มลงหน่วยความจำของเอเจนต์ วิธีนี้ประหยัด token แต่ข้อมูลในพรอมต์จะอัปเดตช้าลง: รายการใหม่ไม่ได้เข้าไปในพรอมต์ทันที หลักการเดียวกันนี้อยู่เบื้องหลังเอเจนต์ AI อัตโนมัติทุกตัว: สำหรับเอเจนต์เหล่านี้ การเกิด cache miss ถือเป็นบั๊ก

ห้าชั้นของหน่วยความจำ Hermes Agent และสามเส้นทางเข้าสู่คำขอถึงโมเดล: system prompt ข้อความ และผลลัพธ์จากเครื่องมือ (ข้อความในภาพเป็นภาษาอังกฤษ)

หน่วยความจำของ Hermes Agent ทำงานอย่างไร: ห้าชั้น

ชั้น คืออะไร ไปถึงโมเดลอย่างไร
ขณะทำงาน บทสนทนาปัจจุบัน ประวัติ ช่วงกลางถูกบีบอัด
คัดสรร โน้ตถาวร ทั้งหมดอยู่ใน system prompt
เชิงเหตุการณ์ คลังบทสนทนา ค้นด้วย session_search
เชิงกระบวนการ สกิล รายชื่อ เนื้อหาเปิดเมื่อต้องใช้
ภายนอก provider ส่วนที่แนบกับข้อความของคุณ

หน่วยความจำขณะทำงาน: หน้าต่างบทสนทนา

นี่คือบทสนทนาปัจจุบันบวก system prompt: โมเดลอ่านทั้งหมดใหม่ทุกเทิร์น เมื่อหน้าต่างใกล้เต็ม การบีบอัดจะเริ่มทำงาน โมเดลผู้ช่วยจะย่อช่วงกลางของบทสนทนาเป็นสรุปแบบมีโครงสร้าง ได้แก่ เป้าหมาย ข้อจำกัด สิ่งที่ทำไปแล้ว สิ่งที่ตกลงกัน ส่วนช่วงต้นกับช่วงท้ายคงไว้ตามตัวอักษร ข้อความไม่ได้ถูกลบ: ในฐานข้อมูลแค่เปลี่ยนเครื่องหมายของมัน แล้วโมเดลก็จะไม่เห็นมันอีก

การบีบอัดเป็นเหตุการณ์ที่สังเกตได้ชัด มันใช้เวลา ล้างแคช และเมื่อบีบอัดซ้ำ สรุปเก่าจะถูกเติมต่อ ไม่ได้เขียนใหม่ ความคลาดเคลื่อนจึงสะสมได้ ตัวบีบอัดเปลี่ยนเป็นปลั๊กอินได้: มีการตั้งค่าแยกสำหรับเรื่องนี้คือ context.engine

หน่วยความจำคัดสรร: MEMORY.md และ USER.md

ไฟล์ข้อความธรรมดาสองไฟล์ในโฟลเดอร์ memories ภายในโฮมไดเรกทอรีของ Hermes ใน MEMORY.md เอเจนต์เก็บโน้ตเรื่องสภาพแวดล้อมและงาน ส่วนใน USER.md เก็บโปรไฟล์ผู้ใช้ รายการคั่นด้วยบรรทัดที่มีเครื่องหมาย § ขนาดจำกัดเป็นจำนวนตัวอักษร: ค่าเริ่มต้นคือ 2,200 สำหรับ MEMORY.md และ 1,375 สำหรับ USER.md ลิมิตเปลี่ยนได้ในคอนฟิก ที่นี่ไม่มีการค้นหา: ทั้งสองไฟล์อยู่ใน system prompt ทั้งไฟล์

คนที่เขียนลงไฟล์เหล่านี้มีแค่โมเดล ผ่านเครื่องมือ memory มันเพิ่มรายการ แทนที่รายการโดยอ้างจากข้อความบางส่วน ลบ และทำหลายคำสั่งรวดเดียวได้ แบบสำเร็จทั้งชุดหรือไม่ทำเลยสักคำสั่ง ก่อนบันทึก ข้อความจะถูกตรวจหาความพยายามทำ injection และความลับ ไฟล์จะถูกล็อกระหว่างเขียนและถูกแทนที่ทั้งไฟล์ โมเดลหลักกับรีวิวเบื้องหลังจึงไม่เขียนทับกัน สกิลกลางคืน hermes-dreaming ช่วยดูไม่ให้ไฟล์รกไปด้วยข้อมูลเก่าและรายการซ้ำได้ ส่วนมันแยกการยืนยันข้อเท็จจริงจริง ๆ ออกจากคำที่บังเอิญตรงกันได้อย่างไร อ่านได้ในบทวิเคราะห์ผู้ตัดสินบนคลาวด์

ถ้าเปิด write_approval การเปลี่ยนแปลงจะไม่มีผลทันที แต่รอการอนุมัติด้วยคำสั่ง /memory approve ในเทอร์มินัล Hermes จะถามในแชทตรง ๆ ส่วนใน Telegram และแอปแชทอื่น ๆ ไม่มีคำถามนี้ การเปลี่ยนแปลงทั้งหมดจึงไปต่อคิว และคิวก็สะสมเป็นสัปดาห์ได้ง่าย ๆ ถ้าคุณเปิดการอนุมัติไว้ ให้แวะดู /memory pending

หน่วยความจำเชิงเหตุการณ์: คลังทุกเซสชัน

ข้อความทั้งหมดของทุกเซสชันอยู่ในฐานข้อมูล SQLite state.db รวมถึงข้อความที่ถูกย่อไปตอนบีบอัด หน่วยความจำนี้ไม่ได้เข้าไปในพรอมต์เอง โมเดลดึงบทสนทนาเก่าออกมาด้วยเครื่องมือ session_search และการค้นหาทำงานโดยไม่ใช้โมเดล: เป็นดัชนี full-text ตามคำและตามกลุ่มตัวอักษรสามตัว

ไม่มีการวิเคราะห์รูปคำ คำค้น памяти จะหา память ไม่เจอ (คำรัสเซียคำเดียวกันที่แปลว่า “หน่วยความจำ” แต่คนละรูปผัน) เอเจนต์จึงควรค้นด้วยต้นคำ เช่น памят* ส่วน trigram ก็ช่วยแก้สถานการณ์ได้บางส่วนอยู่แล้ว เซสชันที่จบแล้วจะถูกลบหลัง 90 วันโดยค่าเริ่มต้น

หน่วยความจำเชิงกระบวนการ: สกิล

สกิลคือความรู้แบบ “ทำ X อย่างไร”: โฟลเดอร์ที่มีไฟล์ SKILL.md บางทีก็มีสคริปต์และเทมเพลตด้วย ใน system prompt มีแค่รายชื่อ: ชื่อและคำอธิบายสั้น ๆ ของแต่ละสกิล เนื้อหาเต็มโมเดลจะเปิดเองเมื่องานต้องใช้ คลังสกิลเป็นร้อยตัวจึงกินพื้นที่ในพรอมต์ไม่มาก ข้อสรุปเชิงปฏิบัติ: คำสำคัญที่เอเจนต์ต้องใช้จำสกิลให้ได้ ให้วางไว้ต้นคำอธิบายเลย

สกิลถูกเขียนด้วยเครื่องมือ skill_manage ตามที่คุณขอ หรือเอเจนต์เขียนเองหลังทำงานยาก ๆ เสร็จ มีผู้ดูแล (curator) คอยจัดระเบียบ มันเริ่มทำงานเมื่อเอเจนต์ว่าง และไม่ถี่กว่าช่วงที่กำหนด ค่าเริ่มต้นคือเจ็ดวันครั้ง ผู้ดูแลดูเฉพาะสกิลที่เอเจนต์สร้างเอง: ไม่ได้ใช้ 14 วันจะติดป้ายว่าล้าสมัย ครบ 30 วันจะย้ายไปไว้ในส่วน archive สกิลที่ปักหมุดไว้มันไม่แตะ จะหาสกิลสำเร็จรูปได้ที่ไหน เราเล่าไว้ในบทความเรื่องสกิลและปลั๊กอินสำหรับ Hermes

หน่วยความจำภายนอก: provider

ชั้นที่ห้าจะเปิดใช้หรือไม่ก็ได้: คีย์ memory.provider ในคอนฟิกใช้เลือก provider หน่วยความจำภายนอก (memory provider) หนึ่งตัว มันทำงานคู่กับหน่วยความจำในตัว ไม่ได้มาแทนที่: MEMORY.md คลังบทสนทนา และสกิลยังอยู่ครบ ข้างใน provider จะเป็นอะไรก็ได้ ทั้งฐานข้อมูลเวกเตอร์ กราฟความรู้ แบบจำลองบุคลิกของผู้ใช้ หรือโครงไฟล์ Markdown สิ่งที่มันหาเจอจะไม่ถูกใส่ใน system prompt แต่แนบไปกับข้อความปัจจุบันของคุณ ในส่วน <memory-context>

ชั้นต่าง ๆ ไหลต่อกันอย่างไร

Hermes เรียนรู้ได้โดยไม่ต้องสั่ง “จำไว้” ทุก 10 ข้อความของคุณที่เอเจนต์ไม่ได้แตะหน่วยความจำเลย และทุก 10 ขั้นการทำงานของเครื่องมือที่ไม่มีการแก้สกิล จะมีรีวิวเบื้องหลังเริ่มทำงาน มันคือสำเนาของเอเจนต์ที่ใช้พรอมต์เดียวกันและมีประวัติทั้งหมด งานของมันมีอย่างเดียว: ดูบทสนทนาแล้วตัดสินว่าอะไรควรเก็บ มันเรียก memory หรือ skill_manage เอง เกณฑ์กำหนดด้วย memory.nudge_interval และ skills.creation_nudge_interval

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

การไหลแบบอื่นง่ายกว่านั้น การบีบอัดย้ายข้อความจากชั้นขณะทำงานไปที่คลัง: ทางกายภาพไม่มีอะไรหาย และสรุปจะบอกใบ้โมเดลว่ารายละเอียดหาได้ด้วยการค้นหา การเปลี่ยนแปลงที่สำเร็จผ่านเครื่องมือ memory จะถูกส่งต่อให้ provider ภายนอก ถ้ามี โดย provider ตัดสินเองว่าจะเก็บอะไรไว้ หลังแต่ละเทิร์น Hermes ส่งเทิร์นที่จบแล้วให้ provider โดยปิดบังความลับที่ตรวจเจอไว้ก่อน แล้ว provider จะเลือกตามการตั้งค่าของตัวเองว่าจะดึงอะไรออกมา

หนึ่งเทิร์นของ Hermes Agent: เกิดอะไรขึ้นกับหน่วยความจำก่อนเรียกโมเดล ระหว่างทำงาน หลังตอบ และที่รอยต่อระหว่างเซสชัน (ข้อความในภาพเป็นภาษาอังกฤษ)

ทำไม Hermes ไม่จำสิ่งที่เพิ่งบันทึก

นี่คือสาเหตุที่พบบ่อยที่สุดของ “มันไม่จำ” โมเดลเห็น MEMORY.md และ USER.md เป็นสแนปช็อตที่ถ่ายไว้ตอนเอเจนต์เริ่มทำงาน คุณขอให้จำ เอเจนต์ก็บันทึกลงไฟล์จริง ๆ แต่ system prompt ยังเป็นอันเดิม ในบทสนทนาเดียวกันนี้เอเจนต์น่าจะคำนึงถึงเรื่องใหม่อยู่แล้ว เพราะคำขอของคุณอยู่ในประวัติข้อความ ปัญหาจะโผล่ที่อื่น เช่น คุณบอกอะไรไว้ในแชทหนึ่ง แต่อีกแชทที่เปิดค้างไว้นานแล้วไม่รู้เรื่องนี้

สแนปช็อตจะอัปเดตเมื่อ Hermes อ่านไฟล์หน่วยความจำใหม่: หลังการบีบอัด หรือหลังคำสั่ง /new หรือ /reset ในเทอร์มินัล การเปลี่ยนโมเดลหรือผู้ให้บริการก็สร้างเอเจนต์ใหม่และอัปเดตสแนปช็อตไปด้วย วิธีที่ชัวร์ที่สุดคือเริ่มเซสชันใหม่ด้วยคำสั่ง /new

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

Provider ภายนอกทำงานอย่างไร

หน่วยความจำในตัวเปิดอยู่โดยค่าเริ่มต้น ส่วน provider ภายนอกมีได้มากสุดหนึ่งตัว ค่า none, builtin หรือสตริงว่างใน memory.provider แปลว่าไม่มี ตรวจดูว่าตอนนี้ต่ออะไรอยู่ได้ด้วยคำสั่ง hermes memory status ในเทอร์มินัล ส่วนการเลือกและตั้งค่า provider ใช้ hermes memory setup อย่าสับสนกับคำสั่ง /memory ในแชท ตัวนั้นใช้กับคิวอนุมัติ

เฟรมเวิร์กเรียก provider ที่จุดตายตัวในแต่ละเทิร์น ก่อนเรียกโมเดลจะมีการขอข้อมูลจากหน่วยความจำ: Hermes รอคำตอบได้ถึง 8 วินาที และตลอดเวลานั้นคุณก็ต้องรอด้วย เอกสารเรียกขั้นนี้ว่าทำงานเบื้องหลัง แต่ในโค้ดมันทำให้ทั้งเทิร์นหยุดรอ หลังตอบแล้ว การบันทึกเทิร์นและการเตรียมหน่วยความจำสำหรับเทิร์นถัดไปจะเข้าคิวเบื้องหลัง provider บางตัวจึงมีหน่วยความจำตามหลังหนึ่งเทิร์น: กับข้อความของคุณ มันส่งสิ่งที่หาได้จากข้อความก่อนหน้ามาให้

สิ่งที่ provider หาเจอ Hermes จะห่อไว้ในส่วน <memory-context> พร้อมหมายเหตุถึงโมเดลว่า นี่ไม่ใช่ข้อความใหม่จากผู้ใช้ แต่เป็นข้อมูลอ้างอิงที่ไว้ใจได้ ส่วนนี้ถูกเก็บไว้ในประวัติและส่งซ้ำในคำขอถัด ๆ ไปจนกว่าจะบีบอัด เพื่อไม่ให้แคชพัง เรื่องนี้มีสองด้าน ทุกเทิร์นจะเพิ่มส่วนหน่วยความจำเข้าไปในหน้าต่างอีกหนึ่งส่วน และถ้ามีคำสั่งอันตรายหลุดเข้าไปในที่เก็บของ provider หมายเหตุแบบนี้จะเพิ่มความเสี่ยงที่โมเดลจะทำตาม

ยังมีรายละเอียดเล็ก ๆ ที่ควรรู้ไว้ก่อน ตัวกรองที่คัดข้อความ “ว่าง” ออกไปโดยไม่เรียก provider รู้จักแค่คำภาษาอังกฤษอย่าง ok, thanks, yes ส่วนคำรัสเซีย ок, да และ спасибо (โอเค ใช่ ขอบคุณ) จะเริ่มการค้นหาเต็มรูปแบบ Holographic ตั้งแต่เวอร์ชัน 0.9 ตัดข้อความแบบนี้ทิ้งเองใน 18 ภาษาที่มันรองรับ และไม่ดึงความจำอะไรมาเลย แต่แกนหลักก็ยังส่งคำขอไปหา provider อยู่ดี และการลบข้อเท็จจริงออกจาก USER.md ไม่ได้รับประกันว่ามันจะหายไปจาก provider ด้วย: จะจัดการการแทนที่และการลบอย่างไร provider ตัดสินเอง

Provider หน่วยความจำของ Hermes Agent: เทียบเจ็ดตัวเลือก

จนถึงเวอร์ชัน 0.21.5 (รวม 0.21.5 ด้วย) Hermes มี provider ในตัวเจ็ดตัว: byterover, holographic, honcho, mem0, openviking, retaindb และ supermemory ไม่ต้องติดตั้ง แค่ใส่ชื่อใน memory.provider และใส่คีย์ถ้าจำเป็น

ใน 0.21.6 ภาพเปลี่ยนไป ระหว่าง 2 ถึง 7 ตุลาคม honcho, supermemory, mem0 และ openviking ถูกเอาออกจากแกนหลัก ส่วน hindsight ออกไปก่อนหน้านั้นอีก เมื่อ 23 กันยายน ตอนนี้พวกมันอยู่ในแคตตาล็อกปลั๊กอินทางการ และโค้ดดูแลโดยทีมพัฒนาของบริการนั้น ๆ เอง เรื่องนี้ไม่ควรทำให้การตั้งค่าพัง: ถ้าใน memory.provider เป็น provider ที่เคยอยู่ในตัว Hermes จะติดตั้งมันจากแคตตาล็อกให้เองตอน hermes update หรือตอนเอเจนต์เริ่มทำงาน โดยใช้ชื่อ คีย์ และข้อมูลเดิม ใน 0.21.6 ยังเหลือในตัวสามตัว: byterover, holographic และ retaindb เอกสารประกาศว่าทั้งสามจะออกไปด้วยในวันที่ 15 ตุลาคม 2569 และตอนนั้นรีโพแยกของพวกมันก็กำลังหาผู้ดูแล Holographic ออกไปก่อนกำหนด: 11 ตุลาคมถูกย้ายออกจากแกนหลัก ตั้งแต่รีลีส Hermes v0.21.7 ต้องติดตั้งจากแคตตาล็อก และตอนนี้คนดูแลคือผม รายละเอียดและขั้นตอนอัปเดตอยู่ในบทความเรื่อง holographic ส่วน byterover กับ retaindb ยังอยู่ในแกนหลักทั้งในรีลีส 0.22.0 วันที่ 14 ตุลาคม และ 0.22.5 วันที่ 23 ตุลาคม สาย 0.22 นำอะไรมาอีกบ้าง ดูได้ในสรุป Hermes 0.22

provider หน่วยความจำเจ็ดตัวของ Hermes Agent: ตัวไหนยังอยู่ในแกนหลักในเวอร์ชัน 0.21.6 ตัวไหนย้ายไปแคตตาล็อก และอะไรถูกส่งออกจากเครื่อง (ข้อความในภาพเป็นภาษาอังกฤษ)

Provider ที่เก็บ อะไรถูกส่งออกจากเครื่อง
holographic SQLite บนดิสก์ ไม่มีเลย
byterover ไฟล์ Markdown คำขอถึงโมเดล
retaindb คลาวด์ RetainDB บทสนทนา
honcho คลาวด์หรือเซิร์ฟเวอร์ของคุณเอง บทสนทนา
mem0 คลาวด์ เซิร์ฟเวอร์ หรือในเครื่อง บทสนทนาหรือคำขอถึงโมเดล
openviking เซิร์ฟเวอร์ของคุณเอง บทสนทนา
supermemory คลาวด์หรือเซิร์ฟเวอร์ของคุณเอง บทสนทนา

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

Holographic: ในเครื่องและไม่ใช้โมเดล

เก็บข้อเท็จจริงไว้ในเครื่องในฐานข้อมูล SQLite และในโหมดค่าเริ่มต้นจะไม่เรียกโมเดลเองและไม่ออกเน็ต ตั้งแต่ 11 ตุลาคม มันเป็นปลั๊กอินแยกจากแคตตาล็อก โดยมีผมเป็นคนดูแล ณ วันที่ 30 ตุลาคม แคตตาล็อกให้เวอร์ชัน 0.22.0 ส่วนรีลีสล่าสุดคือ 0.23.1 ข้อเท็จจริงเข้าไปในนั้นเมื่อเอเจนต์บันทึกด้วยเครื่องมือ fact_store นอกจากนี้ยังมีการสกัดอัตโนมัติตอนจบเซสชันที่จะเปิดหรือไม่ก็ได้ ใช้แพตเทิร์นภาษาอังกฤษ รัสเซีย และจีน ข้อเท็จจริงทุกข้อมีระดับความน่าเชื่อถือ: เครื่องมือ fact_feedback เพิ่มให้เมื่อข้อเท็จจริงมีประโยชน์ และลดลงเมื่อไม่มีประโยชน์ โดยค่าเริ่มต้น ข้อเท็จจริงที่ความน่าเชื่อถือต่ำกว่า 0.3 จะไม่ถูกแทรกอัตโนมัติ เกณฑ์นี้ปรับได้

การค้นหาทำงานได้ 18 ภาษา: รูปคำถูกลดรูปด้วย stemmer ส่วนจีน ญี่ปุ่น เกาหลี และไทยเทียบด้วยกลุ่มตัวอักษร สำหรับรัสเซียและอังกฤษ คำที่มีรากเดียวกันหาเจอด้วยพจนานุกรม คำว่า Маши หาข้อเท็จจริงเรื่อง Маша เจอ (ชื่อ Masha คนละรูปผันในภาษารัสเซีย) ชื่อเฉพาะถูกจดจำได้ในทุกระบบตัวเขียนที่มีตัวพิมพ์ใหญ่ และมีชื่อแฝงได้ probe รวบรวมข้อเท็จจริงทั้งหมดเกี่ยวกับคนหนึ่งคน reason รวบรวมข้อเท็จจริงของหลายคนพร้อมกัน ส่วนเวกเตอร์ “โฮโลกราฟิก” HRR ซึ่งเป็นที่มาของชื่อ provider เชื่อมข้อเท็จจริงเข้ากับเอนทิตีโดยไม่ต้องใช้โมเดลเลย ก่อนทุกเทิร์น provider จะแทรกข้อเท็จจริงที่เกี่ยวข้องให้เองไม่เกินห้าข้อ บวกข้อเท็จจริงเกี่ยวกับคนและสิ่งของที่ถูกพูดถึงในข้อความ และกับ “โอเค” หรือ “ขอบคุณ” มันจะไม่ดึงอะไรมาเลย ตั้งแต่เวอร์ชัน 0.14 เปิดการค้นหาตามความหมายผ่าน embedding ได้ ทั้งบนคลาวด์และในเครื่อง และตั้งแต่ 0.18 มี reranker ทดลองที่ใช้โมเดลแยกเรียงลำดับผลลัพธ์ใหม่ ทั้งสองอย่างปิดอยู่โดยค่าเริ่มต้น

มีประวัติของข้อเท็จจริง ถามได้ว่าอะไรเป็นจริง ณ วันที่หนึ่ง ๆ มีการรวมรายการซ้ำโดยไม่เสียประวัติ การลบจริงเมื่อสั่ง “ลืม” และหน่วยความจำแยกสำหรับแต่ละแชท เอเจนต์ของผมใช้ holographic นี่แหละ: กับข้อมูลครอบครัว สิ่งสำคัญคือที่เก็บอยู่กับผมและไม่มีค่าใช้จ่าย และปลั๊กอินกลางคืน hermes-dreaming ก็คอยเทียบหน่วยความจำกับบทสนทนาจริง ทั้งหมดนี้ทำงานอย่างไรโดยละเอียด อยู่ในบทความยาวเรื่อง holographic ส่วนมีอะไรใหม่ในเวอร์ชัน 0.14 ถึง 0.23 อยู่ในบทความเรื่องอัปเดตของ holographic ตอนย้าย แกนหลักจะติดตั้งเวอร์ชันที่อยู่ในแคตตาล็อกในตอนนั้น: ถ้า hermes plugins list แสดงเวอร์ชันเก่ากว่า 0.22.0 ให้อัปเดตปลั๊กอินด้วยคำสั่ง hermes plugins install holographic --force

ByteRover: หน่วยความจำในไฟล์ Markdown

หน่วยความจำเป็นโครงไฟล์ Markdown แบบ “โดเมน — หัวข้อ — ไฟล์” ซึ่งโปรแกรมภายนอก brv เป็นตัวจัดวาง และดึงโมเดลมาช่วยตอนค้นหา โครงไฟล์อยู่บนดิสก์ เปิดดู แก้ด้วยมือ และเก็บใน git ได้ คลาวด์ ByteRover ใช้แค่ซิงก์ คีย์ BRV_API_KEY ไม่บังคับ เหมาะถ้าอยากเห็นและควบคุมว่าเอเจนต์รู้อะไรเกี่ยวกับคุณบ้าง ข้อเสียคือทุกการทำงานจะเปิดโปรเซสแยก และเวลาพังก็พังเงียบ ๆ

RetainDB: คลาวด์ที่มีคิวในเครื่อง

หน่วยความจำบนคลาวด์ที่มีคิวในเครื่อง: ถ้าเน็ตหลุด เทิร์นต่าง ๆ จะสะสมไว้บนดิสก์และส่งตามไปทีหลัง นอกจากข้อเท็จจริงยังเก็บโปรไฟล์ผู้ใช้ “แบบจำลองตัวเอง” ของเอเจนต์ และไฟล์ คำตอบสำหรับแต่ละเทิร์นเตรียมในเบื้องหลัง หน่วยความจำจึงตามหลังหนึ่งถึงสองเทิร์น บริการนี้เสียเงิน ต้องมีคีย์ RETAINDB_API_KEY รายละเอียดสำคัญสำหรับภาษารัสเซีย: ตอนเตรียมส่วนข้อมูลให้โมเดล สตริงจะถูกเทียบกันด้วยตัวอักษรละตินและตัวเลขเท่านั้น ข้อเท็จจริงภาษารัสเซียที่ต่างกันจึงอาจถูกนับเป็นรายการซ้ำ และบางส่วนจะไปไม่ถึงโมเดล

Honcho: ภาพรวมตัวผู้ใช้

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

Mem0: ข้อเท็จจริงในฐานข้อมูลเวกเตอร์

เซิร์ฟเวอร์ mem0 ใช้โมเดลของตัวเองสกัดข้อเท็จจริงจากบทสนทนา ตัดรายการซ้ำ แล้วเก็บทั้งหมดในฐานข้อมูลเวกเตอร์ และก่อนแต่ละเทิร์นก็หาข้อเท็จจริงที่คล้ายกันมาให้ ทำงานได้สามโหมด: คลาวด์ mem0 เซิร์ฟเวอร์ของคุณเอง หรือติดตั้งในเครื่อง ปลั๊กอินส่ง telemetry โดยค่าเริ่มต้น ปิดได้ด้วยตัวแปร MEM0_TELEMETRY=false ตั้งแต่ 6 ตุลาคม ติดตั้งจากแคตตาล็อก โค้ดดูแลโดยทีม mem0 เอง

OpenViking: หน่วยความจำและเอกสาร

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

Supermemory: โปรไฟล์จากบทสนทนา

ตรรกะแบบ “ส่งบทสนทนาไป เดี๋ยวเซิร์ฟเวอร์จัดการเอง”: ปลั๊กอินส่งเทิร์นต่าง ๆ ไป แล้วบริการจะสกัดความทรงจำและโปรไฟล์ผู้ใช้เอง ใช้คลาวด์หรือเซิร์ฟเวอร์ของคุณเอง ถ้าเอเจนต์มีคนใช้หลายคน ก่อนเปิดใช้ให้ตรวจว่าปลั๊กอินแยกผู้ใช้และแชทอย่างไร ตัวนี้ก็ย้ายไปแคตตาล็อกแล้วเช่นกัน

นอกจากเจ็ดตัวนี้ ในแคตตาล็อกปลั๊กอินของ Hermes ยังมี provider จากภายนอกอีกหลายสิบตัว: hindsight, chronicle, cognee, mnemosyne, lancedb และอื่น ๆ ต้องติดตั้งด้วยคำสั่ง hermes plugins install <ชื่อ> แล้วระบุใน memory.provider วิธีตรวจแพ็กเกจก่อนติดตั้ง เราเล่าไว้ในบทความเรื่องสกิลและปลั๊กอิน

เลือก provider หน่วยความจำตัวไหนดีสำหรับ Hermes Agent

เริ่มจากวินิจฉัยก่อน: เอเจนต์ “ไม่จำ” อะไรกันแน่ หลายกรณี provider ก็ช่วยไม่ได้

อาการ สาเหตุ ทำอย่างไร
แชทอื่นไม่รู้เรื่องใหม่ สแนปช็อตหน่วยความจำเก่า /new
“ไม่ได้เรียนรู้อะไรเลย” รายการรออนุมัติ /memory pending
หาบทสนทนาไม่เจอ ไม่มีการวิเคราะห์รูปคำ ค้นด้วยต้นคำ เช่น памят*
หน่วยความจำเต็ม ลิมิตตัวอักษร เพิ่มลิมิต ย่อรายการ
ต้องการค้นหาตามความหมาย แกนหลักไม่มี ตรงนี้แหละที่ต้องใช้ provider

และตรวจด้วยว่าหน่วยความจำเปิดอยู่จริง: ในส่วน memory ของคอนฟิก ตัวที่คุมเรื่องนี้คือ memory_enabled และ user_profile_enabled ค่าเริ่มต้นเปิดทั้งคู่ ถ้ายังต้องการ provider อยู่ ให้กรองตัวเลือกด้วยคำถามสี่ข้อ

ส่งบทสนทนาให้บุคคลที่สามได้ไหม? ถ้าไม่ได้ ก็เหลือตัวเลือกในเครื่อง: holographic หรือปลั๊กอินแบบโลคัลในแคตตาล็อก provider บนคลาวด์จะได้รับข้อความของคุณและคำตอบของเอเจนต์

ใครจ่ายค่าโมเดล? Holographic ไม่ต้องใช้โมเดล ตัวอื่นส่วนใหญ่สกัดข้อเท็จจริงด้วยโมเดล โดยใช้คีย์ของคุณหรือตามแพ็กเกจของบริการ

ต้องจำอะไรกันแน่? ภาพรวมของคน ใช้ honcho หรือ supermemory แม้ USER.md ที่ดูแลดี ๆ มักทำได้ไม่แพ้กัน ข้อเท็จจริงทีละข้อ ใช้ mem0 เอกสารพร้อมหน่วยความจำ ใช้ openviking ส่วนขั้นตอนแบบ “ทำอย่างไร” คือสกิล ไม่ใช่ provider

คุณคุยกับเอเจนต์เป็นภาษาอะไร? หลายอย่างใน provider ออกแบบมาสำหรับภาษาอังกฤษ ทั้งตัวกรอง แพตเทิร์น และพรอมต์สำหรับสกัดข้อมูล ก่อนเปิดใช้อะไรกับบทสนทนาภาษารัสเซีย ให้ทดลองกับสำเนาโปรไฟล์ก่อน ไม่ใช่กับเอเจนต์ที่ใช้งานจริง และดูสามอย่าง: ความหน่วงของคำตอบ token ที่เพิ่มขึ้น และคุณภาพการค้นหา

Hindsight หรือ Honcho

คู่นี้ถูกเอามาเทียบกันบ่อยที่สุด Hindsight สร้างกราฟความรู้: เชื่อมคน โปรเจกต์ และเหตุการณ์เข้าหากัน บันทึกทั้งเทิร์นเองรวมถึงการเรียกเครื่องมือ และมีเครื่องมือแยกที่สรุปข้อคิดจากหน่วยความจำทั้งหมดได้ในครั้งเดียว ทำงานบนคลาวด์ Hindsight หรือในเครื่อง ด้วยฐานข้อมูล PostgreSQL ในตัวหรือเซิร์ฟเวอร์ของคุณเอง โหมดโลคัลต้องมีคีย์สำหรับโมเดล ส่วนตัวปลั๊กอินในโหมดนี้ฟรี Honcho เน้นที่ตัวคน: สร้างภาพรวมของเขาและตอบคำถามเกี่ยวกับเขา ถ้าความเชื่อมโยงระหว่างข้อเท็จจริงสำคัญ ให้ดู Hindsight ถ้าสำคัญที่ภาพรวมของคู่สนทนา ให้ดู Honcho ทั้งคู่ติดตั้งจากแคตตาล็อก: hermes plugins install hindsight หรือ honcho

Holographic หรือ Hindsight

Holographic คือที่เก็บข้อเท็จจริงในเครื่องที่ไม่ใช้โมเดล: ไม่มีค่าใช้จ่ายและไม่ส่งอะไรออกไปข้างนอก และเอเจนต์เป็นคนเขียนข้อเท็จจริงลงไปเอง Hindsight สกัดข้อเท็จจริงด้วยโมเดลแยกและสร้างกราฟความเชื่อมโยง ในโหมดคลาวด์ใช้แค่คีย์ Hindsight Cloud ส่วนถ้าติดตั้งในเครื่อง ต้องมีโมเดลสำหรับสกัดข้อเท็จจริง (บนคลาวด์ที่ใช้คีย์ หรือโมเดลของคุณเอง) และทรัพยากรเครื่องสำหรับรันเซิร์ฟเวอร์ เริ่มจาก holographic กับหน่วยความจำในตัวก็สมเหตุสมผล แล้วค่อยย้ายไป Hindsight เมื่อเจอข้อจำกัดเรื่องการค้นหาตามความเชื่อมโยง

คำถามที่พบบ่อย

Hermes จำเป็นต้องมี provider หน่วยความจำภายนอกไหม?

สำหรับผู้ใช้คนเดียวและงานทั่วไป ส่วนใหญ่ไม่จำเป็น ชั้นในตัวก็พอ: MEMORY.md และ USER.md เก็บเรื่องหลัก คลังค้นได้ผ่าน session_search ขั้นตอนต่าง ๆ อยู่ในสกิล provider จำเป็นเมื่อข้อเท็จจริงมีมากเกินกว่าที่ลิมิตจะรับไหว และต้องการค้นหาตามความหมาย

ทำไม Hermes ไม่จำสิ่งที่ขอให้จำไว้?

ส่วนใหญ่มาจากหนึ่งในสองสาเหตุ แบบแรก บันทึกแล้ว แต่แชทนี้ยังใช้สแนปช็อตหน่วยความจำเก่า แก้ได้ด้วย /new แบบที่สอง เปิด write_approval ไว้ และรายการกำลังรออนุมัติใน /memory pending

อัปเดต Hermes แล้ว provider หน่วยความจำจะพังไหม?

ไม่ควรพัง ถ้าใน memory.provider ระบุ provider ที่เคยอยู่ในตัวไว้ Hermes จะติดตั้งมันจากแคตตาล็อกปลั๊กอินให้เองตอนอัปเดตหรือตอนเริ่มทำงาน และเก็บชื่อ คีย์ และข้อมูลไว้เหมือนเดิม ผลลัพธ์จะแจ้งในเทอร์มินัลหรือในแชท การตั้งค่า security.allow_lazy_installs: false จะปิดการติดตั้งอัตโนมัติ แล้ว Hermes จะแค่แสดงคำสั่งให้ ปลั๊กอินหน่วยความจำอื่น ๆ และ provider ที่คุณต่อเป็นครั้งแรก ให้ติดตั้งเอง: hermes plugins install <ชื่อ> Holographic ย้ายไปแคตตาล็อกเมื่อ 11 ตุลาคม ถ้าหลังอัปเดตแล้วหน่วยความจำปิดไป ต้องทำอย่างไร ดูได้ในบทความเรื่อง holographic

MEMORY.md ของ Hermes Agent อยู่ที่ไหน?

ในโฟลเดอร์ memories ของโฮมไดเรกทอรี Hermes: ค่าเริ่มต้นคือ ~/.hermes/memories/ และ USER.md อยู่ข้าง ๆ MEMORY.md แต่ละโปรไฟล์ของ Hermes มีโฮมไดเรกทอรีของตัวเอง จึงมีหน่วยความจำของตัวเองด้วย ถ้าจะแก้ด้วยมือ ให้แก้ตอนที่เอเจนต์ไม่ได้ทำงาน และคงบรรทัดคั่น § ระหว่างรายการไว้

Provider หน่วยความจำของ Hermes ตัวไหนทำงานในเครื่องได้?

ทำงานในเครื่องทั้งหมดและไม่ใช้โมเดล คือ holographic ส่วนที่เก็บอยู่บนเครื่องคุณแต่ใช้โมเดลในการค้นหาหรือสกัดข้อเท็จจริง ได้แก่ byterover, Hindsight ในโหมดโลคัล และ mem0 แบบติดตั้งในเครื่อง ข้อมูลอยู่กับคุณ แต่ข้อความที่โมเดลวิเคราะห์จะถูกส่งไปที่ที่โมเดลทำงานอยู่: ถ้าโมเดลอยู่บนคลาวด์ ก็ไปที่ผู้ให้บริการของโมเดลนั้น

จะเพิ่มขนาดหน่วยความจำของ Hermes ได้อย่างไร?

ลิมิตของ MEMORY.md และ USER.md กำหนดในคอนฟิก ส่วน memory: memory_char_limit และ user_char_limit จำไว้ว่าทั้งสองไฟล์ถูกส่งไปทั้งไฟล์ในทุกคำขอ ทุก ๆ พันตัวอักษรจึงเป็นค่าใช้จ่ายที่เพิ่มขึ้นแบบถาวร ที่มีประโยชน์กว่าคือเขียนรายการให้สั้นและแยกกัน เอเจนต์จะได้แทนที่ทีละรายการโดยไม่ต้องเขียนใหม่ทั้งหมด

ถ้ายังไม่ได้ติดตั้ง Hermes เริ่มจากการติดตั้งและเชื่อมต่อกับ Telegram แล้วค่อยไปดูการตั้งค่าหลังติดตั้ง

แหล่งข้อมูล

  1. Hermes Agent: หน่วยความจำถาวร
  2. Hermes Agent: provider หน่วยความจำ
  3. Hermes Agent v0.21.6: รีลีส
  4. Hermes Agent v0.21.7: รีลีสที่ไม่มี holographic ในตัวแล้ว
  5. Holographic 0.23.1: เอกสารของปลั๊กอิน
  6. Hermes: รายการ holographic ในแคตตาล็อกทางการ
  7. Hermes Agent: ซอร์สโค้ดของ provider หน่วยความจำ
  8. Hermes Agent v0.22.5: provider หน่วยความจำในตัว
คนกันเองอยู่ใกล้ ๆถามคนกันเอง แชทตอบเร็วกว่าค้นหาเองแชทหลักของไอที ปาร์ตี้ พัทยา: คนสาย IT สายดิจิทัล และผู้ประกอบการ ที่เคยผ่านเรื่องเดียวกันมาแล้ว เริ่มตั้งแต่กรกฎาคม 2566 แชทใช้ภาษารัสเซีย ชาวต่างชาติและคนไทยเข้ามาได้เสมอเข้าแชท (ภาษารัสเซีย)

อ่านเรื่องที่เกี่ยวข้อง