vitali87/code-graph-rag는 모노레포용 RAG를 단순한 문서 검색기로 다루지 않습니다. Tree-sitter로 여러 언어의 소스 파일을 읽고 함수, 클래스, 메서드, 모듈과 그 관계를 추출한 뒤 Memgraph 지식 그래프에 저장합니다. 저장소 전체를 하나의 언어 중립적 스키마로 묶기 때문에, 자연어 질문이 특정 파일의 문자열 검색에 머물지 않고 코드 구조와 호출 관계를 따라갈 수 있습니다.
사용 흐름은 CLI와 인프라를 함께 전제로 합니다. 먼저 `cgr daemon up`으로 패키지된 Memgraph와 Qdrant 스택을 올리고, `cgr start --repo-path /path/to/repo --update-graph`로 프로젝트를 그래프에 동기화합니다. 이후 같은 프로젝트를 질의하거나, 다른 저장소를 같은 공유 그래프에 추가할 수 있습니다. 한 프로젝트를 갱신해도 다른 프로젝트는 건드리지 않지만, `--clean`은 공유 그래프의 모든 프로젝트를 삭제할 수 있습니다. 저장소 단위 RAG를 운영할 때 필요한 범위가 명령어에 드러납니다.
그래프가 만들어지면 자연어를 Cypher로 변환해 실제 구조를 조회합니다. 함수나 클래스를 이름 또는 의도로 가져오고, 호출·참조 엣지를 따라 데드 코드를 찾을 수 있습니다. 코드 편집은 AST 기반 패치와 diff preview를 거치며, ast-grep를 이용한 구조 검색과 치환도 에이전트 도구로 제공됩니다. 즉 답변을 생성하는 단계와 코드를 바꾸는 단계 사이에 구조적 검토 지점을 둡니다.
최근 추가된 `FLOWS_TO` 엣지는 값이 할당, 함수 호출, I/O sink를 거치는 경로를 추적합니다. C#, Java, C, Go가 추가되면서 데이터 흐름 추적은 10개 언어로 확장됐습니다. Ruby 지원도 별도 손글씨 파서 대신 ast-grep YAML 패턴 파일을 통해 Module, Function, Class 노드와 import 엣지를 생성합니다. 새 언어를 붙이는 방식이 기능 목록보다 더 많은 것을 말해줍니다.
다만 이 구조는 공짜가 아닙니다. Docker, cmake, ripgrep가 필요하고, Memgraph와 Qdrant를 함께 관리해야 합니다. 그래프의 추출 결과가 틀리면 자연어 질의도 잘못된 구조를 근거로 답할 수 있습니다. AST 패치와 diff preview는 변경을 통제하는 장치이지 테스트와 코드 리뷰의 대체재는 아닙니다. 그럼에도 code-graph-rag는 에이전트에게 레포를 “읽혀보는” 데서 멈추지 않고, 동기화된 지식 그래프를 질의·수정 루프의 기반으로 놓습니다. 운영 파이프라인으로 RAG를 설계하려는 팀이 참고할 만한 지점입니다.