Vì sao Claude Code đọc lại toàn bộ dự án và cách khắc phục
MarkdownClaude Code không lập chỉ mục mã và đọc lại dự án từ đầu, khiến token bị tiêu tốn. Cách cung cấp cho Claude bộ nhớ mã lâu dài qua MCP và giảm mức sử dụng.
Đọc toàn bộ bài viết
Điểm chính
Claude Code không duy trì chỉ mục mã của bạn. Mỗi phiên, nó lại tìm kiếm trong dự án và đọc tệp từ đầu, khiến token bị tiêu tốn cho việc trinh sát thay vì công việc thực tế. Bạn có thể khắc phục bằng bộ nhớ mã: cài đặt máy chủ chỉ mục thông qua MCP để Claude có thể dùng sơ đồ dự án đã tạo sẵn thay vì đọc lại toàn bộ.
Tài liệu Ailoot: API, khóa và kết nối.
Vì sao Claude Code luôn đọc lại dự án từ đầu?
Điểm chính
Claude Code không có chỉ mục mã tích hợp sẵn. Nó tìm kiếm trong dự án bằng ba công cụ: tìm tệp theo mẫu, tìm chuỗi trong văn bản và đọc toàn bộ tệp. Cách này gọi là tìm kiếm theo tác nhân: mô hình quyết định cần xem ở đâu và lặp lại quy trình này cho mỗi nhiệm vụ mới. Nó không nhớ phiên trước, nên mỗi phiên mới đều bắt đầu lại từ đầu.
Nhiều người nghĩ đây là lỗi. Thực ra, Claude Code được thiết kế như vậy: nó không có chỉ mục dự án riêng. Khi bạn yêu cầu sửa một thứ gì đó, nó không có sẵn sơ đồ mã để dùng mà phải khám phá dự án lại: tìm các tệp liên quan, tìm những chuỗi cần thiết và đọc tệp vào bộ nhớ.
Cách tiếp cận này có những ưu điểm thực sự. Mã luôn mới nhất — không có chỉ mục nào bị lỗi thời. Không cần cấu hình gì. Mã của bạn không bị gửi đến cơ sở dữ liệu nào.
Nhưng cũng có nhược điểm: mỗi nhiệm vụ mới đồng nghĩa với một lượt tìm kiếm và đọc tệp mới. Token bị tiêu tốn để xác định lại mọi thứ nằm ở đâu, dù Claude đã tìm ra trong phiên trước. Dự án càng lớn, chi phí trinh sát này càng cao. Cơ chế này chính là lý do đôi khi bạn có cảm giác tác nhân đang “đọc mọi thứ”.
Việc này thực sự tiêu tốn bao nhiêu token?
Điểm chính
Ngay cả trước khi đọc lại mã, Claude Code đã gửi khoảng 33,000 token dữ liệu hệ thống trong mỗi yêu cầu. Với một cấu hình làm việc thực tế, tổng số đạt 75,000–85,000 token trước khi bạn gõ một từ nào. Sau đó, việc đọc lại tệp còn cộng thêm vào con số ấy; theo tài liệu chính thức, đọc tệp tiêu tốn nhiều ngữ cảnh nhất.
Chi phí bắt đầu phát sinh trước cả yêu cầu của bạn. Một phép đo độc lập cho thấy điều này rất đơn giản: Claude Code gửi khoảng 33,000 token system prompt và mô tả công cụ trước khi đọc ký tự đầu tiên trong tin nhắn của bạn. Để so sánh, OpenCode bắt đầu ở khoảng 7,000.
Sau đó là việc đọc lại. Mỗi lần tìm kiếm tệp và đọc tệp đều thêm token vào ngữ cảnh. Tài liệu chính thức của Claude Code nói thẳng điều này: đọc tệp chiếm phần lớn mức sử dụng ngữ cảnh. Phân tích auth.ts với 2,400 token nghĩa là chỉ riêng Claude đã xử lý 2,400 token, và điều tương tự xảy ra với mọi tệp nó mở trong lúc trinh sát.
Với độc giả của chúng ta, điều này quy thành tiền bạc và giới hạn. Nỗi lo lớn nhất của những người mới làm vibe coding là “Tôi đã trả tiền, rồi giới hạn hết sạch mà chẳng được gì”. Nếu tác nhân quét dự án và đọc lại tệp từ đầu cho mỗi nhiệm vụ, ngữ cảnh sẽ đầy nhanh gấp đôi: trước tiên do phần hệ thống, sau đó là do trinh sát. Tôi đã tổng hợp đầy đủ bản đồ nơi token Claude Code được sử dụng trong hướng dẫn “Token Claude Code được dùng vào đâu”—việc đọc lại dự án là một trong chín kiểu được đề cập ở đó.
Bộ nhớ mã lâu dài là gì?
Điểm chính
Bộ nhớ mã là sơ đồ dự án có sẵn mà tác nhân có thể tra cứu thay vì đọc lại tệp. Một công cụ riêng quét mã một lần, xây dựng cấu trúc gồm các hàm, tệp và mối liên kết, rồi lưu vào đĩa. Sau đó, khi bạn hỏi “phần nào xử lý thanh toán”, Claude lấy câu trả lời từ sơ đồ chỉ với một truy vấn thay vì phải xem từng tệp.
Bộ nhớ mã xử lý đúng khoảng trống khiến Claude đọc lại dự án. Ý tưởng rất đơn giản: cho một công cụ quét toàn bộ mã một lần, xây dựng sơ đồ từ đó rồi giữ sơ đồ sẵn dùng. Khi ấy, tác nhân không cần tìm kiếm lại từ đầu mỗi lần — nó chỉ cần hỏi sơ đồ.
Về kỹ thuật, cách hoạt động như sau. Một công cụ riêng quét dự án và chia thành các thành phần: có những hàm và lớp nào, chúng gọi lẫn nhau ra sao, và các tệp nào có liên quan. Cấu trúc này được lưu trên đĩa. Khi Claude cần biết logic thanh toán nằm ở đâu hoặc điều gì sẽ hỏng nếu sửa một hàm, nó gửi một truy vấn có mục tiêu đến sơ đồ thay vì đọc hàng chục tệp.
Sơ đồ này được kết nối qua MCP — cách tiêu chuẩn để gắn công cụ bên ngoài vào Claude Code (tôi đã trình bày cách kết nối các máy chủ khác trong hướng dẫn “Máy chủ MCP cho Claude Code”). Công cụ bộ nhớ mã bổ sung các lệnh tìm kiếm sơ đồ riêng, và Claude tự dùng chúng khi cần định hướng trong dự án.
Trên thực tế, khác biệt nằm giữa “đọc cả thư mục để tìm một hàm” và “hỏi sơ đồ xem hàm đó ở đâu”. Cách thứ nhất tốn hàng chục nghìn token; cách thứ hai chỉ tốn hàng trăm.
Hai cách tiếp cận bộ nhớ mã khác nhau như thế nào?
Điểm chính
Có hai công cụ hữu ích và cả hai đều miễn phí theo giấy phép MIT. Serena giúp tác nhân điều hướng mã như một môi trường phát triển thông minh và phù hợp để chỉnh sửa chính xác. claude-context tìm kiếm theo ý nghĩa bằng embeddings, nhưng cần cơ sở dữ liệu bên ngoài và khóa. Điểm khác nhau là thứ mà mỗi công cụ ghi nhớ.
Các công cụ bộ nhớ mã khác nhau ở thứ chúng xây dựng từ dự án. Có thể hình dung đơn giản như sau: một công cụ giúp bạn thao tác chỉnh sửa tinh vi, còn công cụ kia tìm kiếm theo ý nghĩa.
| Tiêu chí so sánh | Serena | claude-context |
|---|---|---|
| Loại bộ nhớ | Điều hướng mã thông qua một bộ máy môi trường phát triển | Tìm kiếm dựa trên ý nghĩa bằng embeddings |
| Tìm thấy gì | Định nghĩa, vị trí gọi thực tế, chỉnh sửa theo ký hiệu | Mã theo mô tả: “logic thanh toán nằm ở đâu” |
| Phụ thuộc bên ngoài | Trình quản lý gói uv; với TypeScript và JavaScript còn cần Node 20+ và npm | Cơ sở dữ liệu bên ngoài + khóa + Node 20+ |
| Cài đặt | Một lệnh | Lệnh kèm ba thiết lập |
| Mức tiết kiệm token | Không công bố tỷ lệ chính xác | Khoảng 40% với chất lượng tương đương |
| Sao GitHub | 26,468 | 12,138 |
| Điểm mạnh | Tái cấu trúc cẩn thận trên toàn bộ mã nguồn | Tìm đúng thứ cần mà không cần biết tên chính xác |
| Điểm yếu | Ít ngôn ngữ hơn, không tìm kiếm theo ý nghĩa | Thiết lập phức tạp, cần dịch vụ đám mây |
Số sao GitHub được tính đến ngày 15 tháng 7 năm 2026 (theo GitHub API). Cả hai công cụ đều miễn phí và mã nguồn mở, đều hoạt động với Claude Code và đều kết nối dưới dạng máy chủ MCP.
Tóm tắt ngắn gọn cho người không phải lập trình viên. Serena giống như bàn tay của bác sĩ phẫu thuật: dùng khi bạn chỉnh sửa cùng một phần ở nhiều nơi trong dự án và cần độ chính xác. claude-context là tìm kiếm theo ý nghĩa: nó tìm mã từ mô tả, nhưng cần thiết lập cơ sở dữ liệu đám mây và khóa.
Khi nào nên chọn Serena hoặc claude-context?
Điểm chính
Serena hữu ích khi việc chỉnh sửa chính xác là quan trọng: đổi tên một hàm trong toàn dự án, thay phần thân của hàm hoặc tìm tất cả vị trí gọi thực tế. Công cụ này hoạt động qua cùng bộ máy với các môi trường phát triển thông minh và chỉnh sửa mã theo ý nghĩa, chứ không phải bằng cách khớp văn bản. Chọn claude-context khi bạn cần tìm mã theo mô tả và không ngại thiết lập cơ sở dữ liệu bên ngoài cùng một khóa.
Hai công cụ này không cạnh tranh cho cùng một giải thưởng. Chúng ghi nhớ những thứ khác nhau, nên lựa chọn tùy thuộc vào nhiệm vụ.
Chọn Serena nếu bạn thường xuyên tái cấu trúc mã. Công cụ này giúp tác nhân điều hướng mã như một môi trường phát triển thông minh: tìm định nghĩa hàm và tất cả vị trí gọi thực tế, sau đó cẩn thận đổi tên hàm hoặc thay phần thân của nó trên toàn dự án. Tác giả mô tả lợi ích như sau.
Bộ công cụ mã mạnh mẽ qua MCP: tìm kiếm và chỉnh sửa ngữ nghĩa — một môi trường phát triển dành cho tác nhân của bạn.
Serena không công bố tỷ lệ tiết kiệm chính xác, và tôi sẽ không gán cho nó một con số bịa đặt. Lợi ích nằm ở chỗ khác: trong khi tìm kiếm thông thường trả về bốn mươi kết quả, gồm cả bình luận và chuỗi văn bản, khiến Claude phải đọc hết bốn tệp, Serena trả lời bằng vài truy vấn chính xác. Điều đó có nghĩa là ít lệnh gọi hơn, ít kết quả khớp sai hơn và do đó giảm nguy cơ tác nhân chỉnh sửa nhầm.
Chọn claude-context nếu bạn cần tìm kiếm theo ý nghĩa và không ngại thiết lập. Công cụ này chuyển mã thành các vector (dấu vân tay dạng số thể hiện ý nghĩa) rồi tìm theo mô tả: “tìm chỗ chứa logic thanh toán của chúng ta”, ngay cả khi bạn không biết tên hàm. Cái giá của cách tìm kiếm này là phải thiết lập thêm.
Trung bình, claude-context giảm mức sử dụng token khoảng 40% mà vẫn duy trì chất lượng tìm kiếm tương đương.
claude-context cần cơ sở dữ liệu vector bên ngoài, khóa của nhà cung cấp embeddings và phiên bản Node mới. Trong hai công cụ, đây là công cụ mất công thiết lập hơn, nên tôi khuyên người mới bắt đầu bằng công cụ khác.
Có thể làm gì trực tiếp trong Claude Code mà không cần công cụ bên thứ ba?
Điểm chính
Các lệnh tích hợp sẵn giải quyết được một nửa vấn đề. /context hiển thị chính xác thứ gì đang dùng ngữ cảnh. /compact nén lịch sử, /clear đặt lại lịch sử trước nhiệm vụ mới, còn /doctor tìm các mục không cần thiết và đề xuất dọn dẹp. Một tệp CLAUDE.md ngắn thay cho tệp quá dài sẽ tiết kiệm hàng nghìn token trong mỗi tin nhắn.
Trước khi cài công cụ bên thứ ba, hãy tận dụng những gì Claude Code đã có sẵn. Các lệnh này miễn phí và dùng được ngay.
/context—hiển thị phân tích trực tiếp về những gì đang chiếm cửa sổ ngữ cảnh: system prompt, CLAUDE.md, bộ nhớ, công cụ và tệp. Lệnh/mcphiển thị chi phí của từng máy chủ đã kết nối, còn/memorycho biết những gì được tải lúc khởi động./compact—nén lịch sử hội thoại thành một bản tóm tắt ngắn rồi tiếp tục cùng nhiệm vụ. Bạn có thể định hướng phần cần giữ lại bằng cách thêm nội dung muốn bảo toàn vào/compact./clear—xóa toàn bộ lịch sử. Khuyến nghị chính thức là chạy lệnh này khi chuyển sang nhiệm vụ không liên quan, để hội thoại cũ không chiếm chỗ của các tệp bạn cần./doctor(còn được gọi là/checkup, ra mắt ngày 8 tháng 7 năm 2026)—chẩn đoán cấu hình và đề xuất cách sửa: loại bỏ mục trùng lặp trong CLAUDE.md, tìm công cụ và máy chủ không dùng, đồng thời phát hiện trình xử lý chậm.
Một lưu ý riêng về CLAUDE.md. Tệp này được tải vào ngữ cảnh khi bắt đầu mỗi phiên và được đưa vào mọi tin nhắn. Nếu tệp quá dài, bạn sẽ liên tục phải trả chi phí cho nó. Khuyến nghị chính thức là giữ tệp dưới 200 dòng và chuyển chi tiết tham khảo vào skills, chỉ tải khi cần. Tôi đã trình bày cách tạo CLAUDE.md đúng cách trong hướng dẫn riêng “Cách cấu hình CLAUDE.md”.
Một công cụ tích hợp sẵn khác là subagents. Chúng có ngữ cảnh riêng, nên bạn có thể giao cho chúng các công việc đọc và trinh sát nặng mà không làm phình cửa sổ chính. Anthropic nêu nguyên tắc chung trong bài phân tích kỹ thuật như sau.
Làm tốt công việc với ngữ cảnh nghĩa là tìm tập hợp token nhỏ nhất có thể nhưng giàu thông tin, đủ để tạo ra kết quả mong muốn.
Thêm máy chủ MCP có khiến ngữ cảnh lớn hơn nữa không?
Điểm chính
Đó là mối lo hợp lý, nhưng không. Từ năm 2026, Claude Code không còn tải toàn bộ mô tả công cụ MCP vào ngữ cảnh theo mặc định — nó trì hoãn việc tải và chỉ tải những gì thực sự cần. Khi khởi động, chỉ có tên được đưa vào ngữ cảnh. Vì vậy, chỉ mục mã tạo thêm lượng chi phí hệ thống không đáng kể nhưng lại tiết kiệm hàng nghìn token vốn sẽ bị tiêu tốn để đọc lại tệp.
Trước đây, suy luận “thêm một máy chủ đồng nghĩa với thêm chi phí ngữ cảnh” là đúng, nhưng Claude Code đã thay đổi. Mô tả công cụ MCP hiện được trì hoãn theo mặc định: lúc khởi động, ngữ cảnh chỉ có tên máy chủ; mô tả đầy đủ được tải khi một công cụ cụ thể cần cho nhiệm vụ. Tài liệu nêu rõ điều này.
Tìm kiếm công cụ giúp giảm mức sử dụng ngữ cảnh MCP bằng cách trì hoãn mô tả công cụ cho đến khi Claude cần. Khi phiên bắt đầu, chỉ tên công cụ được tải, vì vậy việc thêm máy chủ MCP hầu như không ảnh hưởng đến cửa sổ ngữ cảnh.
Phép tính cho bộ nhớ mã rất đơn giản: một khoản chi phí cố định nhỏ cho tên công cụ, đổi lại hàng nghìn token được tiết kiệm vì tác nhân không còn đọc lại tệp. Cán cân rõ ràng nghiêng về phía chỉ mục.
Có một vài lưu ý chân thực để bạn không mong đợi phép màu. Thỉnh thoảng cần xây dựng lại chỉ mục — sơ đồ phản ánh trạng thái mã tại thời điểm quét và cần cập nhật sau những lần chỉnh sửa lớn (tùy công cụ: một số tự động làm việc này, số khác yêu cầu chạy lệnh). Những tuyên bố lớn như “ít hơn 120 lần token” mô tả trường hợp tốt nhất với một số truy vấn được chọn, chứ không phải kết quả bạn sẽ thấy ở mọi nhiệm vụ. Mức tiết kiệm thực tế khiêm tốn hơn nhưng vẫn đáng kể. Nếu muốn tìm hiểu sâu hơn về cách tránh dùng hết giới hạn nói chung, tôi có bài phân tích riêng “Cách tránh dùng cạn giới hạn Claude Code”.
Hôm nay nên bắt đầu từ đâu?
Điểm chính
Hãy bắt đầu với những gì miễn phí và nhanh chóng. Chạy /doctor để dọn các mục không cần thiết. Rút gọn CLAUDE.md xuống còn 200 dòng. Các bước này giảm bớt những gì Claude mang vào mỗi nhiệm vụ, đồng thời bắt đầu tiết kiệm token và giới hạn của bạn.
Nếu bỏ hết những thứ không cần thiết, kế hoạch hôm nay rất đơn giản:
- Chạy
/doctorvà dọn những gì công cụ đề xuất: các mục trùng trong CLAUDE.md và những công cụ không dùng. - Rút gọn CLAUDE.md xuống còn 200 dòng, chuyển tài liệu tham khảo vào skills.
Sau đó, chọn theo nhu cầu: nếu bạn tái cấu trúc mã nhiều, hãy thêm Serena để chỉnh sửa chính xác; nếu cần tìm kiếm theo ý nghĩa, hãy thiết lập claude-context. Bộ nhớ mã và ngữ cảnh gọn gàng đã giải quyết điểm đau chính ngay hôm nay.
Nguồn
Nếu bạn cần truy cập các mô hình AI qua Ailoot, hãy xem Ailoot.
Xem thêm chi tiết
Câu hỏi thường gặp
Khi nào dùng điều hướng symbol thay vì tìm mã theo ý nghĩa?
Dùng kiểu Serena cho định nghĩa, nơi gọi và refactor chính xác. Tìm theo ý nghĩa như claude-context hợp khi biết hành vi nhưng chưa biết tên symbol; cần thiết lập cơ sở dữ liệu và embedding thêm.
Có thể tiếp tục tin bản đồ mã sau khi sửa không?
Kiểm tra chỉ mục đã làm mới. Bản đồ phản ánh mã từng được quét và cách cập nhật khác theo công cụ. Dùng bản đồ tìm vị trí rồi xác minh tệp hiện tại trước khi đổi.