สรุปภาพรวม

  • วัตถุประสงค์

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

    • เก็บ Memory value ซึ่งเป็นข้อความต้นฉบับทั้งหมดไว้เหมือนเดิม และใช้ Primary abstraction กับ Cue anchors สำหรับการค้นหา
  • จุดแตกต่างสำคัญ

    • มุ่งใช้โครงสร้างที่ลดการสูญเสียข้อมูลและความกำกวมในการค้นหา เมื่อเทียบกับ RAG ทั่วไปที่ฝัง embedding จากต้นฉบับทั้งหมดโดยตรง
  • ฟีเจอร์หลัก

    • รองรับการสกัดหน่วยความจำอัตโนมัติ การลบข้อมูลซ้ำ การรวมและอัปเดต การค้นหาเชิงความหมาย การค้นหาด้วยคีย์เวิร์ด และการค้นหาแบบหลายขั้นตอนด้วย LLM
  • กลุ่มการใช้งาน

    • AI สนทนาระยะยาว, ระบบหลาย agent, บริการแบบปรับแต่งเฉพาะบุคคล, การจัดการความรู้จากเอกสาร
  • สถานะปัจจุบัน

    • เป็นโปรเจกต์โอเพนซอร์สบน Python ภายใต้สัญญาอนุญาต MIT มี benchmark และฟีเจอร์ทดลองรวมอยู่ด้วย แต่ยังใกล้เคียงกับระยะเปิดตัวช่วงแรก

บทนำ

แก้ความซับซ้อนของการจัดการหน่วยความจำของ agent

  • ในการพัฒนา AI agent แบบเดิม นักพัฒนาต้องจัดการปัญหาต่อไปนี้เอง

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

  • นักพัฒนาจึงโฟกัสกับฟังก์ชันงานของ agent และการสร้างคำตอบได้มากกว่า logic ระดับล่างด้านการจัดเก็บและค้นคืน

ข้อจำกัดของโครงสร้างหน่วยความจำเดิม

  • ระบบ RAG ทั่วไป

    • แบ่งเอกสารหรือบทสนทนาต้นฉบับออกเป็นชิ้นตามขนาดที่กำหนด
    • ทำ embedding ให้แต่ละชิ้นแล้วจัดเก็บใน vector database
    • ค้นหาชิ้นที่ใกล้กับคำถามในเชิงความหมาย
  • วิธีนี้ใช้งานง่าย แต่อาจเกิดปัญหาต่อไปนี้

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


เนื้อหา

แยกต้นฉบับออกจากโครงสร้างการค้นหา

  • หน่วยความจำแต่ละรายการของ Memora ประกอบด้วย 3 องค์ประกอบ

Memory value

  • ข้อมูลทั้งหมดที่ถูกจัดเก็บจริง
  • รักษาต้นฉบับและรายละเอียดไว้โดยไม่บีบอัด
  • ไม่รวมเข้าไปในดัชนีค้นหาโดยตรง
  • ทำหน้าที่รักษาบริบทเดิมไว้โดยไม่สูญเสียข้อมูล

Primary abstraction

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

Cue anchors

  • เบาะแสเชิงความหมายหลายรายการที่ใช้เข้าถึงหน่วยความจำหนึ่งรายการ
  • ประกอบขึ้นจากการผสมผสานบุคคล วัตถุ เหตุการณ์ คุณลักษณะสำคัญ ฯลฯ
  • สามารถเชื่อมโยงเบาะแสหลายรายการกับความทรงจำหนึ่งรายการได้
  • สร้างโครงสร้างแบบ many-to-many ที่ความทรงจำหลายรายการใช้เบาะแสเดียวกันร่วมกัน

การทำดัชนีแบบเลือกเฉพาะเป้าหมายค้นหา

  • Memora ไม่ทำดัชนีต้นฉบับทั้งหมดโดยตรง

  • ในการค้นหาจริง ใช้เฉพาะข้อมูลต่อไปนี้

    • Primary abstraction
    • Cue anchors
  • เมื่อค้นหาเสร็จแล้ว จะส่งคืน Memory value ต้นฉบับที่เชื่อมโยงอยู่

  • เป้าหมายของโครงสร้างนี้

    • แยกการแสดงผลสำหรับค้นหาออกจากข้อมูลที่จัดเก็บจริง
    • ทำให้ดัชนีค้นหากระชับ
    • คงรายละเอียดของต้นฉบับไว้ตามเดิม
    • ลด noise เชิงความหมายที่อาจเกิดจากการ embedding ต้นฉบับ

