SSD Nodes Learn 🎉 VPS เริ่ม $5.50/เดือน
คู่มือ Matt Connorโดย Matt Connor · อัปเดตเมื่อ 2026-08-13

Compartment คืออะไร วิธีเก็บหน่วยความจำ Agent แบบออฟไลน์

เรียนรู้การใช้งาน Compartment เพื่อเก็บหน่วยความจำ Agent แบบเข้ารหัสบนเครื่องส่วนตัว พร้อมวิเคราะห์โมเดลภัยคุกคามและสิ่งที่ต้องทำเมื่อทำรหัสผ่านสูญหายในเวอร์ชัน 4.6.0

สิ่งที่ Compartment ทำแตกต่างออกไป

Compartment คือหน่วยความจำสำหรับ Agent ที่เก็บทุกบันทึกไว้ในรูปแบบเข้ารหัสบนเครื่องที่สร้างข้อมูลนั้นขึ้นมา และไม่มีการติดต่อกับบริการเครือข่ายใดๆ ทั้งสิ้น มีสองทางเลือกที่ทำให้มันแตกต่างจากหน่วยความจำ Agent รูปแบบอื่น: Vault เป็นไฟล์ปิดผนึกไฟล์เดียวที่เปิดได้ด้วยรหัสผ่านของคุณเท่านั้น และขั้นตอนการทำ embedding จะทำงานในเครื่อง ดังนั้นข้อความในหน่วยความจำจึงไม่ถูกส่งไปที่ใดเพื่อแปลงเป็นเวกเตอร์ เวอร์ชัน 4.6.0 ถูกเผยแพร่เมื่อวันที่ 10 สิงหาคม 2026 โดยใช้สัญญาอนุญาต Apache-2.0 และติดตั้งผ่าน PyPI

นี่คือการกล่าวอ้างถึงโมเดลภัยคุกคาม คู่มือนี้จึงปฏิบัติต่อข้อมูลดังกล่าวในฐานะโมเดลภัยคุกคาม การเข้ารหัสข้อมูลขณะจัดเก็บ (encryption at rest) ร่วมกับการออกแบบที่ทำงานแบบออฟไลน์ช่วยปกป้องรายการสิ่งที่กำหนดไว้ แต่ก็ยังเปิดช่องโหว่ในส่วนอื่น ซึ่งช่องว่างเหล่านั้นคือจุดที่ปัญหาในการใช้งานจริงมักจะเกิดขึ้น

คู่มือนี้อ้างอิงตามเอกสารประกอบและบันทึกประจำรุ่นของโครงการ ซึ่งอ่านเมื่อวันที่ 11 สิงหาคม 2026 Compartment มีแอปพลิเคชันสำหรับเดสก์ท็อป โดยมีเมนูบนแถบเมนูใน macOS และไอคอนในพื้นที่แจ้งเตือนบน Windows นอกเหนือจากเครื่องมือบรรทัดคำสั่ง (command line tool) และการป้อนรหัสผ่านไม่สามารถทำผ่านคอนเทนเนอร์แบบอัตโนมัติได้ โปรดถือว่าข้อมูลต่อไปนี้เป็นพฤติกรรมตามเอกสาร ไม่ใช่พฤติกรรมที่ผ่านการวัดผลจากที่นี่ ควรทดสอบบนเครื่องสำรองก่อนที่จะนำไปใช้กับข้อมูลจริง

การเข้ารหัสข้อมูลที่จัดเก็บ (Encryption at Rest) ปกป้องอะไรบ้าง

Vault ถูกปิดผนึกด้วย XChaCha20-Poly1305 ซึ่งเป็น cipher แบบ AEAD (authenticated encryption with associated data) และ keyslot ที่เก็บ master key จะถูกห่อหุ้มด้วย Argon2id ซึ่งเป็นฟังก์ชันแฮชรหัสผ่านที่ออกแบบมาให้ทำงานช้าและใช้หน่วยความจำสูง ผลลัพธ์ที่ตามมามีสองประการ ประการแรก สำเนาของไฟล์บนดิสก์ที่ถูกขโมยไป ในการสำรองข้อมูลเก่า หรือที่แนบมากับตั๋วสนับสนุน (support ticket) จะเป็นเพียงชุดข้อมูลไบต์ที่ไม่มีความหมายใดๆ ประการที่สอง หากบิตใดบิตหนึ่งเปลี่ยนไป การตรวจสอบความถูกต้องจะล้มเหลวทันทีเมื่อเปิดไฟล์ ทำให้ความเสียหายของข้อมูลกลายเป็นข้อผิดพลาดที่แจ้งเตือนชัดเจน แทนที่จะให้ผลลัพธ์ที่ผิดพลาด

