GraphRAG를 설명할 때 “지식 그래프와 RAG의 결합”이라고만 말하면 별로 도움이 안 됩니다. 실무자가 궁금한 건 이겁니다.
기존 RAG로 안 되는 문제가 뭔데, GraphRAG를 쓰면 뭐가 좋아지나?
짧게 말하면 GraphRAG는 문서 조각 하나를 잘 찾는 기술이 아닙니다. 여러 정보가 서로 어떻게 연결되는지 따라가며 답을 찾는 방식입니다.
일반적인 RAG는 질문과 비슷한 문서 조각을 찾는 데 강합니다.
예를 들어 사용자가 묻습니다.
환불 정책 알려줘.
벡터 검색은 “환불 정책”과 비슷한 문단을 찾아옵니다. 이건 잘합니다. FAQ, 가이드, 정책 문서처럼 질문과 답이 같은 문서 안에 있으면 꽤 잘 맞습니다.
문제는 답이 한 문단에 없을 때입니다.
예를 들어 이런 질문입니다.
VIP 고객이 지난달 구매한 상품을 배송 완료 후 10일 뒤 반품하면 전액 환불돼?
이 질문에 답하려면 여러 정보를 같이 봐야 합니다.
벡터 검색은 이 중 가장 비슷한 문단 몇 개를 가져옵니다. 그런데 관계를 따라가지는 못합니다. “이 고객이 어떤 주문을 했고, 그 주문의 상품이 어떤 정책에 걸리고, VIP 규칙이 일반 규칙을 덮어쓰는지”를 연결해야 합니다.
이런 질문에서 GraphRAG가 쓸모 있습니다.
GraphRAG는 정보를 노드와 엣지로 봅니다.
고객 A --등급--> VIP
고객 A --주문함--> 주문 123
주문 123 --포함--> 상품 X
상품 X --카테고리--> 전자제품
주문 123 --배송상태--> 배송완료
전자제품 --반품규칙--> 개봉 시 반품 불가
VIP --혜택--> 반품 수수료 면제
질문이 들어오면 단순히 비슷한 문단만 찾는 게 아니라, 관련 노드에서 시작해 주변 관계를 따라갑니다. 그래서 답변에 필요한 근거를 더 잘 모을 수 있습니다.
아래에 해당하면 GraphRAG를 고려할 만합니다.
예시는 많습니다.
GraphRAG가 항상 좋은 건 아닙니다. 오히려 처음부터 쓰면 망하기 쉽습니다.
다음 상황이면 일반 RAG가 낫습니다.
GraphRAG는 구축보다 유지보수가 더 어렵습니다. 관계가 틀리면 답변도 자신 있게 틀립니다. “그래프니까 더 정확하겠지”가 아니라 “그래프를 누가 계속 맞게 관리하지?”를 먼저 물어야 합니다.
처음부터 Neo4j, RDF, 복잡한 온톨로지로 시작하지 않아도 됩니다. 작은 테이블로도 충분히 실험할 수 있습니다.
문서에서 중요한 명사를 고릅니다.
고객, 주문, 상품, 정책, 상담, 담당자
관계는 동사처럼 적으면 쉽습니다.
고객 -주문함-> 주문
주문 -포함함-> 상품
상품 -적용받음-> 정책
상담 -관련됨-> 주문
담당자 -처리함-> 상담
전체 회사 그래프를 만들지 마세요. 가장 중요한 질문 하나만 고릅니다.
이 고객에게 어떤 환불 정책을 적용해야 하나?
이 질문에 필요한 노드와 관계만 먼저 만듭니다.
GraphRAG는 벡터 검색을 버리는 방식이 아닙니다. 보통은 같이 씁니다.
이 구조가 실무적으로 가장 안전합니다. 그래프는 “어디를 봐야 하는지”를 알려주고, 문서는 “정확한 문장 근거”를 줍니다.
질문: VIP 고객 A의 주문 123은 전액 환불 가능한가?
그래프 근거:
- 고객 A -> 등급 -> VIP
- 고객 A -> 주문함 -> 주문 123
- 주문 123 -> 포함 -> 상품 X
- 상품 X -> 카테고리 -> 전자제품
- 전자제품 -> 규칙 -> 개봉 시 반품 불가
- VIP -> 혜택 -> 반품 수수료 면제
문서 근거:
- 반품 정책 3조: 전자제품은 개봉 후 단순 변심 반품 불가
- VIP 정책 2조: VIP는 반품 수수료 면제, 단 반품 가능 조건은 일반 정책을 따른다
답변 지침:
- 전액 환불 가능 여부를 먼저 말한다
- VIP 혜택과 상품 반품 조건을 구분한다
- 근거 조항을 짧게 제시한다
이렇게 넣으면 LLM이 “VIP니까 전액 환불” 같은 성급한 답을 덜 합니다.
GraphRAG 프로젝트의 성공 기준은 멋진 그래프 시각화가 아닙니다.
아래가 좋아져야 합니다.
GraphRAG를 도입하고 싶다면 먼저 질문 10개를 모으세요. 그중 벡터 RAG가 자주 틀리는 질문만 고르세요. 그리고 그 질문에 답하기 위해 사람이 실제로 머릿속에서 연결하는 정보를 선으로 그려보세요.
그 선이 많고 중요하다면 GraphRAG가 필요합니다. 선이 별로 없다면 일반 RAG부터 잘 만드는 게 낫습니다.