Summary

GraphRAG의 전체 파이프라인을 실전 예제로 설명. 데이터 수집부터 온톨로지 설계, 엔티티/관계 추출, 지식그래프 구축, 그리고 GraphRAG 검색까지 전체 워크플로우를 단계별로 해설. ToolsRetriever 기반 자동화된 파이프라인 구현 사례 포함.

Key Claims

  • GraphRAG는 7단계 완전 파이프라인 — 데이터 → 온톨로지 → 추출 → 구축 → 검색
  • 온톨로지 설계가 핵심 — 올바른 스키마 없이는 고품질 KG 불가능
  • LLM 기반 자동 추출 — 엔티티·관계를 프롬프트로 추출 (수동 태깅 배제)
  • ToolsRetriever를 통한 자동화 — 파이프라인 단계를 프로그래매틱 제어 가능

Key Concepts Introduced

  1. 데이터 수집 단계 (Data Collection)

    • 도메인 문서·뉴스·소셜 미디어 등 원본 데이터 준비
    • 데이터 정제 및 포맷 표준화 (마크다운, JSON 등)
  2. 온톨로지 설계 (Ontology Design)

    • 클래스(엔티티 타입): Person, Company, Product, Location 등
    • 프로퍼티(속성): name, age, founded_date 등
    • 관계(Relationships): FOUNDED, WORKS_AT, PURCHASED 등
    • 컨피턴시 질문(Competency Questions): “누가 어느 회사를 설립했는가?”
  3. 엔티티 추출 (Entity Extraction)

    • LLM 프롬프트: “다음 텍스트에서 Person, Company를 찾아줘”
    • 구조화 출력: [{entity: "Alice", type: "Person", attributes: {...}}]
  4. 관계 추출 (Relationship Extraction)

    • LLM 프롬프트: “두 엔티티 간 관계를 찾아줘”
    • 구조화 출력: [{source: "Alice", target: "Company X", relation: "WORKS_AT"}]
  5. 지식그래프 구축 (KG Construction)

    • Neo4j Cypher로 노드·관계 생성
    • 중복 제거 (멱등성 보장)
    • 속성 통합 및 인덱싱
  6. GraphRAG 검색 (Query & Retrieval)

    • Cypher 쿼리로 관련 서브그래프 추출
    • 컨텍스트를 LLM에 전달해 답변 생성
  7. 반복 및 개선 (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이 이 도구들을 자동으로 선택·실행

이점:

  • 수동 개입 최소화
  • 일관된 품질 보장
  • 프롬프트 체인 단순화
  • 재사용 가능한 파이프라인

실전 팁

  1. 온톨로지 설계에 시간 투자 — 잘못된 설계는 이후 단계에서 돌이킬 수 없음
  2. 프롬프트 엔지니어링 — 엔티티·관계 추출의 정확도는 프롬프트에 따라 좌우
  3. 부분 검증 — 매 단계마다 샘플 100개로 품질 확인
  4. 반복 개선 — 초기 KG는 불완전할 수 있음. 피드백 → 재구축
  5. 성능 모니터링 — 정밀도·재현율·F1 스코어 추적

통합 개념


관련 소스: why-use-graphrag (개념), rdf-lpg (표현 방식), graphrag-performance (성능)

인정: YouTube 공원나연 채널 (2025-11-24)