Hugging Face: Blog
85

Sản phẩm

Hugging Face ra mắt Funes: Công cụ lưu trữ bộ nhớ cục bộ cho AI lập trình

(giờ Việt Nam)

Tóm tắt AI

Hugging Face giới thiệu Funes, công cụ mã nguồn mở giúp các AI lập trình như Claude Code tạo bộ nhớ cục bộ. Funes lập chỉ mục lịch sử hội thoại vào tập dữ liệu Lance, cho phép AI truy xuất chính xác ngữ cảnh, thời gian và nguồn gốc thông tin chỉ với một lệnh đơn giản.

Bản dịch AI

Give Your Coding Agents a Memory You Own

Tôi làm việc trên nhiều máy tính khác nhau và thay đổi các coding agent tùy theo từng tác vụ. Với mỗi agent, các dự án của tôi đều như một người lạ. Những lập luận từ "thứ Ba tuần trước" sẽ biến mất khi phiên làm việc kết thúc. Mỗi agent mới, trên mỗi máy chủ mới, đều bắt đầu từ con số không.

Đầu năm nay, bài viết "Software Forgets: Agent Traces Are the Memory" đã lập luận rằng các coding agent vốn đã tạo ra những dữ liệu ghi chép mà chúng ta thường xuyên đánh mất. Khi chúng tìm kiếm trong codebase, thử nghiệm các phương pháp, gặp lỗi, đọc tài liệu và thay đổi hướng đi, chúng để lại một hồ sơ dày đặc không chỉ về những gì đã thay đổi, mà còn là lý do tại sao.

Mặc dù chẩn đoán này là chính xác, nhưng các dấu vết (traces) chỉ là bộ nhớ tiềm năng. Nhật ký phiên làm việc của một agent vẫn chỉ là một kho lưu trữ. Bạn không thể dùng lệnh grep để tìm câu trả lời cho câu hỏi "tại sao chúng ta lại bỏ trình phân tích streaming?" trong mười nghìn lượt tương tác. Để một agent có thể sử dụng các dấu vết đó trong khi làm việc, chúng cần được lập chỉ mục (indexing), truy xuất (retrieval), xếp hạng (ranking) và xác thực nguồn gốc chính xác.

Đó chính là những gì funes cung cấp. Đây là một lớp bộ nhớ bền vững cho các agent của bạn (Claude Code, Codex, pi và Hermes). Nó được xây dựng từ chính các phiên làm việc đã có trên máy tính của bạn. Nó hoạt động cục bộ và trở thành một phần trong quy trình làm việc thông thường của agent chỉ với một lệnh duy nhất. Khi bạn muốn, nó cũng có thể được chuyển đến một Hugging Face dataset do bạn sở hữu, mặc định ở chế độ riêng tư.

Thêm bộ nhớ vào agent bạn đang sử dụng

funes là một tệp nhị phân duy nhất. Backend suy luận mặc định của nó không có phụ thuộc vào runtime ML, đồng thời việc nhúng (embedding) và xếp hạng lại (reranking) đều diễn ra trên máy của bạn. Hãy cài đặt nó:

Sau đó thêm nó vào một agent:

Lệnh add đó sẽ xây dựng chỉ mục đầu tiên, cung cấp cho agent các công cụ recall (truy xuất) và get (lấy dữ liệu), đồng thời cài đặt tính năng tự động hóa để lập chỉ mục cho mỗi lượt tương tác đã hoàn thành. Việc lập chỉ mục diễn ra tăng dần, với các lượt chạy mới sẽ bổ sung các lượt tương tác mới thay vì phải nhúng lại toàn bộ lịch sử. Nội dung cũ và sâu hơn có thể được lấp đầy dần theo các bước giới hạn.

Từ đó, bạn chỉ việc làm việc. Khi một tác vụ liên quan đến quyết định, lý do hoặc kết quả tìm kiếm trong quá khứ, agent có thể tự thực hiện lệnh recall. Bạn không cần phải nhớ phiên làm việc cũ hay dán ngữ cảnh của nó vào phiên mới.

A coding agent reaches for funes on its own, recalls an earlier decision, and grounds its answer in the retrieved session