เวกเตอร์การฝัง (embedding vectors) ก็ถูกเข้ารหัสเช่นกัน ซึ่งมีความสำคัญมากกว่าที่คิด การฝังไม่ใช่การแฮช งานวิจัยเกี่ยวกับการย้อนกลับเวกเตอร์การฝัง (embedding inversion) สามารถกู้คืนข้อความต้นฉบับที่อ่านได้จากตัวเวกเตอร์เพียงอย่างเดียว ดังนั้นดัชนีเวกเตอร์ที่เป็นข้อความธรรมดา (plaintext) ซึ่งวางอยู่ข้างฐานข้อมูลที่เข้ารหัส จึงไม่ต่างจากการเปิดฐานข้อมูลทิ้งไว้ Compartment จะไม่เขียนดัชนีที่เป็นข้อความธรรมดาลงบนดิสก์

การลบข้อมูลคือการลบจริง แต่ละระเบียน (record) จะมีคีย์ของตัวเอง และ compartment forget --shred จะทำลายคีย์นั้นทิ้ง ทำให้ ciphertext ที่หลงเหลืออยู่ไม่สามารถถูกถอดรหัสได้โดยใครก็ตาม รวมถึงตัวคุณเองด้วย เมื่อเปรียบเทียบกับการลบแถวข้อมูลออกจากไฟล์ฐานข้อมูล ซึ่งโดยปกติแล้วข้อมูลจะยังคงอ่านได้ในหน้าว่าง (free pages) จนกว่าจะมีข้อมูลอื่นมาเขียนทับ

การทำงานแบบออฟไลน์คืออีกครึ่งหนึ่งที่สำคัญ ข้อมูลจะไม่มีการอัปโหลดขึ้นไปที่ใด ดังนั้นจึงไม่มีบัญชีผู้ให้บริการที่ถือครองความทรงจำของคุณ และไม่มี API key ที่จะทำให้ข้อมูลรั่วไหลได้

สิ่งที่ Compartment ไม่สามารถป้องกันได้

ข้อกล่าวอ้างเรื่องความปลอดภัยสิ้นสุดลงที่ขอบเขตของ vault และขอบเขตนั้นอยู่ใกล้กว่าที่เห็น

เอเจนต์อ่านข้อความแบบ plaintext ระบบ Recall จะถอดรหัสหน่วยความจำและส่งข้อความนั้นให้กับเอเจนต์ หากเอเจนต์นั้นเป็นโมเดลที่โฮสต์อยู่บนคลาวด์ หน่วยความจำจะถูกส่งไปยังผู้ให้บริการโมเดลภายใน prompt ถัดไป เช่นเดียวกับข้อมูลอื่น ๆ ใน context window การเข้ารหัสข้อมูลที่จัดเก็บ (encryption at rest) ช่วยปกป้องไฟล์ แต่ไม่ได้ปกป้องขั้นตอนการดึงข้อมูล ดังนั้นกฎใน การเก็บความลับให้ห่างจาก AI agents จึงไม่ได้ผ่อนปรนลงเพียงเพราะที่จัดเก็บมีการเข้ารหัส รหัสผ่านที่ถูกบันทึกเป็นหน่วยความจำคือรหัสผ่านที่คุณตั้งค่าไว้ให้วางลงใน prompt โดยอัตโนมัติ

