Memora: Hệ thống bộ nhớ có khả năng mở rộng cho các tác vụ dài hạn
(github.com/microsoft)Tóm tắt
-
Mục đích
- Một framework bộ nhớ giúp các AI agent tự động trích xuất thông tin cần thiết từ hội thoại/tài liệu, rồi lưu trữ và truy xuất dài hạn
-
Thiết kế cốt lõi
Memory value, tức toàn bộ văn bản gốc, được giữ nguyên; còn việc truy xuất sử dụngPrimary abstractionvàCue anchors
-
Điểm khác biệt chính
- Hướng tới cấu trúc giảm mất mát thông tin và độ mơ hồ khi truy xuất so với RAG thông thường vốn nhúng trực tiếp toàn bộ văn bản gốc
-
Tính năng chính
- Hỗ trợ tự động trích xuất bộ nhớ, loại bỏ trùng lặp, hợp nhất/cập nhật, tìm kiếm theo ngữ nghĩa, tìm kiếm từ khóa, tìm kiếm nhiều bước dựa trên LLM
-
Đối tượng áp dụng
- AI hội thoại dài hạn, hệ thống đa agent, dịch vụ cá nhân hóa, quản lý tri thức dựa trên tài liệu
-
Trạng thái hiện tại
- Dự án mở dựa trên Python, giấy phép MIT; bao gồm benchmark và tính năng thử nghiệm nhưng vẫn gần với giai đoạn công bố ban đầu
Mở đầu
Giải quyết độ phức tạp của quản lý bộ nhớ cho agent
-
Trong phát triển AI agent hiện nay, nhà phát triển phải tự xử lý các vấn đề sau
- Quyết định thông tin nào sẽ được lưu vào bộ nhớ
- Xác định khi nào cần cập nhật hoặc xóa thông tin đã lưu
- Truy xuất ký ức liên quan đến câu hỏi của người dùng
- Quản lý các ký ức trùng lặp hoặc xung đột
-
Memora đặt mục tiêu xử lý vòng đời bộ nhớ này bên trong framework
-
Nhà phát triển có thể tập trung vào chức năng nghiệp vụ và tạo phản hồi của agent thay vì logic lưu trữ/truy xuất cấp thấp
Hạn chế của cấu trúc bộ nhớ hiện có
-
Hệ thống RAG thông thường
- Chia văn bản gốc của tài liệu hoặc hội thoại thành các đoạn có kích thước nhất định
- Nhúng từng đoạn và lưu vào cơ sở dữ liệu vector
- Truy xuất các đoạn gần với câu hỏi về mặt ngữ nghĩa
-
Cách này đơn giản để triển khai nhưng có thể phát sinh các vấn đề sau
- Ngữ cảnh dài bị tách thành nhiều đoạn
- Thông tin có cách diễn đạt tương tự bị lưu trùng lặp
- Độ tương đồng ngữ nghĩa đơn thuần có thể không khớp với ý định thực sự của câu hỏi
- Nếu chỉ lưu bản tóm tắt đã nén, chi tiết có thể bị mất
-
Cơ sở tri thức dạng đồ thị có lợi thế trong biểu diễn quan hệ, nhưng phải liên tục quản lý schema và cấu trúc quan hệ
Nội dung chính
Tách văn bản gốc khỏi cấu trúc truy xuất
- Mỗi bộ nhớ trong Memora gồm ba thành phần
Memory value
- Toàn bộ thông tin thực sự được lưu trữ
- Giữ nguyên văn bản gốc và chi tiết mà không nén
- Không đưa trực tiếp vào chỉ mục truy xuất
- Đóng vai trò duy trì ngữ cảnh ban đầu mà không làm mất thông tin
Primary abstraction
- Bản tóm tắt đại diện cho biết bộ nhớ đó nói về điều gì
- Được tạo một bản cho mỗi bộ nhớ
- Được dùng làm tiêu chí cho truy xuất, cập nhật, hợp nhất và loại bỏ trùng lặp
- Được dùng như đơn vị chuẩn biểu thị định danh của bộ nhớ
Cue anchors
- Nhiều manh mối ngữ nghĩa để truy cập vào một bộ nhớ
- Được cấu thành bằng cách kết hợp nhân vật, đối tượng, sự kiện, thuộc tính cốt lõi, v.v.
- Một ký ức có thể liên kết với nhiều manh mối
- Tạo thành cấu trúc nhiều-nhiều, trong đó nhiều ký ức có thể chia sẻ cùng một manh mối
Đánh chỉ mục có chọn lọc cho đối tượng truy xuất
-
Memora không trực tiếp đánh chỉ mục toàn bộ văn bản gốc
-
Việc truy xuất thực tế chỉ sử dụng các thông tin sau
- Primary abstraction
- Cue anchors
-
Khi truy xuất hoàn tất, hệ thống trả về Memory value gốc được liên kết
-
Mục đích của cấu trúc này
- Tách biểu diễn dùng cho truy xuất khỏi thông tin lưu trữ thực tế
- Giữ chỉ mục truy xuất gọn nhẹ
- Bảo toàn nguyên vẹn chi tiết của văn bản gốc
- Giảm nhiễu ngữ nghĩa có thể phát sinh từ việc nhúng văn bản gốc
Hình thái trung gian giữa RAG và cấu trúc đồ thị
-
Cung cấp manh mối truy xuất có cấu trúc hơn RAG thông thường
-
Không định nghĩa mọi quan hệ bằng schema nghiêm ngặt như cơ sở dữ liệu đồ thị
-
Cách tiếp cận bổ sung lớp trừu tượng hóa phía trên ký ức để đồng thời đạt được tính linh hoạt và tính cấu trúc
-
Định hướng cốt lõi
- Văn bản gốc được lưu ở dạng tự do
- Truy xuất và liên kết sử dụng biểu diễn có cấu trúc
- Quản lý độc lập cấu trúc lưu trữ và cấu trúc truy xuất
Luồng xử lý từ tạo bộ nhớ đến phản hồi
1. Thu thập bộ nhớ
-
Agent xử lý hội thoại hoặc tài liệu
-
Tự động trích xuất các thông tin sau từ nội dung
- Thông tin sự kiện/thực tế
- Sự kiện và trải nghiệm
- Quy trình và cách thực hiện công việc
-
Hội thoại dài được chia thành các episode theo chủ đề
-
Chuyển đổi thông tin cốt lõi thành các mục bộ nhớ có cấu trúc
2. Lưu trữ thông minh
-
Sử dụng cơ sở dữ liệu vector ChromaDB làm kho lưu trữ mặc định
-
Lưu bộ nhớ bằng embedding ngữ nghĩa
-
Khi có thông tin mới được nhập, so sánh với bộ nhớ hiện có
-
Thực hiện các thao tác sau đối với thông tin tương tự hoặc trùng lặp
- Loại bỏ trùng lặp
- Hợp nhất với ký ức hiện có
- Cập nhật thông tin cũ
-
Có thể tùy chọn tạo Cue index để hỗ trợ truy xuất có cấu trúc
3. Truy xuất thích ứng
- Cung cấp nhiều chiến lược truy xuất tùy theo loại câu hỏi và thiết lập
Tìm kiếm Semantic
- Tính độ tương đồng vector giữa câu hỏi và biểu diễn bộ nhớ
- Triển khai đơn giản và có thể áp dụng cho các câu hỏi thông thường
- Có thể tìm thông tin tương tự về mặt ngữ nghĩa ngay cả khi cách diễn đạt khác nhau
Tìm kiếm Prompted
- LLM thực hiện quá trình truy xuất theo từng bước
- Dựa trên kết quả truy xuất ban đầu, lặp lại việc điều chỉnh từ khóa truy vấn và phạm vi tìm kiếm
- Phù hợp với câu hỏi phức hợp hoặc câu hỏi cần kết hợp nhiều ký ức
- Do có thêm lệnh gọi LLM, chi phí và thời gian phản hồi có thể tăng
Tìm kiếm Hybrid
- Kết hợp tìm kiếm ngữ nghĩa dựa trên vector với tìm kiếm BM25/từ khóa
- Tận dụng đồng thời độ tương đồng ngữ nghĩa và khớp từ chính xác
- Có lợi trong việc giảm bỏ sót khi tìm kiếm tên riêng, tên sản phẩm, code, ngày tháng, v.v.
Tìm kiếm GRPO
- Sử dụng chính sách truy xuất được huấn luyện bằng học tăng cường
- Học chính cách lựa chọn bộ nhớ cần thiết cho câu hỏi
- Mục tiêu là thay thế truy xuất lặp dựa trên LLM bằng mô hình tinh chỉnh cục bộ
- Hiện được phân loại là tính năng thử nghiệm
4. Tạo câu trả lời
- Sắp xếp các bộ nhớ đã truy xuất theo định dạng đã định
- Chèn nội dung đó vào prompt của LLM
- LLM tạo phản hồi bằng cách sử dụng cả câu hỏi và các ký ức đã truy xuất
- Hướng câu trả lời dựa trên bộ nhớ đã lưu
Chức năng quản lý để duy trì chất lượng bộ nhớ
-
Khác với kho lưu trữ phẳng chỉ liên tục thêm bộ nhớ, Memora quản lý trạng thái của bộ nhớ hiện có
-
Các chức năng quản lý chính
- Loại bỏ ký ức trùng lặp
- Hợp nhất ký ức tương tự
- Cập nhật sự kiện/thực tế đã thay đổi
- Tổ chức lại cấu trúc bộ nhớ
-
Sử dụng Primary abstraction làm tiêu chí cho cập nhật và tích hợp bộ nhớ
-
Mục tiêu là giảm vấn đề bộ nhớ bị tích lũy trùng lặp không giới hạn theo thời gian
Hỗ trợ nhiều loại bộ nhớ
- Có thể biểu diễn nhiều loại ký ức bằng cách cấu hình khác nhau giá trị bộ nhớ và phương thức trừu tượng hóa
Ký ức sự kiện/thực tế
- Thông tin tương đối ổn định như nhân vật, địa điểm, thuộc tính, thiết lập
- Ví dụ: nơi làm việc của một người dùng cụ thể, công cụ ưa thích, tech stack của dự án
Ký ức tình tiết
- Sự kiện hoặc hội thoại xảy ra tại một thời điểm cụ thể
- Ví dụ: nội dung đã được quyết định trong cuộc họp trước đây, quá trình xử lý một lỗi cụ thể
Ký ức quy trình
- Cách thực hiện công việc hoặc quy trình có thể lặp lại
- Ví dụ: quy trình triển khai server, thứ tự kiểm tra lỗi, quy tắc tạo tài liệu
Chia sẻ và cô lập bộ nhớ trong hệ đa agent
-
Nhiều agent hoạt động trong cùng một môi trường có thể sử dụng không gian bộ nhớ chung
-
Thông tin do một agent lưu có thể được agent khác tái sử dụng
-
Cũng có thể giới hạn phạm vi bộ nhớ theo agent hoặc vai trò
-
Hiệu quả kỳ vọng
- Giảm trùng lặp tri thức giữa các agent
- Cải thiện bàn giao công việc
- Duy trì tính nhất quán của thông tin dự án chung
-
Cấu trúc hỗ trợ chia sẻ có chọn lọc và bảo vệ thông tin cá nhân thông qua kiểm soát truy cập và chức năng cô lập
Tách hạ tầng lưu trữ khỏi cấu trúc biểu diễn
-
Được thiết kế để phương thức biểu diễn bộ nhớ không phụ thuộc chặt vào một kho lưu trữ cụ thể
-
Cấu trúc dự án bao gồm khả năng kết nối các cơ sở dữ liệu sau
- ChromaDB
- Redis
-
Có thể áp dụng cho môi trường lưu trữ cục bộ hoặc từ xa
-
Ngay cả khi thay đổi backend lưu trữ, cấu trúc trừu tượng hóa/manh mối của bộ nhớ vẫn có thể được giữ nguyên
Cách sử dụng cơ bản
- Yêu cầu Python 3.10 trở lên
- Clone repository GitHub rồi cài đặt package
- Tạo
MemoraClientvà chỉ định định danh người dùng hoặc agent - Dùng
add()để thêm hội thoại hoặc tài liệu vào bộ nhớ - Dùng
query()để thực hiện truy xuất dựa trên ngữ nghĩa - Dùng
advance_query()để thực hiện truy xuất nâng cao theo kiểu Prompted hoặc GRPO
Cấu trúc tích hợp với agent
-
Khi nhận tin nhắn người dùng, trước tiên truy xuất các bộ nhớ liên quan
-
Tạo câu trả lời bằng kết quả truy xuất và câu hỏi của người dùng
-
Cấu thành câu trả lời đã tạo và tin nhắn người dùng thành một lịch sử hội thoại
-
Lưu lại hội thoại đó vào Memora
-
Quy trình lặp
- Nhận câu hỏi
- Truy xuất ký ức liên quan
- Tạo phản hồi
- Lưu hội thoại
- Tái sử dụng trong các câu hỏi sau
Đánh giá hiệu năng bộ nhớ dài hạn
Benchmark LoCoMo
-
Đánh giá khả năng truy xuất ký ức trong hội thoại kéo dài
-
Các loại đánh giá chính
- Câu hỏi một bước
- Câu hỏi nhiều bước kết hợp nhiều thông tin
- Câu hỏi về quan hệ thời gian
- Câu hỏi mở
-
Có thể thử nghiệm các tổ hợp như Semantic, Prompted, Cue index
Benchmark LongMemEval
- Đánh giá khả năng xử lý nhiều loại câu hỏi của hệ thống bộ nhớ dài hạn
- Có thể áp dụng bộ nhớ episode và thiết lập tìm kiếm ngữ nghĩa
- Dùng để kiểm chứng khả năng duy trì thông tin và hiệu năng truy xuất trong môi trường hội thoại dài hạn thực tế
Học chính sách truy xuất dựa trên GRPO
-
Tính năng thử nghiệm huấn luyện quy trình truy xuất thành chính sách học tăng cường
-
Các bước xử lý
- Tạo đường đi truy xuất bằng chính sách hiện tại
- Đánh giá tính có căn cứ, mức trùng lặp và chi phí của kết quả truy xuất
- Tính lợi thế tương đối theo nhóm
- Huấn luyện chính sách truy xuất theo phương pháp GRPO
-
Đưa ra ví dụ với mô hình dòng Qwen 3B hoặc 7B và tinh chỉnh LoRA
-
Việc huấn luyện cần GPU
-
Mục tiêu
- Giảm chi phí gọi LLM bên ngoài cho mỗi lần truy xuất
- Xây dựng chiến lược truy xuất tối ưu cho dữ liệu và công việc cụ thể
-
Hạn chế
- Cần dữ liệu huấn luyện và tiêu chí đánh giá
- Bổ sung việc huấn luyện mô hình và quản lý vận hành
- Phức tạp hơn tìm kiếm Semantic để người dùng phổ thông áp dụng ngay
Ưu điểm chính
- Có thể bảo toàn chi tiết văn bản gốc mà không nén
- Biểu diễn dùng cho truy xuất và thông tin thực tế được tách riêng, giúp cấu trúc bộ nhớ rõ ràng
- Có thể xử lý loại bỏ trùng lặp và cập nhật bộ nhớ một cách có hệ thống
- Có thể chọn tìm kiếm ngữ nghĩa, tìm kiếm từ khóa, tìm kiếm bằng LLM hoặc tìm kiếm bằng học tăng cường
- Có thể quản lý ký ức sự kiện/thực tế, tình tiết và quy trình trong một framework
- Nhiều agent có thể chia sẻ cùng một ký ức
- Mục tiêu là tích hợp với hệ thống agent hiện có bằng tương đối ít thay đổi
- Có thể hỗ trợ cả cấu trúc lưu trữ cục bộ và từ xa
Hạn chế cấu trúc và điểm cần lưu ý
- Chất lượng của Primary abstraction và Cue anchors ảnh hưởng trực tiếp đến hiệu năng truy xuất
- Nếu trừu tượng hóa được tạo tự động không chính xác, văn bản gốc dù đúng vẫn có thể bị bỏ sót khi truy xuất
- Cấu trúc không trực tiếp đánh chỉ mục văn bản gốc có thể bất lợi khi tìm kiếm câu chữ chi tiết hoặc thông tin hiếm
- Trong quá trình loại bỏ trùng lặp và hợp nhất, các sự kiện khác nhau có thể bị tích hợp nhầm thành một ký ức
- Tìm kiếm Prompted có thể làm tăng chi phí và độ trễ do nhiều lần gọi LLM
- Phương pháp GRPO cần GPU, dữ liệu huấn luyện và hệ thống đánh giá, làm tăng độ phức tạp vận hành
- Bộ nhớ chia sẻ trong hệ đa agent cần được thiết kế rõ ràng về quyền truy cập và cô lập thông tin
- Khi lưu thông tin cá nhân hoặc hội thoại nhạy cảm, cần có chính sách riêng về mã hóa, xóa và lưu giữ
- Repository công khai chưa có bản release, số người tham gia và chỉ số sử dụng còn ít, nên khó xem là đã được kiểm chứng đầy đủ về độ ổn định khi vận hành quy mô lớn
Kết luận
Phương pháp bộ nhớ dài hạn bổ sung lớp truy cập có cấu trúc
-
Memora rời khỏi cách đơn giản là vector hóa toàn bộ văn bản gốc và đề xuất cấu trúc sau
- Chi tiết được bảo tồn trong Memory value
- Ý nghĩa đại diện được biểu diễn bằng Primary abstraction
- Nhiều đường truy xuất khác nhau được cấu thành bằng Cue anchors
-
Giá trị cốt lõi nằm ở sự cân bằng giữa bảo toàn thông tin và hiệu quả truy xuất
-
So với tìm kiếm tài liệu đơn thuần, có tiềm năng ứng dụng cao hơn trong các môi trường sau
- Agent cá nhân hóa tương tác với người dùng trong thời gian dài
- Hệ thống liên tục tích lũy nhiều tài liệu phát triển/công việc
- Môi trường trong đó các agent ở nhiều vai trò chia sẻ tri thức
- Dự án cần tái sử dụng các quyết định và quy trình công việc trong quá khứ
Cần kiểm chứng trước khi áp dụng
-
Khi áp dụng thực tế, cần ưu tiên kiểm chứng các yếu tố sau
- Chất lượng trừu tượng hóa tài liệu tiếng Hàn và tạo Cue
- Độ chính xác truy xuất so với RAG hiện có
- Tỷ lệ lỗi trong quá trình hợp nhất bộ nhớ
- Lượng dữ liệu tăng và tốc độ truy xuất khi vận hành dài hạn
- Chi phí API LLM và embedding
- Cách lưu trữ thông tin cá nhân và kiểm soát truy cập
-
Ở giai đoạn đầu, cách phù hợp là thực hiện PoC quy mô nhỏ trên một phần tài liệu cốt lõi, rồi so sánh hiệu năng với RAG thông thường và phương pháp tìm kiếm hybrid
Chưa có bình luận nào.