GraphRAG 라이브러리 v0.4.0 릴리스 - 속도 개선, 점진적 인덱싱, DRIFT 검색 등 다양한 개선
기다리고 기다리던 GraphRAG v0.4.0 가 릴리스되었습니다. (이전에는 1, 2주마다 패치되다가 이번에는 무려 1달 반 정도의 시간이 걸렸습니다) 마이너 버전이 3에서 4로 바뀐 만큼 다양한 기능 개선을 포함하고 있습니다. (제가 문서 수정한 커밋도 무려 4개나 포함되어 있습니다 🥰) 주요 변경 사항은 다음과 같습니다.
주요 기능 추가
- 점진적 인덱싱(Incremental Indexing) 기능 추가
- DRIFT 그래프 추론 쿼리 모듈 추가
- DRIFT 검색 CLI 및 예제 노트북 추가
개선 사항
- 점진적 업데이트를 위한 설정 추가
- 임베딩을 서브플로우에 추가
- 임베딩 워크플로우 변경
- 시간 주기를 사용한 naive 커뮤니티 병합 기능 추가
- 관계 병합 기능 추가
- 런타임 전용 스토리지 옵션 추가
- 텍스트 유닛 업데이트 기능 추가
최적화 및 리팩토링
- map_query_to_entities() 함수 성능 최적화
- pandas 최적화를 적용하여 최종 엔티티 생성
- 여러 워크플로우 단계 병합 (예: 기본 엔티티 그래프 생성, 최종 커뮤니티 보고서 생성 등)
- 중복된 관계 및 노드 제거
- API, 리포터, 콜백 코드를 별도 컴포넌트로 재구성
문서화 및 개발자 도구
- mkdocs를 사용한 문서화
- CLI 문서 자동 생성 추가
- 개발자 가이드 업데이트
기타 변경 사항
- 벡터 스토어 사용 리팩토링 및 관리 ID 지원 업데이트
- 글로벌 검색에서 중복 오류 처리 코드 제거
- CLI 레이어 재구성
개인적으로 가장 기다리고 있었던 부분은 map_query_to_entities() 함수 성능 최적화였습니다. graphrag 0.3.6 버전에서 로컬서치 콘텍스트 검색 시간이 2초 정도 걸리던 것이 해당 부분이 패치된 개발 버전인 graphrag 0.3.7.dev47에서 0.5초~1초로 개선되어 무려 50~75% 정도 개선이 있었기 때문입니다. (상황에 따라서 달라지긴 하지만 확실히 속도가 많이 빨라졌습니다.)
점진적 인덱싱(Incremental Indexing)이 추가되어서 단순히 문서가 추가되는 경우에는 전체를 다시 인덱싱 하지 않고 추가 문서만 인덱싱을 해서 합칠 수 있게 되었습니다.
그리고 DRIFT(Dynamic Reasoning and Inference with Flexible Traversal) 검색이 추가되었는데요. 글로벌 및 로컬 검색을 결합하여 더 자세하고 질 높은 응답을 생성합니다. DRIFT는 사용자 쿼리를 처리할 때 지역 커뮤니티 정보를 포함하여 검색의 출발점을 확대하는 데 큰 역할을 합니다. 이 방식은 사용자 질문의 깊이를 유지하고, 다양한 세부 정보를 잘 포착할 수 있도록 돕습니다. 검색의 효율성과 정확성을 높여줍니다. 저는 주로 로컬 검색을 주로 사용했었는데요. 일반 RAG에 비해 훨씬 좋은 성능을 보여주긴 했지만 그래도 아쉬움이 좀 있었는데요. DRIFT 검색을 사용했을 때 더 좋은 결과가 나올지 기대가 됩니다.
DRIFT 검색에 대해서는 다음 링크에서 좀 더 자세한 내용을 확인할 수 있습니다.
- https://www.microsoft.com/en-us/research/blog/introducing-drift-search-combining-global-and-local-search-methods-to-improve-quality-and-efficiency/
- https://microsoft.github.io/graphrag/query/drift_search/