Chuyển đến nội dung chính

RTK (Rust Token Killer): Giảm Token cho AI Coding Agent như thế nào?

Khi sử dụng AI coding agent để phát triển phần mềm, chúng ta thường quan tâm đến model, prompt và chất lượng code. Tuy nhiên, có một nguồn tiêu thụ token ít được chú ý: output của các lệnh terminal mà AI đọc trong quá trình làm việc.

Một lệnh chạy test có thể tạo ra hàng trăm dòng log. Lệnh Git có thể trả về nhiều thông tin tiến trình không cần thiết. Nếu AI phải đọc những kết quả này qua nhiều vòng implement, test và debug, lượng token phát sinh có thể tăng đáng kể.

RTK (Rust Token Killer) là một công cụ CLI mã nguồn mở giúp lọc, gom nhóm và nén output của các lệnh phát triển phần mềm trước khi kết quả được đưa vào context của AI coding agent.

GitHub: https://github.com/rtk-ai/rtk

1. Vấn đề: AI có thể tiêu tốn token khi đọc output

Giả sử bạn đang sử dụng GitHub Copilot hoặc một AI coding agent để triển khai một feature. Agent có thể thực hiện các bước sau:

  1. Kiểm tra cấu trúc project.
  2. Đọc các file source code.
  3. Thay đổi code theo requirement.
  4. Chạy build và unit test.
  5. Đọc lỗi, sửa code và chạy test lại.
  6. Kiểm tra Git diff trước khi hoàn thành.

Trong quy trình này, output của terminal là một trong những nguồn dữ liệu mà AI cần đọc. Vấn đề không nằm ở việc output có nhiều dòng hay ít dòng, mà là bao nhiêu thông tin thực sự cần thiết để AI đưa ra quyết định tiếp theo.

Ví dụ: chạy unit test

Không dùng RTK:

dotnet test

Khi chạy test, terminal có thể trả về tên của hàng trăm test case, thông báo khởi tạo test runner, kết quả từng test và các thông tin tổng kết. Nếu hầu hết test đều thành công, việc đọc toàn bộ danh sách có thể không cần thiết cho bước debug tiếp theo.

Mục tiêu của RTK là giảm phần output dư thừa nhưng vẫn giữ lại thông tin quan trọng, chẳng hạn số test thất bại và thông báo lỗi.

Nguyên tắc: giảm lượng dữ liệu AI phải đọc, không loại bỏ thông tin cần thiết để giải quyết vấn đề.

2. RTK hoạt động như thế nào?

RTK là một lớp trung gian giữa lệnh terminal và AI coding agent. Công cụ nhận diện các lệnh được hỗ trợ, thực thi hoặc chuyển tiếp chúng, sau đó lọc output theo quy tắc tương ứng.

flowchart TD A["AI Coding Agent"] --> B["Chạy lệnh terminal"] B --> C["RTK nhận diện lệnh"] C --> D["Thực thi lệnh"] D --> E["Lọc và nén output"] E --> F["Output rút gọn"] F --> G["AI đọc kết quả"] G --> H["Tiếp tục implement hoặc debug"]

RTK sử dụng các kỹ thuật chính:

  • Filtering: loại bỏ những thông tin không cần thiết đối với loại lệnh tương ứng.
  • Grouping: gom các kết quả tương tự theo file, nhóm lỗi hoặc loại thông báo.
  • Truncation: rút gọn những dòng quá dài hoặc phần output vượt quá mức hữu ích.
  • Deduplication: gộp các thông báo lặp lại để tránh gửi cùng một thông tin nhiều lần.

Ví dụ, thay vì trả về toàn bộ tiến trình Git push, RTK có thể chỉ hiển thị một dòng xác nhận. Với các test runner được hỗ trợ, RTK có thể gom những test thành công thành một số đếm và giữ lại các lỗi cần xử lý.

3. Cài đặt RTK trên Windows

RTK cung cấp binary cho Windows, macOS và Linux. Trên Windows, cách cài đặt đơn giản là sử dụng Windows Package Manager (winget).

Bước 1: Cài đặt

Mở PowerShell hoặc Windows Terminal:

winget install rtk-ai.rtk

Bước 2: Kiểm tra cài đặt

rtk --version
rtk gain

Lệnh đầu tiên hiển thị phiên bản RTK. Lệnh thứ hai hiển thị báo cáo thống kê mức tiết kiệm mà RTK ghi nhận.