vault ที่ปลดล็อกอยู่บนเครื่องที่กำลังทำงานถือว่าเปิดอยู่ บันทึกความปลอดภัยของโปรเจกต์ระบุเรื่องนี้ไว้อย่างชัดเจน ในขณะที่ vault ถูกปลดล็อก กุญแจหลัก (master key) และชุดข้อมูลที่กำลังใช้งานจะอยู่ใน RAM ซึ่ง Python ไม่สามารถรับประกันได้ว่าบัฟเฟอร์จะถูกล้างข้อมูลอย่างสมบูรณ์ และไฟล์ swap หรือไฟล์ hibernation อาจเขียนหน่วยความจำนั้นลงบนดิสก์ได้ มัลแวร์ที่รันในสิทธิ์ผู้ใช้ของคุณไม่จำเป็นต้องถอดรหัส เพราะมันสามารถร้องขอข้อมูลจาก vault ที่ปลดล็อกอยู่แล้วได้โดยตรง

ข้อมูลระบุตัวตนของผู้เรียก (caller identity) เป็นเพียงการประกาศ Namespace สามารถถูกจำกัดตามผู้เรียกได้ แต่ชื่อของผู้เรียกนั้นได้รับมาจากโฮสต์โพรเซส ดังนั้นโฮสต์ที่แจ้งชื่อเท็จจะได้รับสิทธิ์ตามที่มันอ้าง สิทธิ์ของ Namespace เป็นเพียงการจัดระเบียบ ไม่ใช่ขอบเขตความปลอดภัยในการป้องกันโปรแกรมที่เป็นอันตรายในเครื่อง

การทำลายไฟล์ (shredding) ไม่สามารถจัดการกับสำเนาได้ forget --shred จะทำลายกุญแจภายในไฟล์ปัจจุบันเท่านั้น การสำรองข้อมูลที่ทำไว้ก่อนการทำลายไฟล์จะยังคงมีบันทึกนั้นอยู่ และยังคงเปิดได้ด้วยรหัสผ่านของวันนั้น

รหัสผ่านที่อ่อนแอทำให้ทุกอย่างจบลง Argon2id ทำให้การเดารหัสผ่านแต่ละครั้งมีต้นทุนสูง แต่ไม่ได้ช่วยป้องกันรหัสผ่านที่ปรากฏอยู่ในรายการคำศัพท์ทั่วไป (word list)

การติดตั้ง Compartment จากรุ่นที่กำหนดไว้ (pinned release)

Compartment ต้องการ Python 3.11 หรือใหม่กว่า โปรเจกต์นี้มีการพัฒนาอย่างรวดเร็ว โดยมีถึง 30 เวอร์ชันบน PyPI ณ วันที่ 10 สิงหาคม 2026 ดังนั้นควรระบุเวอร์ชันที่ต้องการแทนการติดตั้งเวอร์ชันล่าสุดในขณะนั้น

python3 --version
pip install "compartment==4.6.0"
compartment --version
compartment init

compartment --version ควรแสดงเวอร์ชันที่คุณได้ระบุไว้ หาก shell ตอบกลับมาว่า compartment: command not found แสดงว่าไดเรกทอรีที่ติดตั้งไม่อยู่ใน PATH ของคุณ ซึ่งในระบบส่วนใหญ่ไดเรกทอรีนั้นคือ ~/.local/bin ทั้งนี้ pipx install compartment==4.6.0 และ uv tool install compartment==4.6.0 จะหลีกเลี่ยงปัญหานี้โดยการจัดการ path ของตนเอง

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

ตรวจสอบผลลัพธ์ก่อนที่จะเชื่อมต่อการทำงานใดๆ เข้ากับระบบ

compartment status

Vault ที่ทำงานปกติจะรายงานสถานะว่าปลดล็อกแล้ว หากรายงานว่าล็อกอยู่ ให้รันคำสั่ง compartment unlock แล้วป้อนรหัสผ่าน การรีสตาร์ทเครื่องจะทำให้ vault กลับมาล็อกอีกครั้ง เนื่องจากข้อมูลรับรองที่ใช้เปิด vault ขึ้นอยู่กับความลับที่สร้างขึ้นใหม่ในแต่ละรอบการบูต สำหรับบน macOS คุณสามารถใช้ compartment unlock --keychain เพื่อให้ vault ยังคงปลดล็อกอยู่หลังรีบูตได้ โดยการจัดเก็บข้อมูลรับรองนั้นไว้ใน system keychain

ตำแหน่งที่จัดเก็บข้อมูลจริง

