Code-Graph-RAG: Truy Vấn Codebase Như Một Đồ Thị
Code-Graph-RAG đáng để cài đặt nếu bạn làm việc trong một monorepo đa ngôn ngữ và đã chán các công cụ AI chỉ nhìn được một file tại một thời điểm — đồ thị dựa trên Memgraph giữ nguyên các liên kết gọi hàm và tham chiếu, nên câu trả lời phản ánh đúng cấu trúc thay vì đoán từ đoạn văn bản gần đó. Bỏ qua nó nếu bạn chỉ cần một trợ lý tự động hoàn thành trong một file; phần cài đặt Docker/cmake/ripgrep là chi phí thật cho nhu cầu đó.
Tìm Hiểu Code-Graph-RAG
Code-Graph-RAG là một CLI và thư viện Python biến một codebase thành đồ thị tri thức có thể truy vấn: bộ phân tích AST bằng Tree-sitter đọc từng hàm, class và module trong một repo đa ngôn ngữ rồi lưu vào Memgraph, cùng một lớp tìm kiếm ngữ nghĩa (semantic search) tuỳ chọn qua Qdrant. Từ đó bạn đặt câu hỏi bằng ngôn ngữ tự nhiên, và một lớp RAG tương tác sẽ dịch câu hỏi đó thành truy vấn Cypher trên chính đồ thị đó.
Năng Lực Cốt Lõi
- ✓Phân tích bằng Tree-sitter trên Python, TypeScript, TSX, JavaScript, Rust, Go, Java, C, C++, C#, PHP, Lua và Dart, lưu chung vào một đồ thị tri thức Memgraph.
- ✓Truy vấn bằng ngôn ngữ tự nhiên: lớp RAG biến một câu hỏi tiếng Anh thường thành truy vấn Cypher trên đồ thị và trả lời có căn cứ.
- ✓Chỉnh sửa code dựa trên AST kèm bản xem trước diff trước khi ghi bất cứ thứ gì xuống đĩa.
- ✓Phát hiện dead code bằng cách duyệt các cạnh gọi hàm và tham chiếu từ các entry point.
- ✓Tìm và thay thế theo cấu trúc qua ast-grep, được đưa ra như công cụ cho agent để viết lại theo mẫu AST trên toàn bộ codebase.
- ✓Theo dõi luồng dữ liệu (các cạnh FLOWS_TO) bám theo giá trị qua các phép gán, lệnh gọi hàm và I/O sink, phủ C#, Java, C và Go.
- ✓Một MCP server để Claude Code và các MCP client khác truy vấn, chỉnh sửa đồ thị trực tiếp.
Ứng Dụng Thực Tế
- •Làm quen nhanh với một monorepo lớn, xa lạ, gộp nhiều ngôn ngữ trong cùng một codebase.
- •Trả lời câu hỏi về cấu trúc bằng ngôn ngữ tự nhiên thay vì grep — ví dụ hàm nào gọi một hàm cho trước, kể cả xuyên ngôn ngữ.
- •Tái cấu trúc code với sự hỗ trợ AI và dọn dead code, có bản xem trước diff thay vì tìm-thay thế mù.
- •Kết nối Claude Code hoặc MCP client khác thẳng vào đồ thị codebase để chỉnh sửa theo agent.
- •Theo dõi một giá trị đi từ đầu vào tới một I/O sink để rà soát bảo mật theo hướng data-flow.
Các Bước Cài Đặt
Code-Graph-RAG (CLI tên cgr) được publish lên PyPI. Cài với các extra treesitter-full và semantic — uv tool install "code-graph-rag[treesitter-full,semantic]" (khuyến nghị) hoặc pipx install "code-graph-rag[treesitter-full,semantic]". Bạn cũng cần cài riêng Docker (Memgraph chạy trong container), cmake và ripgrep; README có hướng dẫn đầy đủ cho cài từ source và thiết lập môi trường.
Bắt Đầu Với Một Repository
Khởi động stack Memgraph và Qdrant đóng gói sẵn bằng cgr daemon up — không cần file compose. Sau đó phân tích một repository vào đồ thị bằng cgr start --repo-path /path/to/repo --update-graph, rồi truy vấn nó bằng cgr start --repo-path /path/to/repo. Lặp lại bước phân tích cho mỗi repository khác; đồ thị dùng chung cho tất cả, đồng bộ một repo không ảnh hưởng các repo còn lại. Thêm --clean sẽ xoá toàn bộ project trong đồ thị dùng chung, không chỉ project bạn đang trỏ tới, và sẽ hỏi xác nhận trước nếu có project khác bị xoá theo.
Điểm Mạnh
- ✓Phân tích 12 ngôn ngữ (Python, TypeScript, TSX, JavaScript, Rust, Go, Java, C, C++, C#, PHP, Lua, Dart) vào chung một schema đồ thị — độ phủ mà phần lớn công cụ chỉ hỗ trợ một ngôn ngữ không làm được.
- ✓Câu trả lời truy vấn phản ánh đúng cấu trúc gọi hàm/tham chiếu từ đồ thị, không chỉ đoạn văn bản nghe có vẻ liên quan nhất.
- ✓Chỉnh sửa dựa trên AST có bản xem trước diff trước khi đụng vào đĩa, thay vì một bản patch mù.
- ✓Có sẵn MCP server, nên Claude Code và các MCP client khác kết nối được ngay mà không cần viết code kết nối riêng.
- ✓Giấy phép MIT, tự chạy miễn phí; các gói trả phí là lựa chọn thêm, không phải điều kiện để dùng phần lõi mã nguồn mở.
Những Điều Cần Cân Nhắc Và Độ Phức Tạp Khi Cài Đặt
- △Việc cài đặt kéo theo Docker, cmake và ripgrep bên cạnh gói Python — nhiều thành phần hơn một công cụ chỉ cần pip install là chạy.
- △Scala vẫn đang trong quá trình phát triển, còn Ruby mới chỉ có hỗ trợ cấu trúc qua tầng ast-grep chứ chưa được xử lý đầy đủ như 12 ngôn ngữ kia, theo đúng bảng ngôn ngữ trong README.
- △Đồ thị tri thức dùng chung cho mọi repo bạn đã index, nên --clean sẽ reset tất cả trừ khi bạn để ý lời nhắc xác nhận.
- △Phần lõi mã nguồn mở chỉ tự host; các lựa chọn triển khai cloud-hosted và on-premise được bán riêng như dịch vụ enterprise.
Các Hướng Tiếp Cận Thay Thế
Câu Hỏi Thường Gặp
Code-Graph-RAG hỗ trợ đầy đủ Python, TypeScript, TSX, JavaScript, Rust, Go, Java, C, C++, C#, PHP, Lua và Dart. Scala vẫn đang phát triển, còn Ruby hiện chỉ có hỗ trợ cấu trúc qua một tầng ast-grep riêng, chưa được xử lý đầy đủ như các ngôn ngữ khác.
Code-Graph-RAG lưu đồ thị tri thức trong Memgraph, chạy cục bộ qua Docker như một phần của stack daemon đóng gói sẵn, cùng với Qdrant cho tìm kiếm ngữ nghĩa/vector.
Code-Graph-RAG được xây dựng riêng cho monorepo: mỗi repository bạn phân tích bằng cgr start --update-graph sẽ gia nhập một đồ thị dùng chung, nên quan hệ giữa các project đa ngôn ngữ vẫn truy vấn được cùng nhau.
Phần lõi của Code-Graph-RAG là mã nguồn mở, tự host miễn phí. Ngoài ra, nhóm phát triển bán riêng dịch vụ triển khai cloud-hosted, on-premise/air-gapped, cùng tích hợp và đào tạo tuỳ chỉnh như dịch vụ enterprise, theo README.
Code-Graph-RAG phát hành theo giấy phép MIT, theo file LICENSE trong repository.
Agent của Code-Graph-RAG chỉnh sửa code bằng patch phẫu thuật dựa trên AST thay vì thay thế văn bản tự do, và hiển thị bản xem trước diff trước khi ghi bất kỳ thay đổi nào xuống đĩa.
Vấn đề nó giải quyết
Phần lớn trợ lý code AI đọc một repository như một đống đoạn văn bản được xếp hạng theo độ tương đồng embedding — cách này ổn với một file đơn lẻ nhưng vỡ trận trong một monorepo đa ngôn ngữ, nơi một service Python gọi một microservice Go dùng chung schema với một frontend TypeScript — các liên kết gọi hàm và import thực tế bị mất. Code-Graph-RAG giữ nguyên cấu trúc đó bằng cách phân tích mọi thứ vào một đồ thị duy nhất, nên câu hỏi kiểu 'hàm này được gọi từ đâu' trả về câu trả lời thật thay vì đoạn văn bản nghe có vẻ liên quan nhất.
Ai nên dùng — và ai nên bỏ qua
Chọn Code-Graph-RAG nếu bạn đang duy trì một monorepo đa ngôn ngữ thật sự và muốn một agent AI hiểu được cấu trúc xuyên file, không chỉ dựa vào embedding — nhất là khi bạn đã dùng Claude Code hay MCP client khác. Bỏ qua nếu bạn chỉ làm việc trong một repo nhỏ, nơi một công cụ tìm kiếm code hay trợ lý một file thông thường đã đủ; dựng Memgraph qua Docker không đáng công ở quy mô đó.
Repo liên quan
Vẫn đang phân vân về code-graph-rag?
Một cú bấm sẽ gửi câu hỏi kèm trang này cho AI — xem AI nói gì về code-graph-rag.