Nếu Windows chưa nhận diện lệnh rtk, hãy kiểm tra việc cài đặt và biến môi trường PATH, sau đó mở lại terminal.

Bước 3: Tích hợp với AI coding agent

RTK hỗ trợ tích hợp với nhiều công cụ AI coding. Cách cấu hình phụ thuộc vào agent bạn đang sử dụng.

GitHub Copilot

rtk init -g --copilot

Google Antigravity

rtk init --agent antigravity

Cursor

rtk init -g --agent cursor

Sau khi khởi tạo, hãy làm theo hướng dẫn của RTK, khởi động lại agent và kiểm tra cấu hình hook. Không nên giả định rằng mọi lệnh terminal đã được tự động rewrite chỉ vì RTK đã cài thành công.

Nếu chưa muốn cấu hình hook, bạn vẫn có thể gọi trực tiếp các lệnh RTK trong terminal để kiểm tra kết quả trước và sau khi lọc.

Tài liệu cài đặt: RTK GitHub Repository

4. Các ví dụ cơ bản

4.1. Tối ưu Git status

Không dùng RTK:

git status

Dùng RTK:

rtk git status

Với repository có nhiều thay đổi, RTK có thể trình bày trạng thái file theo dạng rút gọn, giúp AI nhanh chóng biết có bao nhiêu file modified hoặc untracked.

Ví dụ minh họa output rút gọn:

Branch: feature/stock-filter
Modified: 3 files
Untracked: 1 file

Output thực tế phụ thuộc trạng thái repository và phiên bản RTK. Với một repository nhỏ chỉ có một vài file thay đổi, mức tiết kiệm có thể không đáng kể.

4.2. Tối ưu Git log

Không dùng RTK:

git log -n 10

Dùng RTK:

rtk git log -n 10

Thay vì hiển thị toàn bộ metadata của mỗi commit, output rút gọn ưu tiên hash, tác giả và tiêu đề commit. Đây là cách hữu ích khi agent chỉ cần tìm hiểu lịch sử thay đổi gần đây.

4.3. Tối ưu output kiểm thử

RTK có wrapper cho một số test runner và cung cấp lệnh tổng quát rtk test để ưu tiên hiển thị lỗi. Ví dụ:

rtk test cargo test

Với một dự án .NET, bạn có thể thử:

rtk test dotnet test

Đây là cách gọi wrapper tổng quát, không phải cam kết rằng RTK có một bộ lọc chuyên biệt cho mọi phiên bản .NET test runner. Hãy xác nhận output trên môi trường của bạn và kiểm tra xem lỗi, mã thoát cùng thông tin cần thiết vẫn được giữ lại.

Khi debug, nếu output rút gọn không đủ để tìm nguyên nhân, hãy lấy lại output đầy đủ bằng cơ chế recovery mà RTK cung cấp hoặc chạy lệnh gốc khi cần.

4.4. Tối ưu tìm kiếm code

Không dùng RTK:

rg "MarketRegimeEngine" .

Dùng RTK:

rtk grep "MarketRegimeEngine" .

RTK có thể gom kết quả theo file và rút gọn những dòng quá dài. Điều này giúp agent xác định nơi sử dụng một class hoặc method mà không phải đọc quá nhiều kết quả trùng lặp.

5. RTK tiết kiệm bao nhiêu token?

Theo mô tả của dự án, RTK có thể giảm tới khoảng 90% lượng output terminal mà agent đọc đối với những lệnh phù hợp. Tuy nhiên, cần phân biệt ba chỉ số:

  • Terminal output: dữ liệu thô do lệnh tạo ra.
  • Model input tokens: token của prompt, lịch sử, output terminal và các nguồn input khác mà model nhận.
  • Model output tokens: token do model sinh ra, chẳng hạn giải thích, kế hoạch hoặc code.

RTK trực tiếp tối ưu loại đầu tiên. Nếu output sau lọc được đưa vào context của model, nó có thể gián tiếp làm giảm model input tokens. RTK không trực tiếp nén prompt ban đầu và không tự động làm giảm số token mà model sinh ra.

Ví dụ 1: Output terminal giảm 80%

Giả sử một lệnh tạo ra lượng output tương đương 10.000 token. Sau khi lọc, output còn tương đương 2.000 token.

Chỉ số Không RTK Dùng RTK
Output terminal ước tính 10.000 2.000
Token giảm - 8.000
Tỷ lệ giảm - 80%