ค่าเริ่มต้นของ vault คือ ~/.compartment/memory.vault คุณสามารถระบุตำแหน่งอื่นได้ด้วย --vault PATH ในทุกคำสั่ง หรือใช้ตัวแปรสภาพแวดล้อม COMPARTMENT_VAULT

ไฟล์เพียงไฟล์เดียวนั้นคือที่เก็บข้อมูลทั้งหมด โดยจะเปิดขึ้นด้วยส่วนหัวที่บรรจุเวอร์ชันของรูปแบบและ Argon2id keyslots ตามด้วยข้อมูลที่ถูกปิดผนึก (sealed payload) และรายการบันทึก (journal entries) ที่จะถูกเพิ่มเข้ามาเมื่อมีความทรงจำใหม่ๆ เข้ามา รายการบันทึกแต่ละรายการจะถูกล้อมรอบด้วยความยาวและค่า CRC (cyclic redundancy check) ของความยาวนั้น เพื่อให้การเขียนที่ถูกขัดจังหวะจากการล่มของระบบถูกระบุว่าเป็นรายการที่ไม่สมบูรณ์ แทนที่จะถูกอ่านเป็นข้อมูลปกติ กระบวนการบีบอัด (compaction) จะทำการเรียงลำดับข้อมูลใน vault เขียนลงไฟล์ชั่วคราว สั่ง fsync แล้วจึงเปลี่ยนชื่อไฟล์แทนที่ไฟล์เดิม ซึ่งหมายความว่าโปรแกรมอ่านข้อมูลจะไม่พบ vault ที่เขียนค้างไว้ครึ่งๆ กลางๆ

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

compartment uninstall จะลบซอฟต์แวร์ออกแต่ยังคงเก็บ vault ไว้ ให้ใช้แฟล็ก --purge เฉพาะเมื่อคุณต้องการลบข้อมูลจริงๆ เท่านั้น

การเชื่อมต่อเข้ากับเอเจนต์

คำสั่งเดียวสามารถเชื่อมต่อไคลเอนต์ที่รองรับได้

compartment integrate --list
compartment integrate claude

สำหรับ Claude Code ที่เขียน entry ของเซิร์ฟเวอร์ MCP (model context protocol) และ hook ของ PostToolUse ลงใน ~/.claude/settings.json โดยจะสำรองไฟล์ไว้ก่อน ติดตั้ง skill /compartmentalize ไว้ภายใต้ ~/.claude/skills/ และเพิ่ม managed block ลงใน ~/.claude/CLAUDE.md เพื่อแจ้งเอเจนต์ว่า Compartment จะเข้ามาแทนที่หน่วยความจำแบบไฟล์ที่เคยใช้งานอยู่ ให้ยืนยันทั้งสองส่วนดังนี้:

compartment hook status
compartment recent

หากต้องการลงทะเบียนเซิร์ฟเวอร์ด้วยตนเอง:

claude mcp add --scope user compartment -- \
    compartment --vault ~/.compartment/memory.vault --caller claude-code serve

โฮสต์อื่นที่รองรับ MCP สามารถใช้งานเซิร์ฟเวอร์เดียวกันได้โดยใช้ชื่อเรียกของตนเอง

{ "mcpServers": { "compartment": {
    "command": "compartment",
    "args": ["--vault", "/path/to/memory.vault",
             "--caller", "your-agent-name", "serve"] } } }

กำหนดค่า --caller ให้กับแต่ละโฮสต์ไม่ซ้ำกัน ค่านี้เป็นป้ายกำกับที่บันทึกใน audit log และเป็นคีย์ที่ใช้ในการกำหนดสิทธิ์ namespace ดังนั้นการใช้ชื่อซ้ำกันจะทำให้ทั้งสองส่วนนี้ใช้งานไม่ได้

หาก Claude Code ได้เขียนข้อเท็จจริงลงในไฟล์หน่วยความจำของตนเองแล้ว compartment import-claude --dry-run จะแสดงรายการที่จะถูกย้ายก่อนที่จะมีการดำเนินการใดๆ โปรดอ่าน สิ่งที่ Claude Code จัดเก็บไว้ในไฟล์หน่วยความจำ ก่อน เพราะการนำเข้าบันทึกย้อนหลังหนึ่งปีลงใน vault ใหม่ อาจทำให้พื้นที่จัดเก็บหน่วยความจำเต็มไปด้วยข้อมูลที่ไม่มีใครต้องการเก็บไว้

