개발이야기/인공지능

GraphRAG 라이브러리 v0.4.0 릴리스 - 속도 개선, 점진적 인덱싱, DRIFT 검색 등 다양한 개선

준호씨 2024. 11. 8. 23:18
반응형

기다리고 기다리던 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 검색에 대해서는 다음 링크에서 좀 더 자세한 내용을 확인할 수 있습니다.

 

DRIFT Search - GraphRAG

DRIFT Search 🔎 Combining Local and Global Search GraphRAG is a technique that uses large language models (LLMs) to create knowledge graphs and summaries from unstructured text documents and leverages them to improve retrieval-augmented generation (RAG)

microsoft.github.io

 

DRIFT Search - GraphRAG

import os from pathlib import Path import pandas as pd import tiktoken from graphrag.query.indexer_adapters import ( read_indexer_entities, read_indexer_relationships, read_indexer_reports, read_indexer_text_units, ) from graphrag.query.input.loaders.dfs i

microsoft.github.io

 

반응형