Công thức tính:

\[ \text{Reduction} = \frac{T_{\text{before}} - T_{\text{after}}} {T_{\text{before}}} \times 100\% \]

Trong ví dụ trên, mức giảm là 80%. Đây là tỷ lệ giảm của output terminal, không phải tỷ lệ giảm của tổng input token hay hóa đơn AI.

Ví dụ 2: Tổng input token giảm bao nhiêu?

Giả sử một lượt gọi model có lượng token được tính minh họa như sau:

  • System prompt và requirement: 15.000 token.
  • Lịch sử hội thoại và context khác: 5.000 token.
  • Output terminal: 10.000 token.

Tổng input trước khi dùng RTK là 30.000 token. Nếu RTK giảm output terminal còn 2.000 token, tổng input minh họa sẽ là 22.000 token.

Thành phần Không RTK Dùng RTK
Prompt và requirement 15.000 15.000
Hội thoại và context khác 5.000 5.000
Output terminal 10.000 2.000
Tổng input 30.000 22.000

Khi đó:

\[ \text{Input reduction} = \frac{30.000 - 22.000}{30.000} \times 100\% \approx 26{,}7\% \]

Như vậy, output terminal giảm 80%, nhưng tổng input chỉ giảm khoảng 26,7% trong ví dụ này.

Đây là mô hình minh họa để giải thích cách tính, không phải kết quả benchmark thực tế. Trong hệ thống thực, tokenizer, context được giữ lại, prompt caching và cách agent gọi model có thể khiến kết quả khác đi.

Ví dụ 3: Vì sao không thể kết luận tổng chi phí giảm 80%?

Tổng chi phí AI có thể bao gồm input tokens, output tokens và các mức giá riêng cho token thường hoặc token được cache. Nếu RTK giảm input mà không làm thay đổi output do model sinh ra, tỷ lệ giảm tổng chi phí sẽ khác với tỷ lệ giảm input.

Có thể mô hình hóa đơn giản:

\[ C = I \times P_i + O \times P_o \]

Trong đó:

  • \(I\): số input tokens được tính phí.
  • \(O\): số output tokens được tính phí.
  • \(P_i\): giá cho mỗi input token.
  • \(P_o\): giá cho mỗi output token.

Công thức trên chưa tính riêng giá cache, mức giá theo model hay các chính sách tính phí khác. Nó chỉ cho thấy rằng muốn tính mức giảm chi phí, chúng ta phải biết cả input, output và đơn giá thực tế.

6. Dùng RTK với SpecKit

SpecKit và RTK giải quyết hai vấn đề khác nhau nên có thể bổ trợ cho nhau trong quy trình phát triển phần mềm.

  • SpecKit: tổ chức requirement, plan, tasks và các ràng buộc kiến trúc.
  • RTK: giảm lượng output terminal mà AI cần đọc trong quá trình thực thi.
flowchart TD A["Requirement"] --> B["SpecKit: Specify"] B --> C["spec.md"] C --> D["SpecKit: Plan"] D --> E["plan.md"] E --> F["SpecKit: Tasks"] F --> G["tasks.md"] G --> H["AI Implement"] H --> I["Build và Test"] I --> J["RTK lọc output"] J --> K{"Test thành công?"} K -- "Không" --> L["Đọc lỗi và sửa code"] L --> I K -- "Có" --> M["Verify và Review"]

Ví dụ, khi agent triển khai một feature theo SpecKit, bạn vẫn giữ nguyên requirement và acceptance criteria trong tài liệu. RTK chỉ tối ưu output của các lệnh như Git, test runner hoặc tìm kiếm code khi những lệnh đó đi qua RTK.

RTK không tự động rút gọn mọi file Markdown của SpecKit. Nếu agent đọc file bằng công cụ đọc file trực tiếp thay vì terminal, kết quả đó có thể không đi qua RTK.

Với các dự án .NET hoặc Next.js, giai đoạn implement, test và debug thường là nơi đáng thử RTK trước tiên vì agent có thể chạy lại nhiều lệnh trong một feature.

7. Theo dõi mức tiết kiệm thực tế

Sau khi cài đặt và sử dụng RTK, bạn có thể dùng các lệnh sau để xem thống kê:

rtk gain
rtk gain --daily
rtk gain --history
rtk discover
  • rtk gain: xem tổng quan mức tiết kiệm.
  • rtk gain --daily: xem thống kê theo ngày.
  • rtk gain --history: xem lịch sử các lệnh.
  • rtk discover: tìm những cơ hội tối ưu có thể còn bỏ sót.