ความเร็วของ local vault เป็นอย่างไร

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

ChartCompartment published local latency, milliseconds
The data behind this chart
[
  {
    "label": "Store one memory, end to end",
    "latency_ms": 40
  },
  {
    "label": "Embed one memory, bundled model",
    "latency_ms": 25
  },
  {
    "label": "Hybrid search, median",
    "latency_ms": 11.6
  },
  {
    "label": "Vector search at 20k records, p95",
    "latency_ms": 0.68
  }
]

การจัดเก็บหน่วยความจำหนึ่งรายการใช้เวลา 40 ms และการค้นหาแบบ vector search ในระเบียนจำนวน 20,000 รายการใช้เวลา 0.68 ms สำหรับค่าเปอร์เซ็นไทล์ที่ 95 เหตุผลที่โครงการสนับสนุนให้เก็บหน่วยความจำไว้ในเครื่องนั้นเป็นเรื่องของคณิตศาสตร์: การรับส่งข้อมูลผ่านเครือข่ายไปยัง hosted memory API เพียงครั้งเดียว มักมีต้นทุนสูงกว่าค่ามัธยฐานที่ 11.6 ms ของการทำ hybrid search ทั้งหมดในที่นี้

รายละเอียดการออกแบบ 2 ประการอธิบายตัวเลขการค้นหาเหล่านี้ได้ สำหรับระเบียนที่ต่ำกว่า 20,000 รายการ Compartment จะเปรียบเทียบ query กับทุก vector ดังนั้นผลลัพธ์ที่ได้จึงมีความแม่นยำโดยสมบูรณ์ตามโครงสร้างแทนที่จะเป็นค่าประมาณ หากเกินจำนวนดังกล่าว ระบบจะเปลี่ยนไปใช้ HNSW (hierarchical navigable small world) ซึ่งเป็นดัชนีแบบประมาณการที่แลกความแม่นยำเพียงเล็กน้อยเพื่อความเร็ว นอกจากนี้ vault ยังบันทึกค่า SHA-256 hash ของ embedding model ไว้ และจะปฏิเสธการเปิดหากใช้ model ที่ต่างออกไป เนื่องจาก vector จากสอง model ที่แตกต่างกันสามารถนำมาเปรียบเทียบกันได้โดยไม่ปรากฏข้อผิดพลาดใดๆ แต่คะแนนที่ได้กลับไม่มีความหมายใดๆ เลย

การสำรองข้อมูลและสำเนาที่คุณยังเปิดใช้งานได้ในปีถัดไป

Vault ที่ถูกล็อกไว้คือไฟล์แบบพกพาไฟล์เดียว ดังนั้นการย้ายข้อมูลจึงทำได้เพียงแค่การคัดลอก

compartment lock
scp ~/.compartment/memory.vault other-machine:
compartment --vault memory.vault unlock

ให้ล็อกไฟล์ก่อนเสมอ การคัดลอกในขณะที่ agent กำลังเขียนข้อมูลอาจทำให้ได้รายการ journal ที่ถูกตัดตอนกลางคัน แม้ว่าการทำ CRC framing จะช่วยให้โปรแกรมอ่านข้ามส่วนที่ขาดหายไปนั้นได้ แต่ข้อมูลภายในส่วนนั้นจะสูญหายไปอย่างถาวร compartment lock --sign จะทำการผนึกไฟล์ด้วย Ed25519 manifest เพื่อให้เครื่องปลายทางสามารถตรวจสอบได้ว่าสำเนาที่ได้รับมานั้นสมบูรณ์โดยไม่จำเป็นต้องถือ passphrase ไว้

เนื่องจากไฟล์ถูกผนึกไว้แล้ว การจัดเก็บใน cloud storage ทั่วไปจึงเป็นทางเลือกที่ยอมรับได้ นี่คือจุดที่การเข้ารหัสข้อมูลขณะจัดเก็บ (encryption at rest) แสดงผลลัพธ์ให้เห็นโดยตรง นั่นคือปลายทางที่ใช้สำรองข้อมูลจะไม่สามารถมองเห็นข้อมูลใน memory ได้เลย

