Summary
GraphRAG의 전체 파이프라인을 실전 예제로 설명. 데이터 수집부터 온톨로지 설계, 엔티티/관계 추출, 지식그래프 구축, 그리고 GraphRAG 검색까지 전체 워크플로우를 단계별로 해설. ToolsRetriever 기반 자동화된 파이프라인 구현 사례 포함.
Key Claims
- GraphRAG는 7단계 완전 파이프라인 — 데이터 → 온톨로지 → 추출 → 구축 → 검색
- 온톨로지 설계가 핵심 — 올바른 스키마 없이는 고품질 KG 불가능
- LLM 기반 자동 추출 — 엔티티·관계를 프롬프트로 추출 (수동 태깅 배제)
- ToolsRetriever를 통한 자동화 — 파이프라인 단계를 프로그래매틱 제어 가능
Key Concepts Introduced
-
데이터 수집 단계 (Data Collection)
- 도메인 문서·뉴스·소셜 미디어 등 원본 데이터 준비
- 데이터 정제 및 포맷 표준화 (마크다운, JSON 등)
-
온톨로지 설계 (Ontology Design)
- 클래스(엔티티 타입): Person, Company, Product, Location 등
- 프로퍼티(속성): name, age, founded_date 등
- 관계(Relationships): FOUNDED, WORKS_AT, PURCHASED 등
- 컨피턴시 질문(Competency Questions): “누가 어느 회사를 설립했는가?”
-
엔티티 추출 (Entity Extraction)
- LLM 프롬프트: “다음 텍스트에서 Person, Company를 찾아줘”
- 구조화 출력:
[{entity: "Alice", type: "Person", attributes: {...}}]
-
관계 추출 (Relationship Extraction)
- LLM 프롬프트: “두 엔티티 간 관계를 찾아줘”
- 구조화 출력:
[{source: "Alice", target: "Company X", relation: "WORKS_AT"}]
-
지식그래프 구축 (KG Construction)
- Neo4j Cypher로 노드·관계 생성
- 중복 제거 (멱등성 보장)
- 속성 통합 및 인덱싱
-
GraphRAG 검색 (Query & Retrieval)
- Cypher 쿼리로 관련 서브그래프 추출
- 컨텍스트를 LLM에 전달해 답변 생성
-
반복 및 개선 (Iteration)
- 평가 지표 (정밀도, 재현율, F1) 측정
- 온톨로지·프롬프트 조정
GraphRAG 완전 파이프라인 (7단계)
단계 1: 데이터 수집
원본 소스 (문서, 뉴스, ...)
↓
정제 & 포맷 변환
↓
마크다운 문서 준비
예시: "Alice는 Google에서 엔지니어로 일한다. Bob은 Google CEO다."
단계 2: 온톨로지 설계
Classes:
- Person
attributes: [name, age, title]
- Company
attributes: [name, founded_year, industry]
Relationships:
- WORKS_AT: Person → Company
- MANAGES: Person → Person
- FOUNDED: Person → Company
Competency Questions:
- "누가 Google을 설립했나?"
- "Alice의 매니저는 누구인가?"
- "AI 분야의 회사는 모두 누구인가?"단계 3: 엔티티 추출
입력 프롬프트:
텍스트: "Alice는 Google에서 엔지니어로 일한다. Bob은 Google CEO다."
이 텍스트에서 다음 타입의 엔티티를 찾아줘:
- Person
- Company
JSON 포맷으로 반환해줘.
LLM 출력:
[
{"entity": "Alice", "type": "Person", "attributes": {"role": "engineer"}},
{"entity": "Bob", "type": "Person", "attributes": {"role": "CEO"}},
{"entity": "Google", "type": "Company", "attributes": {}}
]단계 4: 관계 추출
입력 프롬프트:
엔티티: [Alice (Person), Bob (Person), Google (Company)]
다음 관계를 찾아줘:
- WORKS_AT: Person → Company
- MANAGES: Person → Person
JSON 포맷으로 반환해줘.
LLM 출력:
[
{"source": "Alice", "target": "Google", "relation": "WORKS_AT"},
{"source": "Bob", "target": "Google", "relation": "WORKS_AT"},
{"source": "Bob", "target": "Alice", "relation": "MANAGES"}
]단계 5: Neo4j에 저장
Cypher 쿼리 자동 생성:
MERGE (alice:Person {name: "Alice", role: "engineer"})
MERGE (bob:Person {name: "Bob", role: "CEO"})
MERGE (google:Company {name: "Google"})
MERGE (alice)-[:WORKS_AT]->(google)
MERGE (bob)-[:WORKS_AT]->(google)
MERGE (bob)-[:MANAGES]->(alice)단계 6: GraphRAG 검색
사용자 쿼리: “Alice의 매니저는 누구인가?”
Cypher 자동 생성:
MATCH (alice:Person {name: "Alice"})<-[:MANAGES]-(manager)
RETURN manager.name결과: ["Bob"]
단계 7: LLM 답변 생성
컨텍스트: [Bob (매니저), Google (회사), MANAGES 관계]
Q: "Alice의 매니저는 누구인가?"
A: "Alice의 매니저는 Bob입니다. Bob은 Google의 CEO입니다."
ToolsRetriever를 통한 자동화
개념: 각 단계를 함수로 정의 → LLM이 자동으로 호출 결정
tools = [
extract_entities(text, entity_types),
extract_relationships(entities, relation_types),
create_cypher_query(entities, relationships),
execute_cypher(query),
generate_answer(query, cypher_result)
]
# LLM이 이 도구들을 자동으로 선택·실행이점:
- 수동 개입 최소화
- 일관된 품질 보장
- 프롬프트 체인 단순화
- 재사용 가능한 파이프라인
실전 팁
- 온톨로지 설계에 시간 투자 — 잘못된 설계는 이후 단계에서 돌이킬 수 없음
- 프롬프트 엔지니어링 — 엔티티·관계 추출의 정확도는 프롬프트에 따라 좌우
- 부분 검증 — 매 단계마다 샘플 100개로 품질 확인
- 반복 개선 — 초기 KG는 불완전할 수 있음. 피드백 → 재구축
- 성능 모니터링 — 정밀도·재현율·F1 스코어 추적
통합 개념
- GraphRAG — 완전 구현 워크플로우
- Ontology — 설계 기초 및 컨피턴시 질문
- EntityExtraction — LLM 기반 추출
- RelationshipExtraction — 관계 자동 인식
- Neo4j — 그래프 저장 및 쿼리
- CypherQueryLanguage — 자동 쿼리 생성
- ToolsRetriever — 파이프라인 오케스트레이션
관련 소스: why-use-graphrag (개념), rdf-lpg (표현 방식), graphrag-performance (성능)
인정: YouTube 공원나연 채널 (2025-11-24)