Với funes được thêm vào, việc truy xuất diễn ra ngay trong cuộc trò chuyện. Agent tự tìm đến bộ nhớ của nó và nêu tên phiên làm việc đằng sau câu trả lời.

recall trả về văn bản gốc, không phải bản tóm tắt, và hiển thị chính xác nguồn gốc của nó (agent, dấu thời gian, phiên làm việc và lượt tương tác). Mỗi kết quả bao gồm một lệnh get để mở toàn bộ lượt tương tác đó cùng với ngữ cảnh xung quanh.

Bên dưới, một pipeline tất định (deterministic) sẽ phân tích mọi dấu vết được hỗ trợ thành cùng một định dạng lượt-và-khối, chia nhỏ chúng, nhúng bằng một mô hình cục bộ cố định và ghi vào một tập dữ liệu Lance cục bộ. Một truy vấn sẽ kết hợp tìm kiếm vector và BM25, hợp nhất thứ hạng của chúng, xếp hạng lại các ứng viên bằng cross-encoder, điều chỉnh trọng số theo độ gần đây và đính kèm các khối lân cận.

Thiết kế đó mang lại cho funes ba đặc tính quan trọng:

Vấn đề "agent như một người lạ" đã được giải quyết trên một máy tính. Nhưng bộ nhớ sẽ hữu ích hơn khi agent tiếp theo chạy ở một nơi khác.

Bộ nhớ là một tập dữ liệu, không phải một dịch vụ

Để bộ nhớ theo sát công việc của bạn, hãy liên kết (bind) nó khi bạn thêm funes vào một agent:

Lệnh bind sẽ xuất bộ nhớ hiện tại của bạn lên đó. Sau đó, funes giữ cho nó luôn cập nhật, lập chỉ mục từng lượt tương tác cục bộ và xuất bản tại các ranh giới phiên làm việc. Agent sẽ truy xuất từ đó trong suốt quá trình. Chạy cùng lệnh đó trên một máy khác và bộ nhớ sẽ theo bạn đến đó.

Bên dưới, bộ nhớ cục bộ là một tập dữ liệu Lance, và bộ nhớ chia sẻ là một tập dữ liệu Hugging Face (mặc định là riêng tư) do bạn sở hữu.

Trước khi bất cứ thứ gì đến được Hub, thông tin xác thực đã được biên tập lại trong quá trình lập chỉ mục. Việc xuất bản sau đó sẽ quét lại mọi khối dữ liệu và loại bỏ bất kỳ thứ gì trông giống như bí mật. Trình quét đằng sau cơ chế này được ghi lại trong SECURITY.md, bao gồm cả những gì nó thực hiện và không bao quát.

Khi một agent đọc bộ nhớ từ xa, funes sẽ lưu trữ các tệp tập dữ liệu cục bộ, vì vậy các truy vấn tiếp theo sẽ quay lại tốc độ cục bộ. Hub cung cấp quyền sở hữu, kiểm soát truy cập, quản lý phiên bản và phân phối như cách nó vẫn làm cho các tập dữ liệu khác. Bộ nhớ của bạn không trở thành một tài khoản trong một dịch vụ bộ nhớ riêng biệt và bạn không phải thuê lại nó thông qua API.

Hỏi trước, kết nối sau

recall được thiết kế cho các agent. Khi bạn muốn tự mình đặt câu hỏi cho bộ nhớ, hãy sử dụng ask. Nó đọc bộ nhớ cục bộ của bạn theo mặc định:

Hoặc trỏ nó vào một bộ nhớ chia sẻ. Chúng tôi đã xuất bản một bộ nhớ về quá trình phát triển funes, vì vậy bạn có thể hỏi tại sao funes hoạt động như vậy mà không cần tạo bộ nhớ của riêng mình:

Asking the published funes memory why it is append-only; funes retrieves the relevant sessions and a coding agent answers from them

funes ask là phiên bản chỉ đọc, một câu hỏi của funes add. Nó truy xuất các đoạn văn bản, chuyển chúng cho một coding agent và trả về một câu trả lời có căn cứ, nêu rõ nguồn gốc. Nó không cài đặt tích hợp hay thay đổi thiết lập cố định của agent.

