Octobrain 0.7.0: ตอนนี้ความจำของ AI คุณหลับ ลืม และโฟกัสได้แล้ว
ความจำที่มีแต่โตขึ้นเรื่อยๆ ไม่ใช่ความจำ มันคือลิ้นชักรกๆ
เครื่องมือความจำ AI ทุกตัวที่ผ่านมาล้วนเป็นแบบสะสม: เก็บ เก็บ เก็บ กองมันใหญ่ขึ้น การค้นหาของคุณรกขึ้น และสิ่งที่คุณต้องการจริงๆ ถูกฝังอยู่ใต้โน้ตเกือบซ้ำห้าอันที่คุณเขียนเรื่องนั้นไว้เมื่ออังคารที่แล้ว ความจำที่มากขึ้นเลิกหมายความว่า recall ดีขึ้น
สมองไม่ได้ทำงานแบบนั้น มันทำ consolidate ตอนคุณหลับ มันปล่อยให้สิ่งที่ไม่ได้ใช้จางหาย มันจัดระเบียบรอบสิ่งที่คุณพยายามจะทำ ไม่ใช่ตามลำดับที่เหตุการณ์เกิดขึ้น การตัดทิ้งนั้นไม่ใช่บั๊กในความจำของมนุษย์ — มันคือเหตุผลทั้งหมดที่ทำให้ recall ยังคมอยู่
0.6.0 เกี่ยวกับสิ่งที่ Octobrain หาได้ — อ่านเอกสารเต็ม grep ข้ามเนื้อหา indexed 0.7.0 เกี่ยวกับสิ่งที่ความจำของ Octobrain ทำตอนที่คุณไม่ได้มอง มันเลิกเป็น log แบบ passive และเริ่มทำตัวเหมือนสมอง
Sleep Consolidation — ความจำที่จัดระเบียบตัวเอง
นี่คือพระเอก Octobrain ตอนนี้รัน pass แบบ "หลับ" ที่หา cluster ของความจำที่เพิ่งเกิดและคล้ายกัน แล้วพับแต่ละ cluster ให้เป็น insight ที่ consolidate แล้วเพียงอันเดียว
สมมติว่าตลอดหนึ่งสัปดาห์ agent ของคุณเก็บโน้ตห้าอันแยกกันระหว่างไล่บั๊ก rate-limiting เดียวกัน ก่อน 0.7.0 การค้นหาจะคืนผลคลุมเครือทับซ้อนกันห้าอันและปล่อยให้การจัดอันดับขึ้นกับโชค หลัง pass หลับ ห้าอันนั้นยุบเป็น insight ที่สะอาดและมั่นใจสูงขึ้นหนึ่งอัน — และต้นฉบับไม่ได้ถูกลบ มันถูกลดน้ำหนักลงและเก็บไว้เป็น provenance ดังนั้นเส้นทางย้อนกลับไปยังโน้ตดิบยังคงอยู่
ส่วนที่สำคัญ: มันเป็นอัตโนมัติ ไม่มี cron job ไม่มีเครื่องมือที่ agent ต้องจำว่าต้องเรียก มันกระตุ้นตัวเองแบบ lazy — ครั้งถัดไปที่ Octobrain เริ่มทำงาน ถ้าผ่านไปหนึ่งวันนับจาก pass ล่าสุด มันจะรันและถอยออกไปเงียบๆ pass ที่ช้าหรือล้มเหลวไม่เคยบล็อกอะไร
[memory]
sleep_consolidation_enabled = true # opt-out, not opt-in
sleep_consolidation_interval_hours = 24 # once a day
sleep_consolidation_threshold = 0.85 # how similar memories must be to cluster
sleep_consolidation_min_cluster_size = 3 # need at least 3 to bother
sleep_consolidation_max_age_days = 7 # only recent memories
ถ้าอยากบังคับให้รัน pass — เพื่อทดสอบ หรือก่อนการดึงข้อมูลครั้งใหญ่ — CLI override ยังอยู่:
octobrain memory sleep-consolidate
แต่ค่าเริ่มต้นคือคุณไม่ต้องไปแตะมันเลย ความจำดูแลความสะอาดของตัวเอง
Half-Life Decay — การลืม อย่างจงใจ
Octobrain ตอนนี้ใช้ forgetting curve ความสำคัญของความจำทุกอันเสื่อมลงตามเวลาบนตาราง half-life — แต่ทันทีที่คุณเข้าถึงความจำอันหนึ่ง มันจะถูกเสริมความแข็งแรง ความจำที่ถูก recall บ่อยจะยังแข็งแรง ส่วนอันที่ไม่มีอะไรไปแตะค่อยๆ จางหายไปอย่างนุ่มนวล
นี่คือ Ebbinghaus forgetting curve ยืมตรงมาจากวิธีที่ความจำของมนุษย์ทำงาน ผลคือ การจัดอันดับดีขึ้นเอง คุณไม่ต้องไปจัดอะไรเลย ความจำที่คุณใช้จริงลอยขึ้น ส่วนอันที่เก็บครั้งเดียวแล้วไม่เคยต้องการจมลง — โดยไม่เคยถูกโยนทิ้ง
มีราวกันสองอย่างที่สำคัญตรงนี้:
- ไม่มีอะไรถูกตั้งให้เป็นศูนย์ มีพื้นความสำคัญ ความจำที่ถูกเข้าถึงน้อยจางไปด้านหลังแต่ไม่เคยหายไป Decay เป็นสัญญาณ re-rank ไม่ใช่การลบ
- Decay คงอยู่ จำนวนครั้งที่เข้าถึงและ timestamp ครั้งเข้าถึงล่าสุดถูกเก็บและรอดผ่านการรีสตาร์ท ความรู้สึกว่า "อะไรกำลังร้อนแรง" ของความจำคุณไม่ได้รีเซ็ตทุก session
[memory]
decay_enabled = true
decay_half_life_days = 90 # higher = memories stay relevant longer
คุณยังปรับ decay ต่อความจำได้ด้วย — โน้ตที่เปลี่ยนเร็วสั่งให้จางเร็วเป็นสองเท่าได้ การตัดสินใจพื้นฐานให้ช้าลงสองเท่าได้ — แต่สำหรับเกือบทุกคนค่าเริ่มต้นก็ทำงานได้ดีอยู่แล้ว
Goal-Anchored Consolidation — ความจำที่มีจุดหมาย
นี่คือไอเดียที่งานวิจัยด้านความจำของ agent วนกลับมาเรื่อยๆ: consolidate ตามเป้าหมาย ไม่ใช่ตามนาฬิกา ความจำไม่ควรถูกสรุปแค่เพราะเวลาผ่านไป — มันควรยุบรวมรอบสิ่งที่คุณพยายามจะทำให้สำเร็จ
0.7.0 ทำให้สิ่งนั้นเป็น workflow ระดับ first-class มีความจำชนิดใหม่ชื่อ Goal และ lifecycle จริงสำหรับทุกความจำ — Working → Consolidated → Archived ความจำที่ส่งผลต่อเป้าหมายจะลิงก์ไปยังมันด้วยความสัมพันธ์ achieves เมื่อเป้าหมายเสร็จ คุณปิดมัน แล้ว Octobrain พับทุกความจำที่ส่งผลให้กลายเป็น insight ที่ consolidate แล้วหนึ่งอัน: ความสำคัญถูกดันขึ้นเหนือต้นทาง ส่วนต้นทางถูกลดน้ำหนักลงและลิงก์ไว้ใต้มันในฐานะบันทึกว่าคุณมาถึงจุดนั้นได้อย่างไร
# Five scattered findings, one closed goal → one durable insight
octobrain memory consolidate goal_4f2a -s "Shipped rate limiting: token bucket, 429 + Retry-After"
ข้ามสรุปไปแล้ว Octobrain จะสังเคราะห์ขึ้นมาเองจากชื่อของต้นทาง ไม่ว่าทางไหน สิ่งที่เคยเป็นโน้ตหลวมๆ ห้าอันกลายเป็นความจำหนึ่งอันที่มีความหมาย — ยึดอยู่กับเจตนาที่ผลิตมันขึ้นมา
และนี่คือกลไกเดียวกับที่ sleep consolidation รันอยู่ข้างใต้: แต่ละ cluster ได้เป้าหมายสังเคราะห์ขึ้นมา แล้ว pipeline ของเป้าหมายก็จัดการที่เหลือ engine consolidation เดียว สองวิธีที่จะกระตุ้น — ด้วยมือเมื่อคุณทำอะไรสำเร็จ และอัตโนมัติตอนคุณหลับ
Recall ฉลาดขึ้น — HyDE-lite เปิดเป็นค่าเริ่มต้น
query คลุมเครือคือจุดที่ semantic search มักจะล้มเหลว "ไอ้เรื่อง retries นั่น" ไม่ embed ไปอยู่ใกล้โน้ตที่คุณเขียนไว้จริงๆ เลย
0.7.0 ปล่อย HyDE-lite query expansion และเปิดมันเป็นค่าเริ่มต้น กลไกเรียบง่าย: ทำการค้นหา pass แรก เอาผลลัพธ์อันดับต้นๆ เฉลี่ยให้เป็น centroid แล้วผสมมันกลับเข้าไปใน query เดิมของคุณก่อนการค้นหาจริง query จะเรียนรู้ว่าคำตอบของมันเองหน้าตาเป็นอย่างไรและเล็งได้แม่นขึ้น
ในทางปฏิบัตินั่นคือ +10–30% recall บน query แบบ long-tail และที่ระบุไม่ชัด — แบบที่มนุษย์พิมพ์กันจริงๆ มันมีต้นทุนแค่การ lookup vector เพิ่มหนึ่งครั้งต่อการค้นหา ไม่ต้องใช้ LLM (เป็นคณิตศาสตร์ล้วน) และ remember รวมมันไว้ให้อัตโนมัติ ฝั่ง keyword (BM25) ของการค้นหายังใช้ข้อความตามตัวอักษรของคุณ ดังนั้น query แบบ exact-match จึงไม่ได้รับผลกระทบ
คุณไม่ต้อง config อะไรเลย คำถามคลุมเครือก็แค่หาความจำที่ถูกต้องได้บ่อยขึ้น
พื้นผิวเครื่องมือที่กระชับขึ้น — จาก 8 เครื่องมือ MCP เหลือ 5
ทุกเครื่องมือที่คุณเปิดผ่าน MCP กิน context ของ agent คุณในทุกๆ เทิร์น — ประมาณ 500–2000 token ของ schema ที่มันต้องอ่านก่อนทำอะไรก็ตาม พื้นผิวเครื่องมือที่บวมคือภาษีบนทุก request
เราจึงตัดพื้นผิว MCP ของ Octobrain จากแปดเครื่องมือเหลือห้า verb ที่ชัดเจน:
memorize store a memory (now with optional related_to[])
remember recall (HyDE expansion + 1-hop neighbors, automatic)
forget delete (with confirmation)
consolidate close a goal (fold N memories into 1 insight)
knowledge documents (index, read, match, search)
สามเครื่องมือออกจาก MCP เพราะมันไม่คุ้มกับต้นทุน schema อีกต่อไป:
sleep_consolidate— เป็นอัตโนมัติแล้ว ดังนั้น agent ไม่ต้องเรียกมันเลยrelate— ถูกพับเข้าไปในmemorizeคุณส่งrelated_to[]และลิงก์ความจำกับอันอื่นในการเรียกเดียวกันที่เก็บมันได้ การส่งผลต่อเป้าหมายตอนนี้เป็น round-trip เดียว: เก็บผลที่พบและมาร์กachievesเป้าหมายไปพร้อมกันmemory_graph—rememberคืน neighbor ใกล้ตัวของความจำให้อยู่แล้ว ซึ่งครอบคลุมกรณีที่พบบ่อย
ไม่มีอันไหนหายไป — ทั้งหมดยังอยู่ใน CLI สำหรับงาน admin และ debug มันแค่ไม่กิน context ของ agent คุณสำหรับฟีเจอร์ที่ไม่ค่อยได้ใช้อีกต่อไป ห้าเครื่องมือ ห้า verb ไม่มี mode flag ที่โอเวอร์โหลด
เราเริ่มวัดคุณภาพความจำแล้ว — LongMemEval
คุณปรับปรุงสิ่งที่คุณไม่ได้วัดไม่ได้ 0.7.0 เพิ่ม harness สำหรับ benchmark LongMemEval — พร้อม checkpointing สำหรับการรันยาวๆ — เพื่อให้เราให้คะแนน long-term recall ของ Octobrain ข้าม release ได้บน benchmark จริงแทนที่จะใช้ความรู้สึก มันคือท่อที่คุณจะไม่มีวันได้รัน แต่มันคือเหตุผลที่ข้ออ้างเรื่อง recall และ consolidation ข้างบนเป็นข้ออ้างที่เรายืนยันได้ และเป็นวิธีที่ข้ออ้างถัดๆ ไปจะเป็นแบบนั้นด้วย
เบื้องหลัง
การเปลี่ยนแปลงเงียบๆ ไม่กี่อย่างคอยทำให้ทุกอย่างเดินต่อได้ขณะที่ความจำโตขึ้น:
- การบำรุงรักษา LanceDB เป็นระยะ รันอัตโนมัติเพื่อให้ vector store กระชับและเร็วตลอดเวลา
- Auto-linking และ graph retrieval แบบ async — ความจำที่เกี่ยวข้องเชื่อมกันในเบื้องหลังโดยไม่ทำให้การเขียนที่กระตุ้นมันช้าลง
- โมดูล SQL ที่ consolidate แล้ว พร้อมการ escape literal แบบรวมศูนย์และการ harden — ขอบคมน้อยลง มีที่เดียวให้คิดเรื่อง query
คุณจะไม่สังเกตเห็นอะไรพวกนี้โดยตรง นั่นแหละคือจุดประสงค์
0.7.0 เป็นอย่างไรในทางปฏิบัติ
หนึ่งสัปดาห์ในชีวิตของความจำ ตั้งแต่ต้นจนจบ:
- จันทร์ agent ของคุณเก็บโน้ตสามอันระหว่าง debug webhook ที่ไม่เสถียร — แต่ละอันผ่าน
memorizeหนึ่งในนั้นมาร์กachievesเป้าหมาย "fix webhook retries" ในการเรียกเดียวกัน - ตลอดสัปดาห์ คุณถามเรื่องนั้นอยู่เรื่อยๆ แต่ละ
rememberเสริมความจำที่คุณแตะและค่อยๆ ทำให้อันที่คุณไม่ได้แตะจางลงเงียบๆ - ศุกร์ คุณ ship การแก้ไขและ
consolidateเป้าหมาย โน้ตสามอันกลายเป็น insight ที่คงทนหนึ่งอัน: "Webhook retries: exponential backoff, idempotency keys, dead-letter after 5." - ข้ามคืน Sleep consolidation กวาดเก็บ observation ที่เกือบซ้ำซึ่งคุณไม่เคยลิงก์ไว้อย่างชัดเจน และพับพวกนั้นด้วย
- เดือนถัดมา มีคนถาม "เราจัดการ webhook failures ยังไงนะ?" — query คลุมเครือที่ HyDE ขยายออก แล้วไปลงที่ insight ที่ consolidate แล้วแทนที่จะเป็นเศษเสี้ยวที่จำได้ครึ่งๆ กลางๆ ห้าชิ้น
ไม่มีใครไปจัดอะไรเลย ความจำจัดระเบียบตัวเอง
การอัปเกรด
จาก 0.6.x การ migrate เล็กน้อย:
Config — เปลี่ยนชื่อหนึ่งที่ ถ้า section [embedding] ของคุณตั้ง text_model ให้เปลี่ยนชื่อเป็น model นั่นคือการเปลี่ยน config ที่ break เพียงอย่างเดียว
[embedding]
model = "fastembed:nomic-ai/nomic-embed-text-v1.5" # was: text_model
MCP clients — สามเครื่องมือย้ายไปเป็น CLI-only ถ้า config client หรือ prompt agent ของคุณเรียก sleep_consolidate, relate หรือ memory_graph ผ่าน MCP ให้อัปเดต:
- ทิ้ง call
sleep_consolidateไปทั้งหมด — มันเป็นอัตโนมัติแล้ว - แทนที่
relateด้วยrelated_to[]ของmemorizeเพื่อลิงก์ขณะที่คุณเก็บ (หรือใช้octobrain memory relateใน CLI สำหรับลิงก์ระหว่างความจำที่มีอยู่แล้ว) - กรณีที่พบบ่อยของ
memory_graphถูกครอบคลุมด้วยผล neighbor ของrememberส่วนการ traverse ที่ลึกกว่ายังอยู่ในoctobrain memory graph consolidate_goalถูกเปลี่ยนชื่อเป็นconsolidate— schema เดิม verb สะอาดกว่า
Storage — ไม่ต้องทำอะไร คอลัมน์ lifecycle และ access-tracking ใหม่ถูกเพิ่มในการรันครั้งแรก และความจำเก่าตั้งค่าเริ่มต้นเป็น active เต็มที่ ไม่ต้อง migrate ด้วยมือ ไม่มี downtime
ค่าเริ่มต้น — ตอนนี้ sleep consolidation และ HyDE เปิดอยู่ ถ้าอยากได้พฤติกรรมเดิม ให้ตั้ง sleep_consolidation_enabled = false หรือ [search.hyde] enabled = false คนส่วนใหญ่ควรปล่อยให้เปิดไว้
Source และ binaries ที่ github.com/muvon/octobrain ถ้าพบอะไร เปิด issue — เราอ่าน



