Khi làm việc với các AI agent như Claude Code, chắc bạn đã quá quen cảnh ngồi nhìn agent vật lộn với hàng chục lệnh grep, glob và đọc file liên tiếp chỉ để trả lời một câu hỏi kiến trúc đơn giản. Đây chính là "thuế thăm dò" (exploration tax) – khoản chi phí ẩn đội cả độ trễ lẫn hóa đơn token lên cao. Thay vì tập trung suy luận, AI đang tiêu tốn tài nguyên để tự dựng lại bản đồ cấu trúc mã nguồn trong mỗi phiên làm việc.
Việc lãng phí token Claude Code cho quá trình thăm dò này là cực kỳ vô lý. Dữ liệu thực tế cho thấy một câu hỏi về luồng xử lý có thể khiến AI thực hiện tới 52 tool call, tiêu tốn 157.800 token và mất 1 phút 37 giây chỉ để định vị đúng file cần sửa. Khi kết thúc phiên, toàn bộ "kiến thức" tốn kém đó biến mất, buộc bạn phải trả thuế lại từ đầu ở phiên tiếp theo.

Vì sao Claude Code "ngốn" nhiều token đến vậy?
Vấn đề cốt lõi nằm ở cơ chế tìm kiếm tuần tự. Khi không có bản đồ cấu trúc, AI agent phải mò mẫm trong bóng tối. Nó bắt đầu bằng việc liệt kê file, tìm từ khóa qua grep, rồi đọc từng file để hiểu mối quan hệ giữa các hàm và lớp. Mỗi file được đọc sẽ nằm lại trong cửa sổ ngữ cảnh (context window) cho đến hết phiên, khiến bộ nhớ bị lấp đầy bởi thông tin rác.

Sự lãng phí này càng nghiêm trọng trong các dự án lớn. Với dự án VS Code, nếu không có bản đồ mã nguồn, AI có thể tiêu tốn tới 2,8 triệu token cho một lần thực hiện tác vụ kiến trúc. Phần lớn con số này không dành cho việc viết code, mà dành cho việc "đọc để biết code nằm ở đâu". Đây là nút thắt hiệu suất mà các cách thủ công như viết file CLAUDE.md không thể giải quyết triệt để, vì AI vẫn phải đọc và diễn giải văn bản theo kiểu xác suất.
Code Graph là gì và nó giải quyết điều gì?
Code Graph là một đồ thị tri thức mã nguồn mở (giấy phép MIT) được thiết kế để cung cấp cho AI agent một bản đồ toàn diện về codebase. Thay vì để AI tự đi dò dẫm từng bước, Code Graph cho phép agent truy xuất toàn bộ thông tin cấu trúc – gồm các điểm đầu vào (entry point), các ký hiệu liên quan (symbol) và đoạn mã tương ứng – chỉ qua một tool call duy nhất là codegraph_explore.
Hệ thống nhận diện tốt các framework hiện đại như Spring, FastAPI, NestJS hay Django bằng cách hiểu các mô hình routing (URLconf, decorator). Code Graph chạy 100% cục bộ, lưu dữ liệu trong file SQLite tại thư mục .codegraph/. Bạn không cần API key hay kết nối internet, đảm bảo mã nguồn không bao giờ rời khỏi máy. Nó biến quá trình tìm kiếm từ xác suất (AI đoán file liên quan) thành xác định (truy vấn trực tiếp từ đồ thị).
Code Graph hoạt động như thế nào?
Code Graph dùng thư viện tree-sitter để phân tích cú pháp mã nguồn thành cây cú pháp trừu tượng (AST). Từ đó, nó trích xuất các Node (function, class) và các Edge đại diện cho quan hệ logic (calls, imports, inheritance). Khác với Vector Search (như trong Cursor) vốn dựa trên độ tương đồng ngữ nghĩa mang tính xác suất và hay gặp "điểm mù" về cấu trúc, Code Graph xây một bản đồ xác định (deterministic): nó truy vết chính xác từ một callback đến hàm thực thi, hay từ một interface đến các class triển khai.

Một ưu điểm kỹ thuật đáng chú ý là khả năng bắc cầu xuyên ngôn ngữ (cross-language bridging). Code Graph nối được các luồng xử lý từ Swift sang Objective-C qua auto-bridging, hoặc từ JavaScript sang các Native Module trong React Native. Để dữ liệu luôn mới, hệ thống vận hành kiến trúc đồng bộ ba lớp:
- Native watcher: dùng FSEvents hoặc inotify để nhận biết thay đổi file ngay lập tức.
- Debounced batching: gom nhóm các thay đổi và cập nhật sau mỗi 2 giây yên tĩnh để tiết kiệm tài nguyên.
- Staleness flag: nếu AI truy vấn vào file vừa sửa nhưng chưa kịp index, hệ thống gắn cảnh báo để AI tự đọc file trực tiếp, tránh trả lời sai.
Cài đặt và tích hợp Code Graph vào Claude Code
Quy trình cài đặt được tự động hóa gần như hoàn toàn. Trình cài đặt sẽ cấu hình MCP server trong ~/.claude.json, thiết lập quyền auto-allow và tạo hướng dẫn cho agent.