รูปแบบกึ่งกลางระหว่าง RAG กับโครงสร้างกราฟ

  • ให้เบาะแสค้นหาที่มีโครงสร้างมากกว่า RAG ทั่วไป

  • ไม่กำหนดความสัมพันธ์ทั้งหมดด้วย schema ที่เข้มงวดเหมือน graph database

  • เป็นแนวทางที่เพิ่มชั้น abstraction ไว้เหนือความทรงจำ เพื่อให้ได้ทั้งความยืดหยุ่นและความเป็นโครงสร้าง

  • ทิศทางหลัก

    • เก็บต้นฉบับในรูปแบบอิสระ
    • ใช้การแสดงผลแบบมีโครงสร้างสำหรับการค้นหาและการเชื่อมโยง
    • จัดการโครงสร้างการจัดเก็บและโครงสร้างการค้นหาแยกจากกัน

ลำดับการประมวลผลตั้งแต่สร้างหน่วยความจำจนถึงตอบคำถาม

1. การรวบรวมหน่วยความจำ

  • agent ประมวลผลบทสนทนาหรือเอกสาร

  • สกัดข้อมูลต่อไปนี้จากเนื้อหาโดยอัตโนมัติ

    • ข้อเท็จจริง
    • เหตุการณ์และประสบการณ์
    • ขั้นตอนและวิธีทำงาน
  • แบ่งบทสนทนายาวออกเป็น episode ตามหัวข้อ

  • แปลงข้อมูลสำคัญเป็นรายการหน่วยความจำแบบมีโครงสร้าง

2. การจัดเก็บอัจฉริยะ

  • ใช้ ChromaDB vector database เป็นที่จัดเก็บหลักโดยค่าเริ่มต้น

  • จัดเก็บหน่วยความจำด้วย semantic embedding

  • เมื่อมีข้อมูลใหม่เข้ามา จะเปรียบเทียบกับหน่วยความจำเดิม

  • ดำเนินการต่อไปนี้กับข้อมูลที่คล้ายกันหรือซ้ำกัน

    • ลบข้อมูลซ้ำ
    • รวมกับความทรงจำเดิม
    • อัปเดตข้อมูลที่ล้าสมัย
  • สามารถสร้าง Cue index เป็นตัวเลือกเพื่อรองรับการค้นหาแบบมีโครงสร้าง

3. การค้นหาแบบปรับตามบริบท

  • มีหลายกลยุทธ์การค้นหาตามประเภทคำถามและการตั้งค่า
การค้นหาแบบ Semantic
  • คำนวณความคล้ายแบบเวกเตอร์ระหว่างคำถามกับการแสดงผลของหน่วยความจำ
  • ใช้งานง่ายและใช้ได้กับคำถามทั่วไป
  • สามารถหาข้อมูลที่มีความหมายคล้ายกันได้ แม้สำนวนจะแตกต่างกัน
การค้นหาแบบ Prompted
  • LLM ดำเนินกระบวนการค้นหาเป็นขั้นตอน
  • ปรับคำค้นและขอบเขตการค้นหาซ้ำโดยอาศัยผลการค้นหาชุดแรก
  • เหมาะกับคำถามซับซ้อนหรือคำถามที่ต้องผสานความทรงจำหลายรายการ
  • เนื่องจากมีการเรียก LLM เพิ่มเติม จึงอาจเพิ่มต้นทุนและเวลาในการตอบ
การค้นหาแบบ Hybrid
  • ผสานการค้นหาเชิงความหมายแบบเวกเตอร์กับ BM25 และการค้นหาด้วยคีย์เวิร์ด
  • ใช้ทั้งความคล้ายเชิงความหมายและการตรงกันของคำแบบแม่นยำ
  • มีประโยชน์ในการลดการพลาดผลค้นหาสำหรับชื่อเฉพาะ ชื่อผลิตภัณฑ์ โค้ด วันที่ ฯลฯ
