03 / AI REPO RADAR
microsoft/TokenEconomizer
4.499 saoLicense: Apache-2.0Push gần nhất: Lên radar:
Plugin của Microsoft học từ các phiên agent đã chạy trong một kho mã để cắt chi phí: nhớ sự thật về repo, ngừng nạp công cụ không dùng và redirect khi một lượt bị kẹt.
TokenEconomizer là gì và giải quyết vấn đề nào
TokenEconomizer là một plugin mã nguồn mở của Microsoft dành cho các coding agent. Tiêu đề README mô tả nó là cơ chế kiểm soát chi phí kiểu hộp đen, dựa trên kinh nghiệm tích lũy, cho coding agent. Nói gọn: plugin học từ những phiên làm việc mà agent đã chạy trong một kho mã, rồi dùng chính kinh nghiệm đó để cắt bớt phần lãng phí ở các phiên sau, mà không phải sửa agent, mô hình hay trọng số của nó. Tại thời điểm chụp, repo có 4,499 sao, giấy phép Apache-2.0 và được tạo gần đây, nên đây là dự án còn rất mới.
Danh sách tác giả trong README gồm các nhà nghiên cứu từ UC Berkeley, Microsoft Research và Microsoft Security, và README liên kết tới một bài báo cùng trang dự án. Vì vậy repo vừa là công cụ dùng được, vừa là bản mã đi kèm một nghiên cứu. Bài viết này chỉ dựa trên README và metadata của repo; những gì README không nói, chẳng hạn chi tiết cài đặt nội bộ của từng cơ chế hay kết quả trên các kho mã riêng của bạn, sẽ được ghi rõ là README không đề cập.
Vì sao chi phí của coding agent lặp đi lặp lại
README đặt vấn đề khá thẳng: coding agent được xây để hoàn thành tác vụ, không phải để giữ chi phí thấp. Mỗi lượt làm việc đều phải trả tiền lại cho phần chỉ dẫn của agent, cho định nghĩa của mọi công cụ đang được nạp, và cho toàn bộ hội thoại tính đến lúc đó. Khi một nhà phát triển dùng cùng một agent trên cùng một kho mã nhiều lần, phần lớn chi phí này lặp lại: cùng những sự thật bị khám phá lại, cùng những công cụ không dùng vẫn bị gửi đi, và cùng kiểu vòng lặp thất bại xuất hiện lại.
Từ đó plugin rút ra hướng tiếp cận: học xuyên suốt các phiên của một kho mã thay vì coi mỗi phiên là độc lập. Khoản tiền plugin tự tiêu cho việc học được kỳ vọng sẽ được hoàn lại qua các phiên sau. README nêu bốn nguyên tắc dẫn đường, và chúng cho thấy tư duy thiết kế khá thận trọng: tận dụng những gì agent vốn đã đọc, tính chi phí đúng như hóa đơn, bảo vệ tỷ lệ hoàn thành tác vụ, và giữ mọi hành động có thể đảo ngược.
Nguyên tắc tính chi phí đáng chú ý. README nói phần lớn token trong một phiên là các lần đọc lại từ bộ nhớ đệm, nên chi phí được tính theo bảng giá có tính đến bộ nhớ đệm, và bao gồm cả các lần gọi mô hình do chính plugin thực hiện. Nghĩa là con số tiết kiệm mà plugin báo cáo đã trừ đi phần plugin tự tiêu, không phải con số đẹp một chiều.
Ba cơ chế chính: micro-skills, tool pruning và loop guard
Plugin có ba cơ chế, và mỗi cơ chế bật hoặc tắt riêng được. Cơ chế thứ nhất là micro-skills, nhớ cách kho mã vận hành. Cơ chế thứ hai là tool pruning, ngừng nạp những công cụ không được dùng. Cơ chế thứ ba là can thiệp vòng lặp thất bại, gọi là loop guard, lên tiếng khi một lượt làm việc bị kẹt. Mỗi cơ chế nhắm vào một nguồn lãng phí khác nhau, nên có thể xem chúng là ba lớp bổ trợ nhau chứ không chồng chéo.
Điểm chung là plugin hoạt động qua những kênh mà agent vốn đã hỗ trợ: sự thật được đưa vào ngữ cảnh lúc bắt đầu phiên, còn công cụ bị loại thông qua chính tệp cài đặt của agent. Nhờ vậy README nhấn mạnh rằng không có gì phụ thuộc vào việc agent phải học thêm một công cụ mới. Plugin cũng thông báo mỗi hành động của nó trong một dòng, và nếu bất kỳ phần nào lỗi thì phiên của bạn vẫn tiếp tục như thể plugin chưa được cài.
Micro-skills: ghi nhớ sự thật về kho mã
README mô tả rằng các phiên liên tục khám phá lại cùng những điều: một bước build phải chạy trước, cách viết lệnh đúng ở kho này, chẳng hạn gọi pytest qua python -m khi pytest không có sẵn, hay dùng npx cho tsc khi tsc không có trong đường dẫn, một biến môi trường mà lệnh cần, hoặc nơi lưu các tệp sinh ra. Micro-skills học những sự thật như vậy, ở bất kỳ ngôn ngữ nào, từ hai nguồn: các thất bại lặp lại giữa các phiên, và một mô hình xem lại các phiên gần đây sau mỗi k phiên, với k mặc định bằng 3, rồi đề xuất sự thật.
Một sự thật chỉ được nêu ở đầu mỗi phiên sau khi ba phiên đã xác nhận nó, và sẽ bị bỏ khi các phiên sau mâu thuẫn với nó. Quy tắc này phản ánh nguyên tắc bảo vệ thành công của tác vụ: sự thật chỉ hình thành từ bằng chứng lặp lại. Cơ chế này mặc định tắt, vì bộ đề xuất làm tăng số lần gọi mô hình và mức tiết kiệm phụ thuộc vào kho mã cũng như công việc bạn làm ở đó.
README còn nêu hai chế độ phụ ngoài bật và tắt. Với microskills bằng envfacts, plugin chỉ học sự thật từ các thất bại lặp lại và không gọi mô hình nào. Đây là lựa chọn hợp lý nếu bạn muốn thử cơ chế này mà không phát sinh chi phí mô hình thêm. README không đề cập định dạng lưu cụ thể của các sự thật ngoài việc chúng được giữ trên máy của bạn.
Tool pruning: ngừng gửi công cụ không dùng
Định nghĩa của mọi công cụ đang nạp được gửi kèm mỗi yêu cầu. Nếu một công cụ không được dùng qua p lời nhắc trải trên ít nhất m phiên, hoặc qua s phiên với độ dài bất kỳ, thì nó bị bỏ khỏi các phiên kế tiếp thông qua cài đặt của chính agent. Giá trị mặc định là p bằng 10, m bằng 2 và s bằng 5. Một lệnh duy nhất có thể đưa công cụ trở lại, và công cụ đã trả lại sẽ không bị loại thêm lần nữa.
README giải thích vì sao đếm theo lời nhắc: các phiên dài có trọng số lớn hơn, nhưng cần ít nhất m phiên để một phiên đơn lẻ không tự quyết định. Plugin chỉ ghi danh sách loại sau khi các phiên của bạn trong kho mã đã nhàn rỗi q phút, mặc định là 60, hoặc muộn nhất một ngày sau khi danh sách hình thành. Lý do được nêu rõ: nếu một cuộc hội thoại được tiếp tục sau khi công cụ thay đổi, toàn bộ lịch sử phải được ghi lại vào bộ nhớ đệm của prompt thay vì đọc từ đó, và sau một giờ nhàn rỗi thì bộ nhớ đệm đã hết hạn rồi.
Cách loại công cụ khác nhau theo từng agent. Với Claude Code, plugin loại từng công cụ và ghi vào tệp cài đặt cục bộ của Claude. Với Codex, nó loại các gói khả năng và ghi vào tệp cấu hình của Codex. Với Copilot CLI, nó loại cả máy chủ MCP. Pi chỉ nạp bốn công cụ nên không có gì để loại, còn Cursor Agent và opencode hiện chưa được hỗ trợ ở phần này. Plugin chỉ thêm mục của riêng nó, không đụng vào quy tắc từ chối bạn tự viết, và giữ tệp cài đặt do nó tạo ra ngoài git.
Có chế độ propose: plugin chỉ đề xuất danh sách loại, và không có gì thay đổi cho đến khi bạn chạy lệnh apply. Nếu plugin không thể sửa tệp một cách an toàn, ví dụ tệp cấu hình Codex đã được commit trong kho mã, tệp cài đặt không phải JSON hợp lệ, hoặc một liên kết tượng trưng trỏ ra ngoài kho mã, thì danh sách vẫn chỉ là đề xuất và đầu phiên sẽ nói lý do.
Loop guard: can thiệp khi một lượt bị kẹt
Khi một lượt làm việc, tức phần việc của agent cho một lời nhắc, cứ vướng cùng những thất bại, một mô hình đóng vai giám khảo sẽ kiểm tra xem lượt đó có thật sự kẹt không. Nếu giám khảo chắc chắn ít nhất c, mặc định 0.7, agent nhận một lời điều hướng: một ghi chú ngắn được thêm vào ngữ cảnh để thử cách khác. Số lần điều hướng tối đa trên mỗi lượt là r, mặc định 1. Nếu lượt vẫn kẹt, plugin chỉ cho bạn biết cách dừng và tự nó không bao giờ dừng lượt.
Loop guard không hành động ngay từ đầu. Trước hết nó học một lượt trong kho mã này thường kéo dài bao lâu, và chờ cho đến khi e lượt, mặc định 5, kết thúc tốt đẹp mà không có kiểm tra nào thất bại sau lần sửa cuối. Sau đó, một lượt có dấu hiệu lặp, như cùng thất bại lặp lại hay lỗi chất đống, sẽ được chuyển cho giám khảo. Riêng một trường hợp được điều hướng không qua giám khảo: lượt chạy quá b lần độ dài thông thường, mặc định 2.5, trong khi cứ sửa đi sửa lại cùng các chỉnh sửa qua cùng thất bại.
README cũng thẳng thắn về giới hạn hiển thị. Trong Claude Code, dòng của plugin chỉ hiện ở bản ghi chi tiết, nên plugin nhờ Claude nhắc lại trong câu trả lời, và mô hình có thể diễn đạt khác hoặc bỏ sót. Trong chế độ chạy không giao diện, không ai theo dõi, nên lượt bị đánh dấu sẽ chạy đến khi kết thúc hoặc chạm giới hạn của chính agent. Sau đó lệnh status đếm số lần điều hướng và số thông báo vẫn kẹt.
Kết quả do tác giả công bố
Mọi con số trong phần này là tuyên bố của nhóm tác giả, không phải kết quả đã được bên thứ ba kiểm chứng. Theo README, bài báo chạy năm tổ hợp agent và mô hình trên cùng 277 tác vụ SWE-Bench từ sáu kho mã. Mỗi tác vụ chạy như một phiên riêng, các tác vụ của từng kho chạy theo thứ tự và bắt đầu từ trạng thái chưa học gì. Chi phí tính cả mọi lần gọi mô hình do TokenEconomizer thực hiện.
Tác giả công bố chi phí trung bình thấp hơn từ 18.4–30.9% qua năm tổ hợp, rẻ hơn ở cả 30 ô kết hợp giữa kho mã và tổ hợp, và Pass@1 tăng ở 4 trên 5 tổ hợp. Trong từng kho và từng tổ hợp, chi phí giảm từ 5–40%. Mức tiết kiệm cũng được nói là giữ vững trên Web-Bench với 16–21% thấp hơn, và trên hai bộ kiểm thử kiểm toán bảo mật mà mỗi tác vụ nằm trong một kho mới, với 6–20% thấp hơn.
Trang dự án có biểu đồ tương tác, số liệu theo từng kho và chín lần chạy có chú thích, còn thư mục experiments cho phép chạy lại thí nghiệm SWE-Bench và Web-Bench. README không đưa kết quả trên kho mã riêng của người dùng, nên mức tiết kiệm thực tế của bạn có thể khác. Đáng lưu ý là thí nghiệm bắt đầu từ trạng thái chưa học gì, nghĩa là chi phí học đã nằm trong con số.
Cài đặt và dùng thử
Điều kiện là bạn có một trong các agent được hỗ trợ, đã đăng nhập theo bất kỳ cách nào agent cho phép, cùng Python 3.10 trở lên trong đường dẫn. README nói plugin không cần khóa API riêng và không bao giờ xử lý thông tin xác thực, nên gói cước hay cách đăng nhập nào cũng dùng được. Plugin hỗ trợ Claude Code, Codex, GitHub Copilot CLI và Pi, còn opencode và Cursor Agent ở mức thử nghiệm. Cursor chỉ hỗ trợ macOS và Linux.
Cách cài khác nhau theo agent nhưng cùng một tinh thần: sao chép repo vào một thư mục bạn định giữ lâu dài, vì Claude Code, Codex, Copilot CLI và opencode chạy plugin trực tiếp từ bản sao đó. Sau đó khởi động agent trong một kho mã của bạn, tin cậy thư mục, rồi chạy lệnh status. Với Codex, hook cần được duyệt và chỉ có hiệu lực từ phiên kế tiếp. Với Claude Code và Copilot CLI, cần chạy thêm lệnh làm mới danh mục công cụ một lần cho mỗi máy, và chạy lại sau khi agent cập nhật. Lệnh cụ thể nằm trong README nên bài này không chép lại.
README nêu bảng phiên bản được hỗ trợ cho từng agent, chẳng hạn Claude Code từ 2.1.300 đến 2.1.310, và cho biết các phiên bản cũ hơn không được hỗ trợ; lệnh cài được thử trên phiên bản cũ nhất và mới nhất trong mỗi khoảng, còn bản mới hơn chưa được thử. Codex trước 0.141.0 không chạy hook của plugin. Hằng ngày bạn làm việc như thường; các lệnh status, microskills, toolprune và config chỉ để xem hoặc đổi hành vi. Trong agent, một lệnh tốn một lượt mô hình, còn từ terminal thì miễn phí.
Dùng trong workflow AI agent thế nào
Giá trị rõ nhất dành cho người dùng coding agent hằng ngày trên một số kho mã cố định. Mặc định, tool pruning và loop guard bật còn micro-skills tắt, và README nói với các mặc định này plugin chỉ gọi mô hình khi một lượt có dấu hiệu lặp. Vì vậy chi phí phát sinh thêm là thấp theo thiết kế. Bạn có thể bắt đầu bằng cách chỉ xem lệnh status để biết plugin học được gì và các phiên của bạn tốn bao nhiêu, rồi mới quyết định bật thêm.
Cách tiếp cận thận trọng là chuyển tool pruning sang chế độ propose để tự duyệt danh sách công cụ bị loại, và thử micro-skills ở chế độ envfacts để không phát sinh lời gọi mô hình. Nếu cần tắt nhanh, đặt biến môi trường TE_DISABLE bằng 1 khi khởi động agent sẽ tắt cả plugin cho phiên đó, còn TE_LOOPGUARD bằng off tắt riêng một cơ chế. Mọi thứ plugin học được nằm trên máy bạn, trong một thư mục của plugin ở thư mục home.
Với đội dùng nhiều máy chủ MCP, tool pruning có ý nghĩa đặc biệt vì trên Copilot CLI nó có thể loại cả máy chủ MCP không dùng. Còn loop guard phù hợp khi bạn để agent chạy tự động và muốn một lớp bảo vệ nhẹ trước các vòng lặp sửa lỗi vô ích. Tuy nhiên README không đề cập cách tích hợp với hệ thống đo chi phí bên ngoài, nên việc đối chiếu hóa đơn vẫn là việc của bạn.
Giới hạn và điều cần lưu ý
Đây là dự án còn mới, và nhiều phần được README ghi là thử nghiệm. Hỗ trợ opencode và Cursor Agent là thử nghiệm; với Cursor, README nói hook từ một phiên Agent thật chưa được xác minh, chi phí phiên được báo là không có, và hai agent này chưa có tool pruning. Phiên bản agent được hỗ trợ nằm trong khoảng hẹp, nên khi agent cập nhật vượt khoảng đó, bạn phải tự cân nhắc rủi ro.
Về hành vi, loop guard không bao giờ tự dừng một lượt, nên với chạy không giao diện nó chỉ ghi lại chứ không cứu được chi phí tại chỗ. Trên Codex, Esc ngắt lượt nhưng lệnh đã khởi chạy vẫn chạy tiếp cho đến khi dùng lệnh stop. Mức tiết kiệm của micro-skills phụ thuộc kho mã. Ngoài ra, các kết quả benchmark là của tác giả tự công bố trên SWE-Bench và Web-Bench, không đảm bảo cho quy trình của bạn.
README không đề cập một số điều người dùng doanh nghiệp có thể quan tâm, như đánh giá bảo mật chi tiết của hook, ảnh hưởng khi nhiều người cùng dùng một kho mã, hay cách xử lý dữ liệu nhạy cảm trong các phiên được học. Điều README có nói là những gì plugin học được nằm trên máy bạn. Bạn nên tự đọc tài liệu thiết kế trong thư mục docs của repo trước khi dùng cho kho mã quan trọng.
Khi nào nên và không nên dùng
Nên thử nếu bạn dùng thường xuyên một trong các agent được hỗ trợ trên cùng vài kho mã, chi phí token là mối lo thật, và bạn thích công cụ giữ mọi hành động có thể đảo ngược. Lệnh restore để trả công cụ, việc sự thật bị bỏ khi bị mâu thuẫn, và cam kết plugin không tự dừng lượt làm việc đều làm rủi ro thử nghiệm thấp. Nó cũng hợp với người muốn tái hiện số liệu, nhờ thư mục experiments đi kèm.
Chưa nên dùng nếu agent của bạn nằm ngoài danh sách hoặc phiên bản vượt khoảng được thử, nếu bạn chủ yếu làm việc trên nhiều kho mã mới mỗi lần so với một số kho quen thuộc, hay nếu tổ chức cần bảo đảm bảo mật mà README chưa nêu. Với kho mới hoàn toàn, tác giả cho biết mức giảm trên hai bộ kiểm toán bảo mật thấp hơn so với trường hợp quay lại cùng kho, nhưng đó vẫn là số do họ tự công bố.
Tóm lại, TokenEconomizer là một cách tiếp cận có hệ thống và khá thận trọng cho bài toán chi phí agent: học từ lịch sử, can thiệp qua kênh sẵn có, và luôn cho người dùng quyền quyết định cuối cùng. Giá trị thật cần được kiểm chứng trên kho mã của bạn, và cách an toàn nhất là bắt đầu bằng lệnh status cùng chế độ propose.
Bài do AI viết tự động từ README và dữ liệu GitHub API của repo, có kiểm tra tự động nhưng không có người duyệt từng câu. Báo sai sót qua email.