Lưu ý quan trọng cho macOS: bạn nên cài Xcode command-line tools (xcode-select --install) trước khi chạy, nếu không Code Graph sẽ rơi vào chế độ dự phòng chậm hơn 5–10 lần.
# macOS / Linux
curl -fsSL https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.sh | sh
# Windows (PowerShell)
irm https://raw.githubusercontent.com/colbymchenry/codegraph/main/install.ps1 | iex
# Khởi tạo đồ thị cho dự án
codegraph init -iCờ -i kích hoạt lần dựng đồ thị đầy đủ đầu tiên, quét toàn bộ symbol và quan hệ vào thư mục .codegraph/ cục bộ. Với repo thông thường, việc này chỉ mất vài giây; với monorepo khổng lồ (100.000+ file), nó có thể mất tới 10 phút, nhưng đây là chi phí một lần — các lần đồng bộ sau đều là incremental (cộng dồn) nên rất nhanh. Nếu dùng WSL2, bạn nên để mã nguồn và file index trên hệ thống file native của Linux thay vì ổ đĩa mount (/mnt/c/) để tránh vấn đề khóa (locking) của SQLite và giữ tốc độ tối ưu.
Tiết kiệm được bao nhiêu token và chi phí?
Benchmark trên 7 dự án mã nguồn mở cho thấy các con số ấn tượng: giảm trung bình 57% token, 35% chi phí và 71% tool call. Lợi ích tăng dần theo độ phức tạp của dự án và ngôn ngữ:
- Tokio (Rust): giảm 82% chi phí (từ 2,41 USD xuống 0,42 USD mỗi lần chạy). Các ngôn ngữ có hệ thống module phức tạp như Rust thường khiến AI cực kỳ vất vả khi thăm dò thủ công.
- VS Code: lượng token giảm từ 2,8 triệu xuống còn khoảng 601.000.
- Excalidraw: đạt mức giảm token Claude Code lên tới 90% trong các tác vụ truy vấn kiến trúc chuyên sâu.

Điểm mấu chốt: đây không phải là cải thiện của model. Cùng một model chạy ở cả hai kịch bản, mỗi token tiết kiệm được đều đến từ việc loại bỏ công đoạn dò file cơ học. Codebase càng lớn và càng "rối", lợi ích càng cao, vì đồ thị ngăn agent phải lùng sục qua các cấu trúc thư mục sâu để lần ra phụ thuộc.
Giới hạn và các chiến lược bổ sung
Code Graph tối ưu việc thu thập ngữ cảnh, nhưng khả năng suy luận cuối cùng vẫn phụ thuộc vào model AI — nó là công cụ tăng cường, không phải thay thế. Rủi ro chính là "graph drift": nếu tiến trình đồng bộ bị gián đoạn, đồ thị có thể lệch khỏi mã thực tế. Cảnh báo staleness giảm nhẹ điều này, nhưng bạn nên thỉnh thoảng chạy codegraph status để kiểm tra độ tươi của index. Ngoài ra, dù hỗ trợ 20+ ngôn ngữ, độ sâu bao phủ khác nhau: TypeScript và Rust rất trưởng thành, trong khi vài ngôn ngữ như Objective-C mới ở mức hỗ trợ một phần.
Để đẩy hiệu quả xa hơn, bạn có thể kết hợp thêm vài công cụ:
- RTK (Rust Token Killer): nén output của log hoặc kết quả test trước khi chúng lọt vào ngữ cảnh. Lưu ý RTK nén "lossy" (mất thông tin), hãy tắt nó khi cần debug sâu từng dòng log lỗi.
- Caveman: cắt bỏ từ thừa trong phản hồi của AI, rút ngắn lịch sử phiên gần một nửa. Cẩn thận khi dùng cho các tác vụ nhiều bước, vì cắt tỉa quá đà có thể làm giảm khả năng "tự suy ngẫm" của model.
- Quản lý session: dùng
/clearđể reset ngữ cảnh giữa các tác vụ khác nhau,/compactđể tóm tắt khi cần giữ lịch sử, và/contextđể soi xem file nào đang chiếm dụng bộ nhớ.
Kỹ năng thật sự không nằm ở việc cài đủ các công cụ này, mà ở chỗ biết bật cái nào cho từng tác vụ trước mặt — và biết khi nào nên tắt.
Tài liệu tham khảo
- colbymchenry/codegraph — GitHub
- I Cut Claude Code Exploration Time and Costs by 90% With One Tool — Colby McHenry (Medium)
- How to Reduce 90% of Claude Code Token Usage — John Kim (Push To Prod)
- CodeGraph: The Open-Source Knowledge Graph That Makes AI Coding Tools Dramatically Cheaper — KD Agentic (Medium)