การค้นหาแบบ GRPO
  • ใช้นโยบายการค้นหาที่ฝึกด้วย reinforcement learning
  • เรียนรู้วิธีเลือกหน่วยความจำที่จำเป็นต่อคำถามโดยตรง
  • มีเป้าหมายเพื่อแทนที่การค้นหาซ้ำด้วย LLM ด้วยโมเดลที่ fine-tune แบบ local
  • ปัจจุบันจัดเป็นฟีเจอร์ทดลอง

4. การสร้างคำตอบ

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

ฟีเจอร์จัดการเพื่อรักษาคุณภาพหน่วยความจำ

  • ต่างจากที่จัดเก็บแบบแบนที่เพิ่มหน่วยความจำไปเรื่อย ๆ ระบบนี้จัดการสถานะของหน่วยความจำเดิม

  • ฟีเจอร์จัดการหลัก

    • ลบความทรงจำซ้ำ
    • รวมความทรงจำที่คล้ายกัน
    • อัปเดตข้อเท็จจริงที่เปลี่ยนไป
    • จัดระเบียบโครงสร้างหน่วยความจำใหม่
  • ใช้ Primary abstraction เป็นเกณฑ์ในการอัปเดตและรวมหน่วยความจำ

  • มีเป้าหมายเพื่อลดปัญหาหน่วยความจำสะสมซ้ำแบบไม่จำกัดเมื่อเวลาผ่านไป

รองรับหน่วยความจำหลายประเภท

  • สามารถแสดงความทรงจำหลายประเภทได้โดยปรับวิธีจัดโครงสร้างค่า memory และ abstraction ให้แตกต่างกัน

ความทรงจำเชิงข้อเท็จจริง

  • ข้อมูลที่ค่อนข้างคงที่ เช่น บุคคล สถานที่ คุณลักษณะ การตั้งค่า
  • ตัวอย่าง: ที่ทำงานของผู้ใช้รายหนึ่ง เครื่องมือที่ชอบใช้ tech stack ของโปรเจกต์

ความทรงจำเชิงเหตุการณ์

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

ความทรงจำเชิงขั้นตอน

  • วิธีทำงานหรือขั้นตอนที่ทำซ้ำได้
  • ตัวอย่าง: ขั้นตอน deploy server ลำดับตรวจสอบ error กฎการสร้างเอกสาร

การแชร์และแยกหน่วยความจำของหลาย agent

  • agent หลายตัวที่ทำงานในสภาพแวดล้อมเดียวกันสามารถใช้พื้นที่หน่วยความจำร่วมกันได้

  • ข้อมูลที่ agent หนึ่งจัดเก็บไว้สามารถถูก agent อื่นนำกลับมาใช้ได้

  • สามารถจำกัดขอบเขตหน่วยความจำตาม agent หรือบทบาทได้เช่นกัน

  • ผลที่คาดหวัง

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

แยกโครงสร้างพื้นฐานการจัดเก็บออกจากโครงสร้างการแสดงผล

  • ออกแบบให้วิธีแสดงผลหน่วยความจำไม่ผูกแน่นกับที่จัดเก็บเฉพาะรายใดรายหนึ่ง

  • โครงสร้างโปรเจกต์มีฟีเจอร์เชื่อมต่อฐานข้อมูลต่อไปนี้

    • ChromaDB
    • Redis
  • ใช้ได้กับสภาพแวดล้อมจัดเก็บแบบ local หรือ remote

  • แม้เปลี่ยน storage backend ก็ยังรักษาโครงสร้าง abstraction และ cue ของหน่วยความจำไว้ได้


วิธีใช้งานพื้นฐาน

  • ต้องใช้ Python 3.10 ขึ้นไป
  • clone repository จาก GitHub แล้วติดตั้งแพ็กเกจ
  • สร้าง MemoraClient และกำหนดตัวระบุผู้ใช้หรือ agent
  • ใช้ add() เพื่อเพิ่มบทสนทนาหรือเอกสารเข้าไปในหน่วยความจำ
  • ใช้ query() เพื่อค้นหาเชิงความหมาย
  • ใช้ advance_query() เพื่อค้นหาขั้นสูงด้วยวิธี Prompted หรือ GRPO