คำเตือนสองประการ: การทำลายข้อมูล (shredding) ไม่ส่งผลไปถึงไฟล์สำรอง ดังนั้นบันทึกที่คุณทำลายด้วยการเข้ารหัสไปในวันนี้ จะยังคงอ่านได้ในสำเนาของสัปดาห์ที่แล้วสำหรับใครก็ตามที่มี passphrase ของสัปดาห์ที่แล้ว และ compartment export --plaintext จะเขียนไฟล์ vault ทั้งหมดโดยไม่มีการเข้ารหัส ซึ่งเป็นเครื่องมือที่ถูกต้องสำหรับการย้ายข้อมูลไปยังระบบอื่น แต่เป็นไฟล์ที่ไม่ควรทิ้งไว้ใน ~/Downloads

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

การจัดการกุญแจ การหมุนเวียน และปัจจัยที่สอง

compartment rekey
compartment 2fa enable
compartment 2fa status

rekey จะเปลี่ยนรหัสผ่านโดยการห่อหุ้ม master key ใหม่ใน keyslot ของไฟล์ปัจจุบัน สำเนาเก่าจะยังคงใช้รหัสผ่านเดิม เนื่องจากข้อมูลเหล่านั้นถูกปิดผนึกไว้ก่อนที่จะมีการเปลี่ยนแปลงและไม่มีกระบวนการใดเข้าไปแก้ไขข้อมูลเหล่านั้นได้ คุณควรหมุนเวียนสำเนาเหล่านั้นด้วย หรือยอมรับว่ารหัสผ่านที่ยกเลิกไปแล้วยังคงสามารถเปิดไฟล์บางอย่างได้อยู่

2fa enable จะเพิ่ม keyfile เข้ามาเป็นปัจจัยที่สอง โดยจะนำไปรวมกับรหัสผ่านในระหว่างขั้นตอนการสร้างกุญแจ (key derivation) ทำให้ต้องใช้ทั้งสองอย่างในการเปิด vault ซึ่งนั่นหมายความว่าคุณมีโอกาสทำสิ่งของสูญหายเพิ่มขึ้นเป็นสองเท่า ควรเก็บ keyfile ไว้แยกจากเครื่องที่เก็บ vault

สำหรับสคริปต์และ CI (continuous integration) รหัสผ่านสามารถส่งผ่านตัวแปรสภาพแวดล้อม COMPARTMENT_PASSPHRASE ได้ แต่ unlock --passphrase-stdin สามารถอ่านรหัสผ่านจาก pipe ได้ ซึ่งแนะนำให้ใช้ pipe มากกว่า เนื่องจากตัวแปรสภาพแวดล้อมสามารถถูกอ่านได้โดยกระบวนการอื่นที่รันด้วยผู้ใช้เดียวกัน และมักจะหลุดไปอยู่ใน log ของงานที่ทำ

ประวัติการตรวจสอบ (audit history) จะถูกเชื่อมโยงด้วย hash และ compartment audit verify จะทำการไล่ตรวจสอบประวัติและรายงานจุดที่เสียหายจุดแรกที่พบ ควรเรียกใช้งานคำสั่งนี้หลังจากทำการกู้คืนข้อมูลทุกครั้ง เพราะเป็นช่วงเวลาที่ไฟล์ที่ถูกตัดทอนอย่างเงียบๆ จะแสดงปัญหาออกมาให้เห็น

จะเกิดอะไรขึ้นเมื่อคุณทำ passphrase หาย

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

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

Compartment หรือเซิร์ฟเวอร์หน่วยความจำ

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

เมื่อเครื่องหลายเครื่องต้องการใช้หน่วยความจำเดียวกันในเวลาเดียวกัน นั่นถือเป็นปัญหาของเซิร์ฟเวอร์ การโฮสต์เซิร์ฟเวอร์หน่วยความจำ Mem0 บน VPS ด้วยตนเอง คือคำตอบสำหรับปัญหานี้ โดยมีจุดเชื่อมต่อเดียว รองรับไคลเอนต์จำนวนมาก และหน่วยความจำที่คงอยู่ยาวนานกว่าตัวแล็ปท็อป ต้นทุนที่เกิดขึ้นควรระบุให้ชัดเจน เซิร์ฟเวอร์ดังกล่าวรันกระบวนการที่สามารถอ่านข้อมูลที่จัดเก็บไว้ได้ ดังนั้นแบบจำลองภัยคุกคาม (threat model) ของคุณจึงครอบคลุมถึง VPS และทุกคนที่สามารถเข้าถึง API ของเซิร์ฟเวอร์นั้นได้

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