Một lần truy xuất thất bại sẽ không bị che đậy. Nếu các đoạn văn bản không hỗ trợ cho câu trả lời, agent sẽ nói rõ điều đó. Bạn có thể diễn đạt lại câu hỏi hoặc thêm funes vào agent để nó có thể tìm kiếm bộ nhớ một cách lặp đi lặp lại trong quá trình làm việc bình thường.

Chuyển đổi agent mà không mất mạch công việc

Một bộ nhớ chia sẻ không bị ràng buộc với agent hoặc mô hình đã tạo ra nó. Bắt đầu một tác vụ trong Claude Code, tiếp tục nó trong Codex vào tuần tới, và agent thứ hai có thể truy xuất lập luận của agent thứ nhất. Sử dụng pi với một mô hình cục bộ hoặc mô hình được phục vụ qua Hugging Face router, sau đó quay lại Claude.

Claude Code chooses an embedding model, then Codex recalls that decision in a separate session

Claude đưa ra quyết định; một hook sẽ lập chỉ mục nó; Codex truy xuất nó trong một phiên khác. Các kết quả cũ trong bản demo là những bản ghi sớm hơn của cùng một thử nghiệm: một bộ nhớ chỉ-ghi-thêm (append-only) cũng ghi nhớ cả các lần diễn tập.

Điều này quan trọng trong một vài phạm vi khác nhau:

Các bộ nhớ được xuất bản mang theo một thẻ tập dữ liệu (dataset card) và thẻ funes, giúp chúng dễ nhận biết và tìm kiếm trên Hub. Hub vốn đã lưu trữ các trọng số mở và tập dữ liệu. funes bổ sung thêm bộ nhớ làm việc mở. Nó lưu giữ các quyết định, phương pháp thất bại và lý do đằng sau một dự án, có thể truy vấn bởi một agent khác và truy xuất nguồn gốc đến các phiên làm việc đã tạo ra chúng.

Cách rẻ nhất để thoát khỏi một phiên làm việc dài

Một cuộc điều tra kéo dài sẽ làm phình to phiên làm việc cho đến khi mỗi lượt tương tác tốn kém chi phí để mang theo ngữ cảnh hơn là thực hiện công việc. Các câu trả lời thông thường là để agent tự nén và tiếp tục, hoặc viết một bản bàn giao (handoff) và bắt đầu lại từ đầu. Recall là lựa chọn thứ ba, vì vậy chúng tôi đã đo lường chúng với nhau trên benchmark handoff-vs-recall: hai tác vụ mà câu trả lời không thể tái tạo nếu không có kiến thức trước đó của phiên làm việc.

Nén (compaction) là điều mà hầu hết các agent thực hiện theo mặc định, và đây là lựa chọn duy nhất trong ba lựa chọn có kết quả bị chia rẽ: nó thành công ở một tác vụ và không bao giờ hoàn thành ở tác vụ kia. Nơi nó thất bại, bản tóm tắt của nó đã làm phẳng các kết quả quan trọng. Recall trả về chính các đoạn văn bản, vì vậy một kết quả không cần phải sống sót qua quá trình tóm tắt.

Recall là lựa chọn rẻ nhất trong cả ba trên cả hai tác vụ, rẻ hơn 8 lần so với bản bàn giao bằng văn bản ở một tác vụ và 4 lần ở tác vụ kia.

Weighted tokens per successful task for five channels across two tasks, with recall the shortest bar on both

Phần sáng hơn của mỗi thanh là chi phí một lần cho việc chuẩn bị kênh, bàn giao hoặc nén, được trả trước khi câu hỏi đầu tiên được đặt ra và chỉ tính một lần. Dấu chéo đánh dấu một kênh không bao giờ hoàn thành, và do đó không có chi phí trên mỗi lần thành công.

AI AgentLập trìnhHugging FaceBộ nhớ AICông cụ
Đọc bài gốc

Bài viết được AI dịch và tổng hợp tự động từ Hugging Face: Blog. Liên kết bài gốc ở phía trên. Dữ liệu đồng bộ qua API công khai được ghi nguồn tại AI HOT (canonical) ↗. AIHOT.vn luôn dẫn nguồn đầy đủ — nếu bạn thấy điểm cần chỉnh sửa, hãy gửi ý kiến tại trang phản hồi.