โครงสร้างการเชื่อมต่อกับ agent

  • เมื่อได้รับข้อความผู้ใช้ ให้ค้นหาหน่วยความจำที่เกี่ยวข้องก่อน

  • ใช้ผลการค้นหาและคำถามของผู้ใช้เพื่อสร้างคำตอบ

  • จัดคำตอบที่สร้างขึ้นกับข้อความผู้ใช้เป็นบันทึกบทสนทนาหนึ่งรายการ

  • จัดเก็บบทสนทนาดังกล่าวกลับเข้า Memora

  • กระบวนการวนซ้ำ

    • รับคำถาม
    • ค้นหาความทรงจำที่เกี่ยวข้อง
    • สร้างคำตอบ
    • จัดเก็บบทสนทนา
    • นำกลับมาใช้ในคำถามภายหลัง

การประเมินประสิทธิภาพหน่วยความจำระยะยาว

LoCoMo benchmark

  • ประเมินความสามารถค้นคืนความทรงจำจากบทสนทนาที่ต่อเนื่องยาวนาน

  • ประเภทการประเมินหลัก

    • คำถามขั้นตอนเดียว
    • คำถามหลายขั้นตอนที่ผสานข้อมูลหลายรายการ
    • คำถามเกี่ยวกับความสัมพันธ์เชิงเวลา
    • คำถามปลายเปิด
  • สามารถทดลองผสาน Semantic, Prompted, Cue index ฯลฯ ได้

LongMemEval benchmark

  • ประเมินความสามารถในการจัดการคำถามหลากหลายของระบบหน่วยความจำระยะยาว
  • สามารถใช้การตั้งค่า episode memory และ semantic search ได้
  • ใช้สำหรับตรวจสอบการคงข้อมูลและประสิทธิภาพการค้นหาในสภาพแวดล้อมบทสนทนาระยะยาวจริง

การเรียนรู้นโยบายการค้นหาบนพื้นฐาน GRPO

  • ฟีเจอร์ทดลองที่ทำให้กระบวนการค้นหาเรียนรู้เป็นนโยบายด้วย reinforcement learning

  • ขั้นตอนการประมวลผล

    • สร้างเส้นทางค้นหาด้วยนโยบายปัจจุบัน
    • ประเมินความมีหลักฐานรองรับ ความซ้ำซ้อน และต้นทุนของผลการค้นหา
    • คำนวณข้อได้เปรียบสัมพัทธ์ของกลุ่ม
    • ฝึกนโยบายการค้นหาด้วยวิธี GRPO
  • ยกตัวอย่างด้วยโมเดลตระกูล Qwen 3B หรือ 7B และการ fine-tune ด้วย LoRA

  • การฝึกต้องใช้ GPU

  • เป้าหมาย

    • ลดต้นทุนจากการเรียก LLM ภายนอกทุกครั้งที่ค้นหา
    • สร้างกลยุทธ์ค้นหาที่ปรับให้เหมาะกับข้อมูลและงานเฉพาะ
  • ข้อจำกัด

    • ต้องมีข้อมูลฝึกและเกณฑ์ประเมิน
    • มีงานฝึกโมเดลและจัดการการใช้งานเพิ่มขึ้น
    • สำหรับผู้ใช้ทั่วไป ซับซ้อนกว่าการค้นหาแบบ Semantic หากจะนำไปใช้ทันที

ข้อดีหลัก

  • รักษารายละเอียดต้นฉบับได้โดยไม่บีบอัด
  • โครงสร้างหน่วยความจำชัดเจนเพราะแยกการแสดงผลสำหรับค้นหาออกจากข้อมูลจริง
  • จัดการการลบข้อมูลซ้ำและการอัปเดตหน่วยความจำได้อย่างเป็นระบบ
  • เลือกใช้การค้นหาเชิงความหมาย การค้นหาด้วยคีย์เวิร์ด การค้นหาด้วย LLM หรือการค้นหาด้วย reinforcement learning ได้
  • จัดการความทรงจำเชิงข้อเท็จจริง เชิงเหตุการณ์ และเชิงขั้นตอนในเฟรมเวิร์กเดียวได้
  • agent หลายตัวสามารถแชร์ความทรงจำเดียวกันได้
  • มีเป้าหมายให้เชื่อมต่อกับระบบ agent เดิมได้โดยปรับแก้ค่อนข้างน้อย
  • รองรับได้ทั้งโครงสร้างจัดเก็บแบบ local และ remote