FAQ

การเข้ารหัสของ Compartment ป้องกันอะไรบ้าง?

มันช่วยป้องกันตัวไฟล์ โดย vault จะถูกปิดผนึกด้วย XChaCha20-Poly1305 ส่วน keyslots จะถูกห่อหุ้มด้วย Argon2id และ embedding vectors ก็ถูกเข้ารหัสไว้เช่นกัน ดังนั้นหากดิสก์ถูกขโมยหรือมีการนำ backup เก่าไปใช้ ข้อมูลที่ได้จะเป็นเพียงชุดไบต์ที่ไม่สามารถอ่านค่าได้ อย่างไรก็ตาม มันไม่ได้ป้องกัน vault ที่ถูกปลดล็อกไว้บนเครื่องที่กำลังทำงานอยู่ เนื่องจาก master key จะถูกเก็บไว้ใน RAM ในขณะที่ vault เปิดใช้งานอยู่ และมันไม่ได้ควบคุมการทำงานของ agent หลังจากที่ระบบเรียกคืนข้อมูลกลับมาเป็น plaintext แล้ว

หาก Compartment ออฟไลน์อยู่ ความทรงจำของฉันจะยังเป็นส่วนตัวจากผู้ให้บริการโมเดลหรือไม่?

เป็นส่วนตัวจนกว่าจะมีการเรียกคืนข้อมูลเท่านั้น การจัดเก็บและการค้นหาเกิดขึ้นโดยไม่ต้องใช้เครือข่าย และ embedding model ทำงานภายในเครื่อง ดังนั้นจึงไม่มีข้อมูลใดออกจากเครื่องในขณะที่เขียนข้อมูล สำหรับในขั้นตอนการอ่าน agent จะได้รับข้อมูลเป็น plaintext และหาก agent นั้นเป็นโมเดลที่โฮสต์อยู่บนคลาวด์ ความทรงจำนั้นจะถูกนำไปใส่ใน prompt และส่งไปยังผู้ให้บริการเช่นเดียวกับข้อมูลอื่น ๆ ใน context window ห้ามจัดเก็บข้อมูลรับรอง (credential) ไว้ในรูปแบบความทรงจำโดยเด็ดขาด

จะเกิดอะไรขึ้นหากฉันทำรหัสผ่านของ Compartment หาย?

vault จะไม่สามารถกู้คืนได้ ซึ่งเป็นไปตามการออกแบบ Compartment ไม่ได้สร้าง seed หรือ recovery phrase และไม่มีข้อมูลรับรองใด ๆ ที่คุณไม่ได้ถือครองไว้ ดังนั้นจึงไม่มีสิ่งใดให้รีเซ็ตได้ ให้เก็บรหัสผ่านไว้ในโปรแกรมจัดการรหัสผ่าน (password manager) เก็บไฟล์ 2FA keyfile ไว้แยกจากเครื่องที่เก็บ vault และตรวจสอบให้แน่ใจว่าคุณสามารถปลดล็อกไฟล์สำเนาได้ก่อนที่จะเริ่มเก็บข้อมูลสำคัญใด ๆ ลงใน vault

สองเครื่องสามารถใช้ Compartment vault ร่วมกันได้หรือไม่?

ไม่ได้ในเวลาเดียวกัน vault ที่ล็อกอยู่จะเป็นไฟล์เดี่ยวที่พกพาได้ และวิธีการที่แนะนำคือให้ล็อกไฟล์ คัดลอกไฟล์ แล้วจึงปลดล็อกบนอีกเครื่องหนึ่งด้วย --vault ระบบไม่มีการเข้าถึงพร้อมกัน ดังนั้นหากสองเครื่องเขียนข้อมูลลงในไฟล์เดียวกัน ข้อมูลความทรงจำจะสูญหาย ให้รัน memory server หากคุณต้องการใช้งานในลักษณะนั้น

#agent-memory#compartment#encryption#offline#privacy