Theo tài liệu dự án, RTK ước tính token dựa trên số byte chia cho 4, thay vì chạy tokenizer riêng cho từng model. Do đó, số token trong dashboard là số ước tính, không nên xem như số token billing chính xác của nhà cung cấp AI.

Để đánh giá hiệu quả, nên đo trên cùng loại tác vụ, cùng repository và một khoảng thời gian đủ dài. Hãy theo dõi cả mức giảm output, chất lượng thông tin được giữ lại và số lần agent phải chạy lại lệnh để lấy thêm dữ liệu.

8. Những giới hạn cần lưu ý

  1. RTK không trực tiếp giảm token của requirement, prompt hay nội dung do model sinh ra.
  2. Không phải mọi lệnh đều có bộ lọc chuyên biệt. Những lệnh chưa được hỗ trợ có thể không tiết kiệm được nhiều.
  3. Hook chỉ áp dụng cho các lệnh đi qua cơ chế tích hợp tương ứng. Công cụ đọc file trực tiếp có thể nằm ngoài phạm vi đó.
  4. Output quá ngắn có thể khiến agent thiếu ngữ cảnh debug. Khi cần, hãy truy xuất output đầy đủ hoặc chạy lại lệnh gốc.
  5. Mức giảm output không đồng nghĩa với mức giảm tương đương về tổng input token hoặc tổng chi phí AI.

9. Kết luận

RTK là một công cụ đáng thử nếu bạn thường xuyên sử dụng AI coding agent để thực hiện những tác vụ có nhiều vòng build, test, tìm kiếm và debug.

Điều quan trọng nhất là hiểu đúng phạm vi của công cụ:

  • RTK giảm output terminal dư thừa mà agent cần đọc.
  • Output giảm có thể làm giảm input tokens của model.
  • Mức tiết kiệm tổng chi phí phụ thuộc vào toàn bộ workflow và cách nhà cung cấp tính phí.

Nếu đang sử dụng SpecKit, hãy giữ nguyên tài liệu requirement và acceptance criteria làm nguồn sự thật, đồng thời thử RTK trong giai đoạn implement và test. Sau đó dùng báo cáo thực tế để quyết định liệu mức tiết kiệm có đáng kể đối với dự án của bạn hay không.

Tài liệu tham khảo

Nhận xét

Bài đăng phổ biến từ blog này

[ASP.NET MVC] Authentication và Authorize

Một trong những vấn đề bảo mật cơ bản nhất là đảm bảo những người dùng hợp lệ truy cập vào hệ thống. ASP.NET đưa ra 2 khái niệm: Authentication và Authorize Authentication xác nhận bạn là ai. Ví dụ: Bạn có thể đăng nhập vào hệ thống bằng username và password hoặc bằng ssh. Authorization xác nhận những gì bạn có thể làm. Ví dụ: Bạn được phép truy cập vào website, đăng thông tin lên diễn đàn nhưng bạn không được phép truy cập vào trang mod và admin.

Tổng hợp một số kiến thức lập trình về Amibroker

Giới thiệu về Amibroker Amibroker theo developer Tomasz Janeczko được xây dựng dựa trên ngôn ngữ C. Vì vậy bộ code Amibroker Formula Language sử dụng có syntax khá tương đồng với C, ví dụ như câu lệnh #include để import hay cách gói các object, hàm trong các block {} và kết thúc câu lệnh bằng dấu “;”. AFL trong Amibroker là ngôn ngữ xử lý mảng (an array processing language). Nó hoạt động dựa trên các mảng (các dòng/vector) số liệu, khá giống với cách hoạt động của spreadsheet trên excel.

ASP.NET MVC: Cơ bản về Validation

Validation (chứng thực) là một tính năng quan trọng trong ASP.NET MVC và được phát triển trong một thời gian dài. Validation vắng mặt trong phiên bản đầu tiên của asp.net mvc và thật khó để tích hợp 1 framework validation của một bên thứ 3 vì không có khả năng mở rộng. ASP.NET MVC2 đã hỗ trợ framework validation do Microsoft phát triển, tên là Data Annotations. Và trong phiên bản 3, framework validation đã hỗ trợ tốt hơn việc xác thực phía máy khách, và đây là một xu hướng của việc phát triển ứng dụng web ngày nay.