ข้อจำกัดเชิงโครงสร้างและข้อควรระวัง

  • คุณภาพของ Primary abstraction และ Cue anchors ส่งผลโดยตรงต่อประสิทธิภาพการค้นหา
  • หาก abstraction ที่สร้างอัตโนมัติไม่ถูกต้อง แม้ต้นฉบับจะถูกต้อง ก็อาจตกหล่นในการค้นหาได้
  • โครงสร้างที่ไม่ทำดัชนีต้นฉบับโดยตรงอาจเสียเปรียบในการค้นหาถ้อยคำละเอียดหรือข้อมูลที่พบได้น้อย
  • ระหว่างการลบข้อมูลซ้ำและการรวม เหตุการณ์ที่ต่างกันอาจถูกรวมผิดเป็นความทรงจำเดียว
  • การค้นหาแบบ Prompted อาจเพิ่มต้นทุนและ latency จากการเรียก LLM หลายครั้ง
  • วิธี GRPO ต้องใช้ GPU ข้อมูลฝึก และระบบประเมิน ทำให้ความซับซ้อนในการดำเนินงานสูง
  • หน่วยความจำร่วมของหลาย agent ต้องออกแบบสิทธิ์เข้าถึงและการแยกข้อมูลให้ชัดเจน
  • หากจัดเก็บข้อมูลส่วนบุคคลหรือบทสนทนาที่อ่อนไหว จำเป็นต้องมีนโยบายเข้ารหัส ลบ และเก็บรักษาแยกต่างหาก
  • repository สาธารณะยังไม่มี release และมีผู้มีส่วนร่วมกับตัวชี้วัดการใช้งานน้อย จึงยากจะถือว่าเสถียรภาพสำหรับการใช้งานขนาดใหญ่ได้รับการพิสูจน์เพียงพอแล้ว

สรุป

วิธีหน่วยความจำระยะยาวที่เพิ่มชั้นการเข้าถึงแบบมีโครงสร้าง

  • Memora เสนอรูปแบบต่อไปนี้ แทนการ vectorize ต้นฉบับทั้งหมดแบบง่าย ๆ

    • เก็บรายละเอียดไว้ใน Memory value
    • แสดงความหมายหลักด้วย Primary abstraction
    • สร้างเส้นทางค้นหาหลากหลายด้วย Cue anchors
  • คุณค่าหลักอยู่ที่สมดุลระหว่างการรักษาข้อมูลกับประสิทธิภาพการค้นหา

  • มีโอกาสใช้งานได้สูงกว่าการค้นหาเอกสารแบบง่ายในสภาพแวดล้อมต่อไปนี้

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

ต้องตรวจสอบก่อนนำมาใช้

  • เมื่อนำไปใช้งานจริง ควรตรวจสอบองค์ประกอบต่อไปนี้ก่อน

    • คุณภาพของการสร้าง abstraction และ Cue สำหรับเอกสารภาษาเกาหลี
    • ความแม่นยำการค้นหาเมื่อเทียบกับ RAG เดิม
    • อัตราข้อผิดพลาดในกระบวนการรวมหน่วยความจำ
    • ปริมาณข้อมูลที่เพิ่มขึ้นและความเร็วการค้นหาเมื่อใช้งานระยะยาว
    • ต้นทุน LLM และ embedding API
    • วิธีจัดเก็บข้อมูลส่วนบุคคลและการควบคุมการเข้าถึง
  • ในระยะเริ่มต้น แนวทางที่เหมาะสมคือทำ PoC ขนาดเล็กกับเอกสารสำคัญบางส่วน แล้วเปรียบเทียบประสิทธิภาพกับ RAG ทั่วไปและการค้นหาแบบ hybrid

ยังไม่มีความคิดเห็น

ยังไม่มีความคิดเห็น