Microsoft GraphRAG vs. Neo4j GraphRAG - k82022603/k82022603.github.io GitHub Wiki

Microsoft GraphRAG vs. Neo4j GraphRAG #

๊ฐ™์€ ์ด๋ฆ„, ์™„์ „ํžˆ ๋‹ค๋ฅธ ์ ‘๊ทผ๋ฒ•

์•„ํ‚คํ…์ฒ˜ํŒ€ ๊ธฐ์ˆ  ์„ธ๋ฏธ๋‚˜ โ€” ๋ณ„์ฒจ ์ž๋ฃŒ
์ƒ์œ„ ๋ฌธ์„œ: Microsoft GraphRAG โ€” ์ง€์‹ ๊ทธ๋ž˜ํ”„ ๊ธฐ๋ฐ˜ ์ฐจ์„ธ๋Œ€ RAG ์‹œ์Šคํ…œ


๋ชฉ์ฐจ

  1. ๋‘ ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•˜๋Š” ์ด์œ  โ€” ๋จผ์ € ๊ฐœ๋…๋ถ€ํ„ฐ
  2. ์ œ๊ณต ์ฃผ์ฒด์™€ ์„ฑ๊ฒฉ
  3. ํ•ต์‹ฌ ์ฒ ํ•™์˜ ์ฐจ์ด โ€” ๋ฌด์—‡์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ง€์‹์„ ํ‘œํ˜„ํ•˜๋Š”๊ฐ€
  4. ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ๋น„๊ต
  5. Microsoft GraphRAG๊ฐ€ ์ง„์ •์œผ๋กœ ๋›ฐ์–ด๋‚œ ๊ฒƒ๋“ค
  6. ๊ฒ€์ƒ‰ ๋ฐฉ์‹ ๋น„๊ต โ€” ์งˆ์˜๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฐ€
  7. ์ €์žฅ์†Œ ๊ตฌ์กฐ ๋น„๊ต
  8. Neo4j GraphRAG์˜ ๊ฒ€์ƒ‰๊ธฐ ์ข…๋ฅ˜
  9. ํ†ตํ•ฉ ๊ฐ€๋Šฅ์„ฑ โ€” ๋‘˜์ด ํ•จ๊ป˜ ์“ธ ์ˆ˜ ์žˆ๋Š”๊ฐ€
  10. ์„ฑ๋Šฅ๊ณผ ๋น„์šฉ ๋น„๊ต
  11. ์–ธ์ œ ์–ด๋А ๊ฒƒ์„ ์„ ํƒํ•˜๋Š”๊ฐ€
  12. ๊ฒฐ๋ก 

1. ๋‘ ๊ฐ€์ง€๊ฐ€ ์กด์žฌํ•˜๋Š” ์ด์œ  โ€” ๋จผ์ € ๊ฐœ๋…๋ถ€ํ„ฐ

"GraphRAG"๋ผ๋Š” ๋‹จ์–ด๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ฉด ๋‘ ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ์ด ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค. Microsoft GraphRAG์™€ Neo4j GraphRAG์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„์ด ๋น„์Šทํ•ด์„œ ํ˜ผ๋™ํ•˜๊ธฐ ์‰ฝ์ง€๋งŒ, ํƒ„์ƒ ๋ฐฐ๊ฒฝ๊ณผ ์ž‘๋™ ๋ฐฉ์‹์ด ๊ทผ๋ณธ์ ์œผ๋กœ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

์‚ฌ๋žŒ๋“ค์ด "GraphRAG"๋ผ๊ณ  ๋งํ•  ๋•Œ ์˜๋ฏธํ•˜๋Š” ๊ฒƒ์ด ๋‘ ๊ฐ€์ง€์ž…๋‹ˆ๋‹ค.

  • Microsoft๊ฐ€ ์ •์˜ํ•œ GraphRAG: LLM์œผ๋กœ ๋ฌธ์„œ ์ „์ฒด๋ฅผ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ตฌ์กฐ์™€ ๊ณ„์ธต์  ์š”์•ฝ์„ ๋งŒ๋“œ๋Š” Knowledge-based ์ ‘๊ทผ๋ฒ• (MS๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ "graph index"๋ผ๊ณ ๋„ ๋ถ€๋ฆ„)
  • ๊ทธ๋ž˜ํ”„ DB๋ฅผ ํ™œ์šฉํ•œ GraphRAG: ์ง€์‹ ๊ทธ๋ž˜ํ”„์— ์—”ํ„ฐํ‹ฐ์™€ ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•˜๊ณ  Cypher ํƒ์ƒ‰์œผ๋กœ ๊ฒ€์ƒ‰ํ•˜๋Š” Knowledge-based ์ ‘๊ทผ๋ฒ•

Neo4j GraphRAG๋Š” ์ฃผ๋กœ ๋‘ ๋ฒˆ์งธ ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์ฆ‰, Neo4j๋ฅผ ๊ทธ๋ž˜ํ”„ ์ €์žฅ์†Œ๋กœ ์‚ผ์•„ ๊ด€๊ณ„ ๊ธฐ๋ฐ˜ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

flowchart TB
    subgraph MS["Microsoft GraphRAG (Knowledge-based โ€” ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐฉ์‹)"]
        MS_KEY["ํ•ต์‹ฌ: ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ณ„์ธต ๊ตฌ์กฐ\n\n๋ฌธ์„œ โ†’ LLM ์ „์ฒด ์ฒ˜๋ฆฌ\nโ†’ Leiden ์ปค๋ฎค๋‹ˆํ‹ฐ ํƒ์ง€\nโ†’ ๊ณ„์ธต์  ์š”์•ฝ ์ƒ์„ฑ\nโ†’ ํŒŒ์ผ(Parquet) ์ €์žฅ\nโ†’ Local/Global ์งˆ์˜"]
    end

    subgraph NEO["Neo4j GraphRAG (Knowledge-based)"]
        NEO_KEY["ํ•ต์‹ฌ: ๊ด€๊ณ„ ๊ธฐ๋ฐ˜ ํƒ์ƒ‰\n\n๋ฌธ์„œ โ†’ ์—”ํ„ฐํ‹ฐ/๊ด€๊ณ„ ์ถ”์ถœ\nโ†’ Neo4j ๊ทธ๋ž˜ํ”„ DB ์ €์žฅ\nโ†’ Cypher + ๋ฒกํ„ฐ ๊ฒ€์ƒ‰\nโ†’ ์ง์ ‘ ๊ด€๊ณ„ ํƒ์ƒ‰ ๊ฐ€๋Šฅ"]
    end

    SHARED["๊ณตํ†ต์ :\n๋‘˜ ๋‹ค ๊ทธ๋ž˜ํ”„ ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ\nRAG ํ’ˆ์งˆ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ชฉํ‘œ"]

    MS -.->|"๊ฐ™์€ ๋ชฉํ‘œ"| SHARED
    NEO -.->|"๋‹ค๋ฅธ ๋ฐฉ๋ฒ•"| SHARED

2. ์ œ๊ณต ์ฃผ์ฒด์™€ ์„ฑ๊ฒฉ

๋‘ ์‹œ์Šคํ…œ์€ ๋งŒ๋“  ์ฃผ์ฒด๋ถ€ํ„ฐ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

ํ•ญ๋ชฉ Microsoft GraphRAG Neo4j GraphRAG
๊ฐœ๋ฐœ ์ฃผ์ฒด Microsoft Research Neo4j (๊ทธ๋ž˜ํ”„ DB ํšŒ์‚ฌ)
ํŒจํ‚ค์ง€๋ช… graphrag neo4j-graphrag
์„ค์น˜ pip install graphrag pip install neo4j-graphrag
๋ผ์ด์„ ์Šค MIT (์˜คํ”ˆ์†Œ์Šค) Apache 2.0 (์˜คํ”ˆ์†Œ์Šค)
๊ณต์‹ ์ง€์› ์—ฐ๊ตฌ ํ”„๋กœ์ ํŠธ (๋น„๊ณต์‹ ์ง€์›) 1st-party ๊ณต์‹ ์ง€์› (Neo4j ์ง์ ‘ ์œ ์ง€)
Github github.com/microsoft/graphrag github.com/neo4j/neo4j-graphrag-python
์ €์žฅ์†Œ Parquet ํŒŒ์ผ (๊ธฐ๋ณธ) Neo4j Graph DB (ํ•„์ˆ˜)
์ฒ˜์Œ ๊ณต๊ฐœ 2024๋…„ 7์›” 2024๋…„ (neo4j-genai โ†’ neo4j-graphrag ๊ฐœ๋ช…)

Neo4j GraphRAG๋Š” Neo4j๊ฐ€ ์ง์ ‘ ์ œ๊ณตํ•˜๋Š” 1st-party ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ์„œ, ๊ฐ•๋ ฅํ•˜๊ณ  ๊ธฐ๋Šฅ์ด ํ’๋ถ€ํ•˜๋ฉฐ ๊ณ ์„ฑ๋Šฅ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•˜๊ณ , Neo4j์—์„œ ์ง์ ‘ ์žฅ๊ธฐ ์ง€์› ๋ฐ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด Microsoft GraphRAG๋Š” LLM ์ถœ๋ ฅ์„ ํ–ฅ์ƒํ•˜๊ธฐ ์œ„ํ•ด ์ง€์‹ ๊ทธ๋ž˜ํ”„ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•๋ก ์„ ์ œ์‹œํ•˜๋Š” ๋ฐ๋ชจ ๋ชฉ์ ์˜ ์ฝ”๋“œ์ด๋ฉฐ, Microsoft์˜ ๊ณต์‹ ์ง€์› ์ œํ’ˆ์ด ์•„๋‹˜์„ ๋ช…์‹œํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.


3. ํ•ต์‹ฌ ์ฒ ํ•™์˜ ์ฐจ์ด โ€” ๋ฌด์—‡์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ง€์‹์„ ํ‘œํ˜„ํ•˜๋Š”๊ฐ€

์ด๊ฒƒ์ด ๋‘ ์‹œ์Šคํ…œ์˜ ๊ฐ€์žฅ ๊ทผ๋ณธ์ ์ธ ์ฐจ์ด์ž…๋‹ˆ๋‹ค.

flowchart LR
    subgraph MS_PHIL["Microsoft GraphRAG ์ฒ ํ•™ '๋ฌธ์„œ ์ „์ฒด๋ฅผ ์š”์•ฝํ•ด ๋‘์ž'"]
        direction TB
        MP1["LLM์ด ๋ชจ๋“  ์ฒญํฌ๋ฅผ ์ฝ๊ณ \n์—”ํ„ฐํ‹ฐยท๊ด€๊ณ„๋ฅผ ์ž์œ ๋กญ๊ฒŒ ์ถ”์ถœ"]
        MP2["Leiden ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ\n์ž๋™ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ตฌ์„ฑ"]
        MP3["์ปค๋ฎค๋‹ˆํ‹ฐ๋งˆ๋‹ค\nLLM์ด ์š”์•ฝ ๋ณด๊ณ ์„œ ์ƒ์„ฑ"]
        MP4["์งˆ์˜ ์‹œ ์ปค๋ฎค๋‹ˆํ‹ฐ ์š”์•ฝ์„\n์ปจํ…์ŠคํŠธ๋กœ ํ™œ์šฉ"]
        MP1 --> MP2 --> MP3 --> MP4
        MS_NOTE["โ†’ ์˜จํ†จ๋กœ์ง€/์Šคํ‚ค๋งˆ ๋ถˆํ•„์š”\nโ†’ ์ž๋™ํ™” ๋†’์Œ\nโ†’ ์ „์ฒด ์กฐ๋ง์— ๊ฐ•ํ•จ"]
    end

    subgraph NEO_PHIL["Neo4j GraphRAG ์ฒ ํ•™ '๊ตฌ์กฐํ™”๋œ ๊ด€๊ณ„๋ฅผ ์ €์žฅํ•˜์ž'"]
        direction TB
        NP1["์Šคํ‚ค๋งˆ(์˜จํ†จ๋กœ์ง€) ์‚ฌ์ „ ์ •์˜\nPerson, Technology, Topic ๋“ฑ"]
        NP2["LLM์ด ์Šคํ‚ค๋งˆ์— ๋”ฐ๋ผ\n์—”ํ„ฐํ‹ฐยท๊ด€๊ณ„๋ฅผ ๊ตฌ์กฐํ™” ์ถ”์ถœ"]
        NP3["Neo4j์— ๋…ธ๋“œ์™€ ์—ฃ์ง€๋กœ ์ €์žฅ\n(Cypher ํƒ์ƒ‰ ๊ฐ€๋Šฅ)"]
        NP4["์งˆ์˜ ์‹œ ๋ฒกํ„ฐ ๊ฒ€์ƒ‰ +\nCypher ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๊ฒฐํ•ฉ"]
        NP1 --> NP2 --> NP3 --> NP4
        NEO_NOTE["โ†’ ๋„๋ฉ”์ธ ์˜จํ†จ๋กœ์ง€ ํ•„์š”\nโ†’ ์ •๋ฐ€ํ•œ ๊ด€๊ณ„ ํƒ์ƒ‰ ๊ฐ€๋Šฅ\nโ†’ ํŠน์ • ์—”ํ„ฐํ‹ฐ ์งˆ์˜์— ๊ฐ•ํ•จ"]
    end

Microsoft์˜ ์‹œ์Šคํ…œ์€ ์ „์ฒด ์ฝ”ํผ์Šค์— ๋Œ€ํ•ด LLM์„ ์‹คํ–‰ํ•˜์—ฌ ์—”ํ„ฐํ‹ฐ์™€ ๊ด€๊ณ„๋ฅผ ์ถ”์ถœํ•˜๊ณ , ์ง€์‹ ๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌ์ถ•ํ•˜๋ฉฐ, Leiden ์ปค๋ฎค๋‹ˆํ‹ฐ ํƒ์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•˜์—ฌ ๊ด€๋ จ ์—”ํ„ฐํ‹ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•˜๊ณ , ์—ฌ๋Ÿฌ ๊ณ„์ธต ์ˆ˜์ค€์—์„œ ์š”์•ฝ์„ ๋ฏธ๋ฆฌ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด Neo4j ๊ตฌํ˜„์€ Cypher ๊ทธ๋ž˜ํ”„ ์ฟผ๋ฆฌ์™€ ํ…์ŠคํŠธ ์ฒญํฌ ๊ฒ€์ƒ‰์„ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์—์ด์ „ํŠธ๊ฐ€ ์‚ฌ์šฉ์ž ์งˆ๋ฌธ์—์„œ ํ•ต์‹ฌ ์—”ํ„ฐํ‹ฐ๋ฅผ ์‹๋ณ„ํ•˜๊ณ , ๊ทธ๋ž˜ํ”„์—์„œ Nํ™‰ ๋‚ด์˜ ์—ฐ๊ฒฐ๋œ ์—”ํ„ฐํ‹ฐ๋ฅผ ์กฐํšŒํ•˜๋ฉฐ, ํ•ด๋‹น ์—”ํ„ฐํ‹ฐ์™€ ์—ฐ๊ด€๋œ ํ…์ŠคํŠธ ์ฒญํฌ๋ฅผ ๊ฐ€์ ธ์™€ ๊ฒฐํ•ฉ๋œ ์ปจํ…์ŠคํŠธ๋ฅผ LLM์— ์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.


4. ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ ๋น„๊ต

๋ฌธ์„œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด ์–ด๋–ป๊ฒŒ ๋‹ค๋ฅธ์ง€ ๋‹จ๊ณ„๋ณ„๋กœ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.

flowchart TB
    DOC["์›๋ณธ ๋ฌธ์„œ"]

    subgraph MS_PIPE["Microsoft GraphRAG ์ธ๋ฑ์‹ฑ (graphrag index)"]
        direction TB
        MS1["โ‘  ํ…์ŠคํŠธ ์ฒญํฌ ๋ถ„ํ• \n(๊ธฐ๋ณธ 1,200 ํ† ํฐ)"]
        MS2["โ‘ก LLM ์ž์œ  ์—”ํ„ฐํ‹ฐ/๊ด€๊ณ„ ์ถ”์ถœ\n(์Šคํ‚ค๋งˆ ์—†์Œ, ๋ชจ๋“  ์ฒญํฌ ์ฒ˜๋ฆฌ)"]
        MS3["โ‘ข Leiden ์ปค๋ฎค๋‹ˆํ‹ฐ ์ž๋™ ํƒ์ง€\n(๊ณ„์ธต ๊ตฌ์กฐ ์ƒ์„ฑ)"]
        MS4["โ‘ฃ LLM ์ปค๋ฎค๋‹ˆํ‹ฐ ์š”์•ฝ ์ƒ์„ฑ\n(๋ ˆ๋ฒจ๋ณ„ ๋ณด๊ณ ์„œ)"]
        MS5["โ‘ค ์ž„๋ฒ ๋”ฉ ์ƒ์„ฑ + ์ €์žฅ\nParquet ํŒŒ์ผ ์ถœ๋ ฅ"]
        MS1 --> MS2 --> MS3 --> MS4 --> MS5
        MS_OUT["๐Ÿ“ Parquet ํŒŒ์ผ๋“ค\n(entities, relationships,\ncommunity_reports ๋“ฑ)"]
        MS5 --> MS_OUT
    end

    subgraph NEO_PIPE["Neo4j GraphRAG ์ธ๋ฑ์‹ฑ (SimpleKGPipeline)"]
        direction TB
        NE1["โ‘  ์Šคํ‚ค๋งˆ ์ •์˜\n(Person, Technology, USES ๋“ฑ)"]
        NE2["โ‘ก ํ…์ŠคํŠธ ์ฒญํฌ ๋ถ„ํ• \n(chunk_size ์„ค์ •)"]
        NE3["โ‘ข LLM ์Šคํ‚ค๋งˆ ๊ธฐ๋ฐ˜ ์ถ”์ถœ\n(์ •์˜๋œ ์—”ํ„ฐํ‹ฐ/๊ด€๊ณ„๋งŒ ์ถ”์ถœ)"]
        NE4["โ‘ฃ ์—”ํ„ฐํ‹ฐ ์ค‘๋ณต ์ œ๊ฑฐ\n(FuzzyMatch / Semantic)"]
        NE5["โ‘ค ์ž„๋ฒ ๋”ฉ ์ƒ์„ฑ + Neo4j ์ €์žฅ\n(๋…ธ๋“œ/์—ฃ์ง€/๋ฒกํ„ฐ ์ธ๋ฑ์Šค)"]
        NE1 --> NE2 --> NE3 --> NE4 --> NE5
        NEO_OUT["๐Ÿ—„๏ธ Neo4j Graph DB\n(Document, Chunk, Entity ๋…ธ๋“œ\n+ MENTIONS, RELATED_TO ๊ด€๊ณ„)"]
        NE5 --> NEO_OUT
    end

    DOC --> MS_PIPE
    DOC --> NEO_PIPE

4.1 ์ธ๋ฑ์‹ฑ์˜ ๊ฐ€์žฅ ํฐ ์ฐจ์ด โ€” ์ปค๋ฎค๋‹ˆํ‹ฐ ์š”์•ฝ์˜ ์ž๋™ํ™”

Microsoft GraphRAG์˜ ์ธ๋ฑ์‹ฑ์—์„œ ๊ฐ€์žฅ ๋…์ฐฝ์ ์ด๊ณ  ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ๋ถ€๋ถ„์€ ์ปค๋ฎค๋‹ˆํ‹ฐ ํƒ์ง€์™€ ์š”์•ฝ ์ƒ์„ฑ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. LLM์ด ์ˆ˜๋ฐฑ~์ˆ˜์ฒœ ๊ฐœ์˜ ์ปค๋ฎค๋‹ˆํ‹ฐ๋งˆ๋‹ค ํฌ๊ด„์ ์ธ ์š”์•ฝ ๋ณด๊ณ ์„œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ์š”์•ฝ์ด ๋‚˜์ค‘์— Global Search๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

ํ•œ ๊ฐ€์ง€ ์ค‘์š”ํ•œ ์‚ฌ์‹ค์„ ์งš๊ณ  ๋„˜์–ด๊ฐ€์•ผ ํ•ฉ๋‹ˆ๋‹ค. Neo4j ์ž์ฒด์— ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ฐœ๋…์ด ์—†๋Š” ๊ฒƒ์€ ์•„๋‹™๋‹ˆ๋‹ค. Neo4j๋Š” Graph Data Science(GDS) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด Leiden, Louvain ๋“ฑ ์ปค๋ฎค๋‹ˆํ‹ฐ ํƒ์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณต์‹ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. Cypher ํ•œ ์ค„๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

-- Neo4j GDS๋กœ Leiden ์ปค๋ฎค๋‹ˆํ‹ฐ ํƒ์ง€ ์‹คํ–‰
CALL gds.leiden.write('my-graph', { writeProperty: 'community' })
YIELD communityCount, modularity

์ฐจ์ด๋Š” ์ž๋™ํ™” ์ˆ˜์ค€์— ์žˆ์Šต๋‹ˆ๋‹ค. neo4j-graphrag Python ํŒจํ‚ค์ง€๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ํƒ์ง€์™€ LLM ์š”์•ฝ ์ƒ์„ฑ์„ ์ธ๋ฑ์‹ฑ ํŒŒ์ดํ”„๋ผ์ธ์— ํฌํ•จํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ GDS๋ฅผ ์‹คํ–‰ํ•˜๊ณ  LLM ์š”์•ฝ์„ ๋ณ„๋„๋กœ ๊ตฌ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด Microsoft GraphRAG๋Š” graphrag index ๋ช…๋ น ํ•˜๋‚˜๋กœ ์ด ๋ชจ๋“  ๊ณผ์ •์„ ์ž๋™์œผ๋กœ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

๊ตฌ๋ถ„ Microsoft GraphRAG Neo4j GraphRAG (ํŒจํ‚ค์ง€)
์ปค๋ฎค๋‹ˆํ‹ฐ ํƒ์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ โœ… ์ž๋™ (Leiden ๋‚ด์žฅ) โš™๏ธ GDS๋กœ ๊ฐ€๋Šฅํ•˜๋‚˜ ์ˆ˜๋™
LLM ์ปค๋ฎค๋‹ˆํ‹ฐ ์š”์•ฝ ์ƒ์„ฑ โœ… ์ž๋™ โŒ ํŒจํ‚ค์ง€ ๋ฏธ์ง€์› (์ง์ ‘ ๊ตฌํ˜„)
Global Search ๋‚ด์žฅ โœ… ์žˆ์Œ โŒ ์—†์Œ
ํŒŒ์ดํ”„๋ผ์ธ ์ž๋™ํ™” โœ… ์™„์ „ ์ž๋™ โš™๏ธ ๋‹จ๊ณ„๋ณ„ ์ˆ˜๋™ ๊ตฌ์„ฑ

5. Microsoft GraphRAG๊ฐ€ ์ง„์ •์œผ๋กœ ๋›ฐ์–ด๋‚œ ๊ฒƒ๋“ค

Neo4j๋„ ์ปค๋ฎค๋‹ˆํ‹ฐ ํƒ์ง€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๋ฉด, Microsoft GraphRAG๊ฐ€ ์ง„์ •์œผ๋กœ ์šฐ์›”ํ•œ ๋ถ€๋ถ„์€ ๋ฌด์—‡์ธ์ง€ ๋ช…ํ™•ํžˆ ์งš์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•ต์‹ฌ์€ ๊ธฐ๋Šฅ์˜ ์œ ๋ฌด๊ฐ€ ์•„๋‹ˆ๋ผ ์ž๋™ํ™”์˜ ์™„์„ฑ๋„์™€ ์„ค๊ณ„ ์‚ฌ์ƒ์˜ ์ฐจ๋ณ„์„ฑ์— ์žˆ์Šต๋‹ˆ๋‹ค.

5.1 ์Šคํ‚ค๋งˆ ์—†์ด๋„ ์ž‘๋™ํ•˜๋Š” ์™„์ „ ์ž๋™ ํŒŒ์ดํ”„๋ผ์ธ

Neo4j GraphRAG๋กœ ์ง€์‹๊ทธ๋ž˜ํ”„๋ฅผ ๊ตฌ์ถ•ํ•˜๋ ค๋ฉด ๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€๊ฐ€ ์˜จํ†จ๋กœ์ง€๋ฅผ ๋จผ์ € ์„ค๊ณ„ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. "์–ด๋–ค ์—”ํ„ฐํ‹ฐ๋ฅผ ์ถ”์ถœํ•  ๊ฒƒ์ธ๊ฐ€(Person, Technology, Projectโ€ฆ)", "์–ด๋–ค ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•  ๊ฒƒ์ธ๊ฐ€(USES, BELONGS_TOโ€ฆ)"๋ฅผ ์‚ฌ๋žŒ์ด ๊ฒฐ์ •ํ•ด์•ผ ํŒŒ์ดํ”„๋ผ์ธ์ด ๊ทธ ๊ธฐ์ค€์— ๋”ฐ๋ผ ์›€์ง์ž…๋‹ˆ๋‹ค.

Microsoft GraphRAG๋Š” ์ด ๊ณผ์ •์ด ํ•„์š” ์—†์Šต๋‹ˆ๋‹ค. ๋„๋ฉ”์ธ ์ง€์‹ ์—†์ด๋„ graphrag index ๋ช…๋ น ํ•˜๋‚˜๋กœ ๋ฌธ์„œ ์ „์ฒด๋ฅผ ๋ถ„์„ํ•˜๊ณ , LLM์ด ์Šค์Šค๋กœ ์˜๋ฏธ ์žˆ๋Š” ์—”ํ„ฐํ‹ฐ์™€ ๊ด€๊ณ„๋ฅผ ์ถ”์ถœํ•˜๋ฉฐ, Leiden ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์ž๋™์œผ๋กœ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ํƒ์ง€ํ•˜๊ณ , LLM์ด ๊ฐ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์š”์•ฝ ๋ณด๊ณ ์„œ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜์Œ ๋ณด๋Š” ๋„๋ฉ”์ธ์—์„œ๋„ ๋น ๋ฅด๊ฒŒ ์ง€์‹ ๊ตฌ์กฐ๋ฅผ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

flowchart LR
    subgraph MS_AUTO["MS GraphRAG โ€” ์™„์ „ ์ž๋™"]
        DOC1["๋ฌธ์„œ\n(๋„๋ฉ”์ธ ๋ฌด๊ด€)"]
        ONE_CMD["graphrag index\n๋ช…๋ น ํ•˜๋‚˜"]
        RESULT1["์ปค๋ฎค๋‹ˆํ‹ฐ ๊ตฌ์กฐ\n+ LLM ์š”์•ฝ\n์ž๋™ ์™„์„ฑ"]
        DOC1 --> ONE_CMD --> RESULT1
        NOTE1["์‚ฌ์ „ ์ง€์‹ ๋ถˆํ•„์š”"]
    end

    subgraph NEO_MANUAL["Neo4j GraphRAG โ€” ์ˆ˜๋™ ์„ค๊ณ„ ํ•„์š”"]
        DOC2["๋ฌธ์„œ"]
        DESIGN["โ‘  ์˜จํ†จ๋กœ์ง€ ์„ค๊ณ„\n(๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€ ํ•„์š”)"]
        EXTRACT["โ‘ก ์Šคํ‚ค๋งˆ ๊ธฐ๋ฐ˜ ์ถ”์ถœ"]
        OPT_GDS["โ‘ข GDS ์ปค๋ฎค๋‹ˆํ‹ฐ ํƒ์ง€\n(์„ ํƒ, ์ˆ˜๋™)"]
        OPT_SUM["โ‘ฃ LLM ์š”์•ฝ ๊ตฌ์„ฑ\n(์„ ํƒ, ์ˆ˜๋™)"]
        DOC2 --> DESIGN --> EXTRACT --> OPT_GDS --> OPT_SUM
        NOTE2["๋‹จ๊ณ„๋งˆ๋‹ค ์‚ฌ๋žŒ์ด ๊ฐœ์ž…"]
    end

5.2 Global Search โ€” ๋Œ€์ฒด ๋ถˆ๊ฐ€๋Šฅํ•œ ์ „์ฒด ์กฐ๋ง ์งˆ์˜

Global Search๋Š” Microsoft GraphRAG๋งŒ์ด ์ œ๊ณตํ•˜๋Š” ๊ณ ์œ  ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. "์ด ๋ฌธ์„œ ์ง‘ํ•ฉ ์ „์ฒด์˜ ์ฃผ์š” ์ฃผ์ œ๋Š”?", "์ด ๋ฐ์ดํ„ฐ์—์„œ ๋ฐ˜๋ณต๋˜๋Š” ํŒจํ„ด์€?" ๊ฐ™์€ ์งˆ์˜๋Š” ์ผ๋ถ€ ์ฒญํฌ๋ฅผ ๊ฒ€์ƒ‰ํ•˜๊ฑฐ๋‚˜ ํŠน์ • ๋…ธ๋“œ๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ๋Š” ๊ตฌ์กฐ์ ์œผ๋กœ ๋‹ตํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ๋งํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Global Search๋Š” ๋ฏธ๋ฆฌ ์ƒ์„ฑ๋œ ์ปค๋ฎค๋‹ˆํ‹ฐ ์š”์•ฝ๋“ค์„ Map-Reduce ํŒจํ„ด์œผ๋กœ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•˜์—ฌ, ์ „์ฒด ์ฝ”ํผ์Šค๋ฅผ ํ•œ ๋ฒˆ๋„ ๋น ๋œจ๋ฆฌ์ง€ ์•Š๊ณ  ์งˆ์˜์— ๋Œ€์‘ํ•ฉ๋‹ˆ๋‹ค. Microsoft์˜ ์—ฐ๊ตฌ ๊ฒฐ๊ณผ Global Search๋Š” ํฌ๊ด„์„ฑ๊ณผ ๋‹ค์–‘์„ฑ ์ง€ํ‘œ์—์„œ ๊ธฐ์กด RAG ๋Œ€๋น„ ์•ฝ 70~80%์˜ ์Šน๋ฅ ์„ ๊ธฐ๋กํ–ˆ์Šต๋‹ˆ๋‹ค.

5.3 DRIFT Search โ€” ๊ธ€๋กœ๋ฒŒ ๋งฅ๋ฝ + ๋กœ์ปฌ ์ •๋ฐ€๋„์˜ ์œตํ•ฉ

2024๋…„ 10์›” ์ถ”๊ฐ€๋œ DRIFT Search๋Š” Global Search์˜ ํฌ๊ด„์„ฑ๊ณผ Local Search์˜ ์ •๋ฐ€๋„๋ฅผ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆํ‹ฐ ์š”์•ฝ์œผ๋กœ ์ „์ฒด ๋งฅ๋ฝ์„ ํŒŒ์•…ํ•œ ๋’ค, LLM์ด ํŒ”๋กœ์—… ์งˆ๋ฌธ์„ ์ž๋™ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ˜๋ณต์  ๋กœ์ปฌ ํƒ์ƒ‰์œผ๋กœ ๋‹ต์„ ์ •๊ตํ™”ํ•ฉ๋‹ˆ๋‹ค. ์ด ํŒจํ„ด์€ neo4j-graphrag ํŒจํ‚ค์ง€์— ์ƒ๋‹นํ•œ ์ปค์Šคํ…€ ์ž‘์—… ์—†์ด๋Š” ๊ตฌํ˜„ํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

5.4 LazyGraphRAG โ€” ์ธ๋ฑ์‹ฑ ๋น„์šฉ์˜ ํ˜์‹ 

2024๋…„ 11์›” ๋ฐœํ‘œ๋œ LazyGraphRAG๋Š” ์ธ๋ฑ์‹ฑ ๋‹จ๊ณ„์—์„œ LLM ํ˜ธ์ถœ์„ ๊ฑฐ์˜ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. NLP๋กœ ๋ช…์‚ฌ๊ตฌ๋ฅผ ์ถ”์ถœํ•˜๊ณ  ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ํƒ์ง€ํ•˜๋˜, ์ปค๋ฎค๋‹ˆํ‹ฐ ์š”์•ฝ์€ ์งˆ์˜ ์‹œ์ ์— ์˜จ๋””๋งจ๋“œ๋กœ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฐฉ์‹์œผ๋กœ ์ธ๋ฑ์‹ฑ ๋น„์šฉ์„ Standard GraphRAG ๋Œ€๋น„ 0.1% ์ˆ˜์ค€์œผ๋กœ ๋‚ฎ์ถ”๋ฉด์„œ๋„ ๋™๋“ฑํ•œ ์งˆ์˜ ํ’ˆ์งˆ์„ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค.

5.5 ์‚ฌ์ „ ์งˆ๋ฌธ ์—†์ด ํ…Œ๋งˆ๋ฅผ ๋ฐœ๊ฒฌํ•œ๋‹ค

Neo4j GraphRAG๋Š” "์–ด๋–ค ๊ฒƒ์„ ์ฐพ๊ฒ ๋‹ค"๋Š” ์˜๋„๊ฐ€ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์Šคํ‚ค๋งˆ๋ฅผ ์„ค๊ณ„ํ•œ๋‹ค๋Š” ๊ฒƒ ์ž์ฒด๊ฐ€ ์ด๋ฏธ ์–ด๋–ค ์—”ํ„ฐํ‹ฐ์™€ ๊ด€๊ณ„๊ฐ€ ์ค‘์š”ํ•œ์ง€ ์•Œ๊ณ  ์žˆ๋‹ค๋Š” ์ „์ œ๋ฅผ ๋‹ด์Šต๋‹ˆ๋‹ค.

Microsoft GraphRAG๋Š” ๋ฐ˜๋Œ€์ž…๋‹ˆ๋‹ค. ์–ด๋–ค ์งˆ๋ฌธ์„ ํ•ด์•ผ ํ• ์ง€ ๋ชจ๋ฅด๋Š” ์ƒํƒœ์—์„œ๋„ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ตฌ์กฐ๊ฐ€ ๋ฐ์ดํ„ฐ์˜ ์ „์ฒด ์˜๋ฏธ ์ง€ํ˜•์„ ๋ฏธ๋ฆฌ ๋“œ๋Ÿฌ๋ƒ…๋‹ˆ๋‹ค. ์—ฐ๊ตฌ ๋…ผ๋ฌธ ๋ชจ์Œ, ํšŒ์˜๋ก ์•„์นด์ด๋ธŒ, ํŒ๋ก€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ฒ˜๋Ÿผ ๋ฏธ๋ฆฌ ์•Œ ์ˆ˜ ์—†๋Š” ํŒจํ„ด์„ ๋ฐœ๊ฒฌํ•ด์•ผ ํ•˜๋Š” ํƒ์ƒ‰์  ๋ถ„์„์—์„œ ๋…๋ณด์ ์ž…๋‹ˆ๋‹ค.

flowchart TB
    subgraph MSAdvantages["Microsoft GraphRAG์˜ ์ง„์ •ํ•œ ๊ฐ•์  5๊ฐ€์ง€"]
        direction LR
        A1["โ‘  ์™„์ „ ์ž๋™ ํŒŒ์ดํ”„๋ผ์ธ\n์Šคํ‚ค๋งˆ ์„ค๊ณ„ ์—†์ด ์‹œ์ž‘"]
        A2["โ‘ก Global Search\n์ „์ฒด ์กฐ๋ง ์งˆ์˜ ๋…์ "]
        A3["โ‘ข DRIFT Search\n๊ธ€๋กœ๋ฒŒ+๋กœ์ปฌ ์œตํ•ฉ"]
        A4["โ‘ฃ LazyGraphRAG\n์ธ๋ฑ์‹ฑ ๋น„์šฉ 0.1%"]
        A5["โ‘ค ํƒ์ƒ‰์  ํ…Œ๋งˆ ๋ฐœ๊ฒฌ\n์‚ฌ์ „ ์งˆ๋ฌธ ๋ถˆํ•„์š”"]
    end

6. ๊ฒ€์ƒ‰ ๋ฐฉ์‹ ๋น„๊ต โ€” ์งˆ์˜๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”๊ฐ€

flowchart TB
    Q["์‚ฌ์šฉ์ž ์งˆ์˜"]

    subgraph MS_QUERY["Microsoft GraphRAG ์งˆ์˜"]
        direction TB

        subgraph LOCAL_Q["Local Search"]
            LS1["์งˆ์˜ ์ž„๋ฒ ๋”ฉ\nโ†’ ๊ด€๋ จ ์—”ํ„ฐํ‹ฐ ํƒ์ƒ‰"]
            LS2["์—”ํ„ฐํ‹ฐ ์ฃผ๋ณ€ ์ •๋ณด ์ˆ˜์ง‘\n(์ฒญํฌ, ์ปค๋ฎค๋‹ˆํ‹ฐ ์š”์•ฝ, ๊ด€๊ณ„, ๊ณต๋ณ€๋Ÿ‰)"]
            LS3["LLM ๋‹ต๋ณ€ ์ƒ์„ฑ"]
            LS1 --> LS2 --> LS3
        end

        subgraph GLOBAL_Q["Global Search"]
            GS1["์ปค๋ฎค๋‹ˆํ‹ฐ ์š”์•ฝ ์ „์ฒด ์ฒ˜๋ฆฌ\n(Map ๋‹จ๊ณ„ โ€” ๋ณ‘๋ ฌ)"]
            GS2["์ค‘์š”๋„ ๊ธฐ๋ฐ˜ ํ†ตํ•ฉ\n(Reduce ๋‹จ๊ณ„)"]
            GS3["LLM ์ „์ฒด ์กฐ๋ง ๋‹ต๋ณ€"]
            GS1 --> GS2 --> GS3
        end

        subgraph DRIFT_Q["DRIFT Search (์‹ ๊ทœ)"]
            DR1["HyDE๋กœ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ฒ€์ƒ‰\n+ ํŒ”๋กœ์—… ์งˆ๋ฌธ ์ƒ์„ฑ"]
            DR2["๋ฐ˜๋ณต Local ํƒ์ƒ‰"]
            DR3["๊ณ„์ธต์  ๋‹ต๋ณ€ ํ†ตํ•ฉ"]
            DR1 --> DR2 --> DR3
        end
    end

    subgraph NEO_QUERY["Neo4j GraphRAG ์งˆ์˜"]
        direction TB

        subgraph VR_Q["VectorRetriever"]
            VR1["์งˆ์˜ ์ž„๋ฒ ๋”ฉ\nโ†’ ๋ฒกํ„ฐ ์œ ์‚ฌ๋„ ๊ฒ€์ƒ‰\nโ†’ ์ฒญํฌ ๋ฐ˜ํ™˜"]
        end

        subgraph VCR_Q["VectorCypherRetriever"]
            VC1["๋ฒกํ„ฐ ๊ฒ€์ƒ‰์œผ๋กœ ์ง„์ž…์  ํƒ์ƒ‰\nโ†’ Cypher๋กœ ๊ทธ๋ž˜ํ”„ ํ™•์žฅ\nโ†’ ๊ด€๋ จ ๋…ธ๋“œ/๊ด€๊ณ„ ์ˆ˜์ง‘"]
        end

        subgraph HCR_Q["HybridCypherRetriever"]
            HC1["๋ฒกํ„ฐ + ์ „๋ฌธ๊ฒ€์ƒ‰(BM25)\nโ†’ Cypher ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰\nโ†’ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๊ฒฐ๊ณผ"]
        end

        subgraph T2C_Q["Text2CypherRetriever"]
            TC1["์ž์—ฐ์–ด โ†’ LLM์ด Cypher ์ƒ์„ฑ\nโ†’ Neo4j์—์„œ ์ง์ ‘ ์‹คํ–‰\nโ†’ ์ •ํ™•ํ•œ ๊ด€๊ณ„ ์กฐํšŒ"]
        end
    end

    Q --> MS_QUERY
    Q --> NEO_QUERY

6.1 Microsoft GraphRAG๋งŒ ๊ฐ€๋Šฅํ•œ ๊ฒƒ

Global Search๋Š” Microsoft GraphRAG ๊ณ ์œ ์˜ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. "์ด ๋ฌธ์„œ ์ง‘ํ•ฉ ์ „์ฒด์˜ ์ฃผ์š” ์ฃผ์ œ๋Š” ๋ฌด์—‡์ธ๊ฐ€?"์ฒ˜๋Ÿผ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์•„์šฐ๋ฅด๋Š” ์งˆ์˜๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ ์š”์•ฝ ๊ธฐ๋ฐ˜ Map-Reduce ์—†์ด๋Š” ๊ตฌ์กฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. Neo4j GraphRAG ํŒจํ‚ค์ง€์—๋Š” ์ด์— ์ƒ์‘ํ•˜๋Š” ๋‚ด์žฅ ๊ธฐ๋Šฅ์ด ์—†์Šต๋‹ˆ๋‹ค. Neo4j GDS๋กœ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ํƒ์ง€ํ•˜๊ณ  LLM ์š”์•ฝ์„ ์ง์ ‘ ๊ตฌ์„ฑํ•˜๋ฉด ์œ ์‚ฌํ•œ ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ƒ๋‹นํ•œ ์ปค์Šคํ…€ ์ž‘์—…์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

DRIFT Search ์—ญ์‹œ MS GraphRAG ๊ณ ์œ ์ž…๋‹ˆ๋‹ค. ๊ธ€๋กœ๋ฒŒ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋งฅ๋ฝ์—์„œ ์ถœ๋ฐœํ•˜์—ฌ ํŒ”๋กœ์—… ์งˆ๋ฌธ์„ ์ž๋™ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ˜๋ณต ๋กœ์ปฌ ํƒ์ƒ‰์œผ๋กœ ์ •๊ตํ™”ํ•˜๋Š” ํŒจํ„ด์ž…๋‹ˆ๋‹ค.

6.2 Neo4j GraphRAG๋งŒ ๊ฐ€๋Šฅํ•œ ๊ฒƒ

์ •๋ฐ€ํ•œ ๊ด€๊ณ„ ํƒ์ƒ‰์€ Neo4j GraphRAG์˜ ๊ณ ์œ  ์˜์—ญ์ž…๋‹ˆ๋‹ค. "A๊ฐ€ B๋ฅผ ํ†ตํ•ด C์™€ ์—ฐ๊ฒฐ๋˜๋Š” ๊ฒฝ๋กœ๋Š”?"์ฒ˜๋Ÿผ ๊ตฌ์ฒด์ ์ธ Cypher ์ฟผ๋ฆฌ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๊ฒƒ์€ Microsoft GraphRAG๋กœ๋Š” ์ง์ ‘ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

Text2Cypher๋Š” ์ž์—ฐ์–ด๋ฅผ Cypher ์ฟผ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ Neo4j๋ฅผ ์ง์ ‘ ์งˆ์˜ํ•ฉ๋‹ˆ๋‹ค. ์ •ํ˜•ํ™”๋œ ๊ด€๊ณ„ ์งˆ์˜์—์„œ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.


7. ์ €์žฅ์†Œ ๊ตฌ์กฐ ๋น„๊ต

๋‘ ์‹œ์Šคํ…œ์ด ๋‚ด๋ถ€์ ์œผ๋กœ ์–ด๋–ค ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”์ง€๊ฐ€ ํฌ๊ฒŒ ๋‹ค๋ฆ…๋‹ˆ๋‹ค.

flowchart LR
    subgraph MS_STORE["Microsoft GraphRAG ์ €์žฅ์†Œ"]
        direction TB
        P1["entities.parquet\n์—”ํ„ฐํ‹ฐ + ์ž„๋ฒ ๋”ฉ + ์ปค๋ฎค๋‹ˆํ‹ฐ ์ •๋ณด"]
        P2["relationships.parquet\n๊ด€๊ณ„ + ์„ค๋ช…"]
        P3["community_reports.parquet\nโญ ์ปค๋ฎค๋‹ˆํ‹ฐ ์š”์•ฝ ๋ณด๊ณ ์„œ"]
        P4["text_units.parquet\nํ…์ŠคํŠธ ์ฒญํฌ + ์—”ํ„ฐํ‹ฐ ์ฐธ์กฐ"]
        P5["๋ฒกํ„ฐ ์ €์žฅ์†Œ\n(LanceDB / Azure AI Search)"]
        PNOTE["ํŒŒ์ผ ๊ธฐ๋ฐ˜ ์ €์žฅ\nโ†’ ๋™์‹œ ์ ‘๊ทผ ์ œํ•œ\nโ†’ ์‹ค์‹œ๊ฐ„ ๊ฐฑ์‹  ์–ด๋ ค์›€\nโ†’ Parquet ๋ถ„์„ ๋„๊ตฌ๋กœ ํƒ์ƒ‰"]
    end

    subgraph NEO_STORE["Neo4j GraphRAG ์ €์žฅ์†Œ"]
        direction TB
        N1["Document ๋…ธ๋“œ\n(๋ฌธ์„œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ)"]
        N2["Chunk ๋…ธ๋“œ\n(ํ…์ŠคํŠธ + ์ž„๋ฒ ๋”ฉ ๋ฒกํ„ฐ)"]
        N3["Entity ๋…ธ๋“œ\n(Person, Technology ๋“ฑ)"]
        N4["๊ด€๊ณ„ ์—ฃ์ง€\n(MENTIONS, RELATED_TO ๋“ฑ)"]
        N5["๋ฒกํ„ฐ ์ธ๋ฑ์Šค\n(Neo4j ๋‚ด์žฅ ANN)"]
        N6["์ „๋ฌธ ๊ฒ€์ƒ‰ ์ธ๋ฑ์Šค\n(Full-text / BM25)"]
        NNOTE["๊ทธ๋ž˜ํ”„ DB ์ €์žฅ\nโ†’ ๋™์‹œ ์ ‘๊ทผ ์ง€์›\nโ†’ ์‹ค์‹œ๊ฐ„ ๊ฐฑ์‹  ๊ฐ€๋Šฅ\nโ†’ Cypher๋กœ ์ง์ ‘ ํƒ์ƒ‰\nโ†’ ์‹œ๊ฐํ™” ๋„๊ตฌ ์ง€์›"]
    end

7.1 ์ €์žฅ์†Œ ์„ ํƒ์ด ์šด์˜์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ

Microsoft GraphRAG์˜ Parquet ํŒŒ์ผ ๊ธฐ๋ฐ˜ ์ €์žฅ์€ ๋ฐ์ดํ„ฐ ๋ถ„์„๊ณผ ์ผ๊ด„ ์ฒ˜๋ฆฌ์— ์ ํ•ฉํ•˜์ง€๋งŒ, ์šด์˜ ์‹œ์Šคํ…œ์—์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ƒˆ ๋ฌธ์„œ๊ฐ€ ์ถ”๊ฐ€๋˜๋ฉด ์ „์ฒด ๋˜๋Š” ๋ถ€๋ถ„ ์žฌ์ธ๋ฑ์‹ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Neo4j๋Š” ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด๋ฏ€๋กœ ๋…ธ๋“œ์™€ ๊ด€๊ณ„๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ถ”๊ฐ€ยท์ˆ˜์ •ยท์‚ญ์ œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šด์˜ ์ค‘์ธ ์‹œ์Šคํ…œ์—์„œ ๋ฌธ์„œ๊ฐ€ ์ฆ๊ฐ€ํ•ด๋„ ์ฆ๋ถ„ ์—…๋ฐ์ดํŠธ๊ฐ€ ์ž์—ฐ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค.


8. Neo4j GraphRAG์˜ ๊ฒ€์ƒ‰๊ธฐ ์ข…๋ฅ˜

๊ณต์‹ Neo4j GraphRAG Python ํŒจํ‚ค์ง€๋Š” ๋‹ค์–‘ํ•œ ๊ฒ€์ƒ‰๊ธฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ๊ฒ€์ƒ‰๊ธฐ์˜ ํŠน์„ฑ์„ ์ดํ•ดํ•˜๋ฉด ์งˆ์˜ ์œ ํ˜•์— ๋งž๋Š” ์ตœ์ ์˜ ๊ฒ€์ƒ‰๊ธฐ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

flowchart TB
    subgraph Retrievers["Neo4j GraphRAG ๊ฒ€์ƒ‰๊ธฐ 6์ข…"]
        direction TB

        VR["VectorRetriever\n๋ฒกํ„ฐ ์œ ์‚ฌ๋„๋งŒ ์‚ฌ์šฉ\nโ†’ ์˜๋ฏธ ๊ธฐ๋ฐ˜ ์ฒญํฌ ๊ฒ€์ƒ‰\n๊ฐ€์žฅ ๋‹จ์ˆœํ•˜๊ณ  ๋น ๋ฆ„"]

        VCR["VectorCypherRetriever\n๋ฒกํ„ฐ ๊ฒ€์ƒ‰ ํ›„ Cypher ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰\nโ†’ '์ด ์ฒญํฌ์™€ ์—ฐ๊ฒฐ๋œ ์—”ํ„ฐํ‹ฐ๋“ค'\n๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ด๋Š” GraphRAG ํŒจํ„ด"]

        HR["HybridRetriever\n๋ฒกํ„ฐ + ์ „๋ฌธ๊ฒ€์ƒ‰(BM25)\nโ†’ ๋‘ ๋ฐฉ์‹์˜ ์žฅ์  ๊ฒฐํ•ฉ\nCypher ํƒ์ƒ‰ ์—†์Œ"]

        HCR["HybridCypherRetriever\n๋ฒกํ„ฐ + BM25 + Cypher ํƒ์ƒ‰\nโ†’ ์„ธ ๋ฐฉ์‹ ๋ชจ๋‘ ๊ฒฐํ•ฉ\n๊ฐ€์žฅ ํฌ๊ด„์ ์ธ ๊ฒ€์ƒ‰"]

        T2C["Text2CypherRetriever\n์ž์—ฐ์–ด โ†’ LLM์ด Cypher ์ƒ์„ฑ\nโ†’ ์ •ํ™•ํ•œ ๊ตฌ์กฐ์  ์งˆ์˜\nLLM ์ƒ์„ฑ Cypher ๋ถˆ์•ˆ์ • ๊ฐ€๋Šฅ"]

        TR["ToolsRetriever\nLLM์ด ๊ฒ€์ƒ‰๊ธฐ๋ฅผ ์ž๋™ ์„ ํƒ\nโ†’ ์งˆ์˜ ์œ ํ˜•์— ๋”ฐ๋ผ ๋™์  ์„ ํƒ\n๊ฐ€์žฅ ์œ ์—ฐํ•˜์ง€๋งŒ ๋ณต์žก"]
    end

VectorCypherRetriever๋Š” ๋ฒกํ„ฐ ๊ธฐ๋ฐ˜ ์œ ์‚ฌ๋„ ๊ฒ€์ƒ‰๊ณผ ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰ ๊ธฐ๋ฒ•์„ ๊ฒฐํ•ฉํ•˜์—ฌ Neo4j์˜ ๊ทธ๋ž˜ํ”„ ๊ธฐ๋Šฅ์„ ์™„์ „ํžˆ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ ์ž„๋ฒ ๋”ฉ์„ ์ฒ˜๋ฆฌํ•˜์—ฌ ์ง€์ •๋œ ๋ฒกํ„ฐ ์ธ๋ฑ์Šค์— ๋Œ€ํ•œ ์œ ์‚ฌ๋„ ๊ฒ€์ƒ‰์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๊ด€๋ จ ๋…ธ๋“œ๋ฅผ ๊ฒ€์ƒ‰ํ•œ ๋‹ค์Œ, Cypher ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ์ด ๋…ธ๋“œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ทธ๋ž˜ํ”„๋ฅผ ํƒ์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.


9. ํ†ตํ•ฉ ๊ฐ€๋Šฅ์„ฑ โ€” ๋‘˜์ด ํ•จ๊ป˜ ์“ธ ์ˆ˜ ์žˆ๋Š”๊ฐ€

๊ฐ€์žฅ ํฅ๋ฏธ๋กœ์šด ๋ถ€๋ถ„์ž…๋‹ˆ๋‹ค. ๋‘ ์‹œ์Šคํ…œ์€ ๊ฒฝ์Ÿ์ด ์•„๋‹ˆ๋ผ ํ†ตํ•ฉํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

9.1 Microsoft GraphRAG ๊ฒฐ๊ณผ๋ฌผ์„ Neo4j์— ์ €์žฅํ•˜๊ธฐ

Microsoft GraphRAG๊ฐ€ ์ƒ์„ฑํ•œ Parquet ํŒŒ์ผ์˜ ๋…ธ๋“œ์™€ ์ปค๋ฎค๋‹ˆํ‹ฐ ๋ฐ์ดํ„ฐ๋ฅผ Neo4j์— ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Neo4j์— ์ €์žฅํ•˜๋ฉด Local๊ณผ Global ๊ฒ€์ƒ‰๊ธฐ๋ฅผ LangChain์ด๋‚˜ LlamaIndex์— ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํ†ตํ•ฉ ๊ตฌ์„ฑ์—์„œ Neo4j๋Š” ๋‘ ๊ฐ€์ง€ ์—ญํ• ์„ ๋™์‹œ์— ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. MS GraphRAG์˜ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ณ„์ธต๊ณผ ์š”์•ฝ์„ ์ €์žฅํ•˜๋Š” ์ €์žฅ์†Œ ์—ญํ• ๊ณผ, Cypher ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰์„ ์œ„ํ•œ ๊ทธ๋ž˜ํ”„ DB ์—ญํ• ์ž…๋‹ˆ๋‹ค. MS GraphRAG๊ฐ€ ์ƒ์„ฑํ•œ Community ๋…ธ๋“œ, CommunityReport ๋…ธ๋“œ๊ฐ€ Neo4j์— ๊ทธ๋Œ€๋กœ ์ ์žฌ๋˜๋ฏ€๋กœ, Neo4j ์•ˆ์—์„œ ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ฐœ๋…์ด ์™„์ „ํžˆ ์‚ด์•„์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

flowchart TB
    DOC["์›๋ณธ ๋ฌธ์„œ"]

    subgraph Step1["Step 1: MS GraphRAG ์ธ๋ฑ์‹ฑ"]
        MSRAG["graphrag index\n(์ปค๋ฎค๋‹ˆํ‹ฐ ๊ตฌ์กฐ ์ƒ์„ฑ)"]
        PARQUET["Parquet ํŒŒ์ผ\n(entities, community_reports ๋“ฑ)"]
        MSRAG --> PARQUET
    end

    subgraph Step2["Step 2: Neo4j ์ ์žฌ"]
        IMPORT["Parquet โ†’ Neo4j ์ž„ํฌํŠธ\n(CSV ๋ณ€ํ™˜ + LOAD CSV)"]
        NEO4J_DB[("Neo4j Graph DB\n- Entity ๋…ธ๋“œ\n- Community ๋…ธ๋“œ โญ\n- CommunityReport ๋…ธ๋“œ โญ\n- Chunk ๋…ธ๋“œ\n- ๋ฒกํ„ฐ ์ธ๋ฑ์Šค ์ƒ์„ฑ")]
        IMPORT --> NEO4J_DB
    end

    subgraph Step3["Step 3: ํ†ตํ•ฉ ๊ฒ€์ƒ‰"]
        LOCAL_NEO["Local Search\n(๋ฒกํ„ฐ ๊ฒ€์ƒ‰ + ๊ทธ๋ž˜ํ”„ ํƒ์ƒ‰)"]
        GLOBAL_NEO["Global Search\n(์ปค๋ฎค๋‹ˆํ‹ฐ ์š”์•ฝ Map-Reduce)"]
        LANGCHAIN["LangChain / LlamaIndex ํ†ตํ•ฉ"]
        NEO4J_DB --> LOCAL_NEO
        NEO4J_DB --> GLOBAL_NEO
        LOCAL_NEO --> LANGCHAIN
        GLOBAL_NEO --> LANGCHAIN
    end

    DOC --> Step1 --> Step2 --> Step3

9.2 Neo4j GraphRAG์— ์ปค๋ฎค๋‹ˆํ‹ฐ ์š”์•ฝ์„ ์ง์ ‘ ์ถ”๊ฐ€ํ•˜๊ธฐ

๋ฐ˜๋“œ์‹œ MS GraphRAG๋ฅผ ๋จผ์ € ๊ฑฐ์น  ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค. Neo4j GraphRAG๋กœ ๊ตฌ์ถ•ํ•œ ๊ทธ๋ž˜ํ”„ ์œ„์—์„œ๋„ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Neo4j GDS(Graph Data Science) ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ Leiden, Louvain ๋“ฑ ์ปค๋ฎค๋‹ˆํ‹ฐ ํƒ์ง€ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ณต์‹ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. GDS๋กœ ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ํƒ์ง€ํ•œ ๋’ค, ๊ฐ ์ปค๋ฎค๋‹ˆํ‹ฐ์˜ ์—”ํ„ฐํ‹ฐยท๊ด€๊ณ„ ์ •๋ณด๋ฅผ ์ˆ˜์ง‘ํ•˜์—ฌ LLM์— ์ „๋‹ฌํ•˜๋ฉด ์ปค๋ฎค๋‹ˆํ‹ฐ ์š”์•ฝ ๋…ธ๋“œ๋ฅผ ์ง์ ‘ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

-- Neo4j GDS๋กœ Leiden ์ปค๋ฎค๋‹ˆํ‹ฐ ํƒ์ง€ ์‹คํ–‰
CALL gds.leiden.write('my-graph', {
  writeProperty: 'community',
  maxLevels: 10
})
YIELD communityCount, modularity, levels

์ด ๋ฐฉ์‹์€ MS GraphRAG์˜ ์™„์ „ ์ž๋™ํ™” ํŒŒ์ดํ”„๋ผ์ธ์— ๋น„ํ•ด ์ƒ๋‹นํ•œ ์ˆ˜๋™ ์ž‘์—…์ด ํ•„์š”ํ•˜์ง€๋งŒ, ์ด๋ฏธ Neo4j์— ์šด์˜ ์ค‘์ธ ๊ทธ๋ž˜ํ”„๊ฐ€ ์žˆ๋‹ค๋ฉด ์žฌ์ธ๋ฑ์‹ฑ ์—†์ด ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.


10. ์„ฑ๋Šฅ๊ณผ ๋น„์šฉ ๋น„๊ต

flowchart LR
    subgraph Cost["๋น„์šฉ ๊ตฌ์กฐ"]
        MS_COST["Microsoft GraphRAG\n\n์ธ๋ฑ์‹ฑ(Standard): ๋งค์šฐ ๋†’์Œ\nโ†’ 500ํŽ˜์ด์ง€ ์•ฝ $50~100+\n\n์ธ๋ฑ์‹ฑ(LazyGraphRAG): ๊ทน์ €\nโ†’ Standard ๋Œ€๋น„ 0.1% ๋น„์šฉ\n\n์งˆ์˜ Global: ์ค‘๊ฐ„~๋†’์Œ\n(์ปค๋ฎค๋‹ˆํ‹ฐ ์ „์ฒด Map-Reduce)"]

        NEO_COST["Neo4j GraphRAG\n\n์ธ๋ฑ์‹ฑ: ์ค‘๊ฐ„\n(์Šคํ‚ค๋งˆ ๊ธฐ๋ฐ˜ ์„ ํƒ์  ์ถ”์ถœ)\nโ†’ 500ํŽ˜์ด์ง€ ์•ฝ $0.5~5\n\n์งˆ์˜: ๋‚ฎ์Œ\n(Cypher ์ง์ ‘ ํƒ์ƒ‰)"]
    end

    subgraph Speed["์†๋„ ๋น„๊ต"]
        MS_SPD["MS GraphRAG\n\n์ธ๋ฑ์‹ฑ: ๋А๋ฆผ (์ˆ˜์‹œ๊ฐ„)\n์ „์ฒด ๋ฌธ์„œ LLM ์ฒ˜๋ฆฌ ํ•„์š”\n(LazyGraphRAG: ์ˆ˜๋ถ„)\n\n์งˆ์˜ Local: ๋น ๋ฆ„\n์งˆ์˜ Global: ๋А๋ฆผ (Map-Reduce)"]

        NEO_SPD["Neo4j GraphRAG\n\n์ธ๋ฑ์‹ฑ: ๋น ๋ฆ„ (์ˆ˜์‹ญ๋ถ„)\nํ•„์š”ํ•œ ์—”ํ„ฐํ‹ฐ๋งŒ ์ถ”์ถœ\n\n์งˆ์˜: ๋งค์šฐ ๋น ๋ฆ„\n(๊ทธ๋ž˜ํ”„ ํฌ์ธํ„ฐ ์ถ”์ )"]
    end

๋™์ผํ•œ 500ํŽ˜์ด์ง€ ์ฝ”ํผ์Šค๋ฅผ ์ธ๋ฑ์‹ฑํ•˜๋Š” ๋ฐ Neo4j ๋ฐฉ์‹์€ ์•ฝ 3๋ถ„์ด ์†Œ์š”๋˜๊ณ  ๋น„์šฉ์€ ์•ฝ $0.50์ž…๋‹ˆ๋‹ค. ํ’ˆ์งˆ ๋ฒค์น˜๋งˆํฌ์—์„œ๋Š” GraphRAG ์„ฑ๋Šฅ์˜ 70-90%๋ฅผ 1/100์˜ ๋น„์šฉ์œผ๋กœ ๋‹ฌ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ neo4j-graphrag ํŒจํ‚ค์ง€ ์ž์ฒด์— ์ปค๋ฎค๋‹ˆํ‹ฐ ์š”์•ฝ ํŒŒ์ดํ”„๋ผ์ธ์ด ์—†์–ด ์ „์ฒด ์กฐ๋ง ์งˆ์˜("๋ชจ๋“  ๋ฌธ์„œ์˜ ์ฃผ์š” ์ฃผ์ œ๋Š”?")์—์„œ๋Š” ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ๋–จ์–ด์ง‘๋‹ˆ๋‹ค.

Microsoft GraphRAG๋Š” Standard ๋ฐฉ์‹์˜ ๋น„์šฉ์ด ๋†’์ง€๋งŒ, 2024๋…„ 11์›” ๋ฐœํ‘œ๋œ LazyGraphRAG๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด Standard ๋Œ€๋น„ 0.1% ๋น„์šฉ์œผ๋กœ ๋™๋“ฑํ•œ ์งˆ์˜ ํ’ˆ์งˆ์„ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


11. ์–ธ์ œ ์–ด๋А ๊ฒƒ์„ ์„ ํƒํ•˜๋Š”๊ฐ€

11.1 ๊ฒฐ์ • ํŠธ๋ฆฌ

flowchart TD
    START["GraphRAG ์„ ํƒ ์‹œ์ž‘"]

    Q1{"์ฃผ์š” ์งˆ์˜ ์œ ํ˜•์€?"}
    Q2{"๋„๋ฉ”์ธ์ด\n๋ช…ํ™•ํ•œ๊ฐ€?"}
    Q3{"๋ฐ์ดํ„ฐ ์—…๋ฐ์ดํŠธ\n๋นˆ๋„๋Š”?"}
    Q4{"์ „์ฒด ์กฐ๋ง์ด\nํ•„์š”ํ•œ๊ฐ€?"}

    MS_ONLY["Microsoft GraphRAG\n\n์ „์ฒด ๋ฌธ์„œ ์กฐ๋ง ์งˆ์˜ ์šฐ์„ \n'์ด ๋ฐ์ดํ„ฐ์˜ ์ฃผ์š” ์ฃผ์ œ๋Š”?'"]

    NEO_ONLY["Neo4j GraphRAG\n\n๊ด€๊ณ„ ํƒ์ƒ‰ ์งˆ์˜ ์šฐ์„ \n'A์™€ B์˜ ๊ด€๊ณ„๋Š”?'"]

    HYBRID["๋‘ ์‹œ์Šคํ…œ ํ†ตํ•ฉ\n\nMS GraphRAG๋กœ ์ธ๋ฑ์‹ฑ ํ›„\nNeo4j์— ์ €์žฅ\nโ†’ ์ „์ฒด ์กฐ๋ง + ๊ด€๊ณ„ ํƒ์ƒ‰ ๋ชจ๋‘"]

    Q1 --> |"์ „์ฒด ์ฃผ์ œ/ํŒจํ„ด ํŒŒ์•…"| Q4
    Q1 --> |"ํŠน์ • ๊ด€๊ณ„/์—”ํ„ฐํ‹ฐ ํƒ์ƒ‰"| Q2

    Q4 --> |"ํ•„์š”"| MS_ONLY
    Q4 --> |"๋ถˆํ•„์š”"| NEO_ONLY

    Q2 --> |"๋ช…ํ™• (์˜จํ†จ๋กœ์ง€ ๊ฐ€๋Šฅ)"| Q3
    Q2 --> |"๋ถˆ๋ช…ํ™•"| MS_ONLY

    Q3 --> |"์ž์ฃผ ๋ณ€๊ฒฝ"| NEO_ONLY
    Q3 --> |"๊ฑฐ์˜ ์•ˆ ๋ณ€๊ฒฝ"| MS_ONLY

    MS_ONLY --> |"๊ด€๊ณ„ ํƒ์ƒ‰๋„ ํ•„์š”"| HYBRID
    NEO_ONLY --> |"์ „์ฒด ์กฐ๋ง๋„ ํ•„์š”"| HYBRID

11.2 ์ƒํ™ฉ๋ณ„ ์ถ”์ฒœ

์ƒํ™ฉ ์ถ”์ฒœ ์ด์œ 
"์ด ๋ณด๊ณ ์„œ๋“ค์˜ ํ•ต์‹ฌ ํŒจํ„ด์„ ํŒŒ์•…ํ•˜๊ณ  ์‹ถ๋‹ค" MS GraphRAG Global Search๊ฐ€ ์ „์ฒด ์กฐ๋ง์— ์ตœ์ 
"A ๊ธฐ์ˆ ์ด B ํ”„๋กœ์ ํŠธ์—์„œ ์–ด๋–ป๊ฒŒ ์“ฐ์ด๋Š”์ง€ ์ถ”์ " Neo4j GraphRAG Cypher๋กœ ์ •๋ฐ€ํ•œ ๊ด€๊ณ„ ํƒ์ƒ‰
"์žฅ์•  ๋ณด๊ณ ์„œ ์ „์ฒด์—์„œ ๋ฐ˜๋ณต ํŒจํ„ด ๋ถ„์„" MS GraphRAG ๊ธ€๋กœ๋ฒŒ ์ˆ˜์ค€ ์ž๋™ ๋ถ„์„
"์‹œ์Šคํ…œ ์ทจ์•ฝ์  ์˜ํ–ฅ๋„ ๋ถ„์„" Neo4j GraphRAG ๋ฉ€ํ‹ฐํ™‰ ๊ด€๊ณ„ ํƒ์ƒ‰
"๋„๋ฉ”์ธ์ด ์ž˜ ์ •์˜๋œ ๊ธฐ์—… ์ง€์‹ ๊ด€๋ฆฌ" Neo4j GraphRAG ์Šคํ‚ค๋งˆ ๊ธฐ๋ฐ˜ ์ •๋ฐ€ ์ถ”์ถœ
"์ฒ˜์Œ ๋ณด๋Š” ๋„๋ฉ”์ธ, ์–ด๋–ค ์ฃผ์ œ๊ฐ€ ์žˆ๋Š”์ง€ ๋ชจ๋ฆ„" MS GraphRAG ์ž๋™ ํ…Œ๋งˆ ๋ฐœ๊ฒฌ
"์ธ๋ฑ์‹ฑ ๋น„์šฉ์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ์‹ถ๋‹ค" MS LazyGraphRAG Standard ๋Œ€๋น„ 0.1% ๋น„์šฉ
"์šด์˜ ์‹œ์Šคํ…œ์— ์‹ค์‹œ๊ฐ„ ์ง€์‹ ์ถ”๊ฐ€" Neo4j GraphRAG ์ฆ๋ถ„ ์—…๋ฐ์ดํŠธ + GDS ์ปค๋ฎค๋‹ˆํ‹ฐ
"๋‘ ์œ ํ˜•์˜ ์งˆ์˜๊ฐ€ ๋ชจ๋‘ ํ•„์š”" ํ†ตํ•ฉ ๊ตฌ์„ฑ MS GraphRAG โ†’ Neo4j ์ €์žฅ

12. ๊ฒฐ๋ก 

๋‘ ์‹œ์Šคํ…œ์€ ๊ฒฝ์Ÿ ๊ด€๊ณ„๊ฐ€ ์•„๋‹ˆ๋ผ ๊ฐ์ž ์ž˜ํ•˜๋Š” ์˜์—ญ์ด ๋‹ค๋ฅธ ์ƒํ˜ธ๋ณด์™„์  ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.

Microsoft GraphRAG์˜ ๊ฐ•์ : ๋„๋ฉ”์ธ ์ง€์‹์ด๋‚˜ ์˜จํ†จ๋กœ์ง€ ์—†์ด๋„ ๋Œ€๊ทœ๋ชจ ๋น„์ •ํ˜• ๋ฌธ์„œ์—์„œ ์ฃผ์ œ์™€ ํŒจํ„ด์„ ์ž๋™์œผ๋กœ ๋ฐœ๊ฒฌํ•ฉ๋‹ˆ๋‹ค. Global Search๋กœ ์ „์ฒด ๋ฐ์ดํ„ฐ๋ฅผ ์กฐ๋งํ•˜๋Š” ์งˆ์˜์—์„œ ๋…๋ณด์ ์ž…๋‹ˆ๋‹ค. LazyGraphRAG๋กœ ์ธ๋ฑ์‹ฑ ๋น„์šฉ์„ 0.1% ์ˆ˜์ค€์œผ๋กœ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์œผ๋ฉฐ, DRIFT Search๋กœ ๊ธ€๋กœ๋ฒŒ ๋งฅ๋ฝ๊ณผ ๋กœ์ปฌ ์ •๋ฐ€๋„๋ฅผ ์œตํ•ฉํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ํ‘œ์ค€ ๋ฐฉ์‹์˜ ์ธ๋ฑ์‹ฑ ๋น„์šฉ์ด ๋†’๊ณ  ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ๊ฐ€ ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

Neo4j GraphRAG์˜ ๊ฐ•์ : ๋„๋ฉ”์ธ ์Šคํ‚ค๋งˆ๋ฅผ ์ •์˜ํ•˜๋ฉด ์ •๋ฐ€ํ•˜๊ณ  ์ถ”์  ๊ฐ€๋Šฅํ•œ ๊ด€๊ณ„ ํƒ์ƒ‰์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์šด์˜ ์‹œ์Šคํ…œ์— ํ†ตํ•ฉํ•˜๊ธฐ ์‰ฝ๊ณ , ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€๊ฐ€ ์ž์—ฐ์Šค๋Ÿฝ์Šต๋‹ˆ๋‹ค. Neo4j GDS๋กœ ์ปค๋ฎค๋‹ˆํ‹ฐ ํƒ์ง€ ์ž์ฒด๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, neo4j-graphrag ํŒจํ‚ค์ง€๊ฐ€ Global Search ์ˆ˜์ค€์˜ ์ž๋™ํ™”๋œ ์ „์ฒด ์กฐ๋ง ๊ธฐ๋Šฅ์„ ๋‚ด์žฅํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค.

์‹ค๋ฌด์—์„œ ๊ฐ€์žฅ ๊ฐ•๋ ฅํ•œ ๊ตฌ์„ฑ์€ ๋‘ ์ ‘๊ทผ๋ฒ•์„ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. Microsoft GraphRAG๋กœ ์ธ๋ฑ์‹ฑํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ Neo4j์— ์ €์žฅํ•˜๋ฉด, ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ๋ฐ˜ ๊ธ€๋กœ๋ฒŒ ์กฐ๋ง๊ณผ Cypher ๊ธฐ๋ฐ˜ ์ •๋ฐ€ ๊ด€๊ณ„ ํƒ์ƒ‰์„ ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ์—์„œ ๋ชจ๋‘ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

flowchart LR
    subgraph Summary["ํ•œ๋ˆˆ์— ๋น„๊ต"]
        direction TB

        MS_S["Microsoft GraphRAG\n\nโœ… ์ „์ฒด ์กฐ๋ง (Global Search)\nโœ… ์˜จํ†จ๋กœ์ง€ ๋ถˆํ•„์š”\nโœ… ์ž๋™ ์ปค๋ฎค๋‹ˆํ‹ฐ ํƒ์ง€ + LLM ์š”์•ฝ\nโœ… DRIFT Search (๊ธ€๋กœ๋ฒŒ+๋กœ์ปฌ ์œตํ•ฉ)\nโœ… LazyGraphRAG (๋น„์šฉ 0.1%)\nโœ… ๋ฏธ์ง€ ํ…Œ๋งˆ ์ž๋™ ๋ฐœ๊ฒฌ\nโŒ Standard ์ธ๋ฑ์‹ฑ ๋น„์šฉ ๋†’์Œ\nโŒ ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ ์–ด๋ ค์›€\nโŒ ์ •๋ฐ€ ๊ด€๊ณ„ ํƒ์ƒ‰ ์ œํ•œ"]

        NEO_S["Neo4j GraphRAG\n\nโœ… ์ •๋ฐ€ ๊ด€๊ณ„ ํƒ์ƒ‰ (Cypher)\nโœ… ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ\nโœ… ๋ฉ€ํ‹ฐํ™‰ ์ถ”๋ก \nโœ… ๋‚ฎ์€ ์ธ๋ฑ์‹ฑ ๋น„์šฉ\nโœ… ๊ณต์‹ ์ง€์› (1st-party)\nโœ… GDS๋กœ ์ปค๋ฎค๋‹ˆํ‹ฐ ํƒ์ง€ ๊ฐ€๋Šฅ\nโŒ Global Search ํŒจํ‚ค์ง€ ๋ฏธ๋‚ด์žฅ\nโŒ ์Šคํ‚ค๋งˆ ์‚ฌ์ „ ์„ค๊ณ„ ํ•„์š”\nโŒ ๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€ ํ•„์š”"]

        INT_S["ํ†ตํ•ฉ ๊ตฌ์„ฑ\n(MS + Neo4j)\n\nโœ… ์ „์ฒด ์กฐ๋ง ๊ฐ€๋Šฅ\nโœ… ์ •๋ฐ€ ๊ด€๊ณ„ ํƒ์ƒ‰ ๊ฐ€๋Šฅ\nโœ… Cypher ํ™œ์šฉ\nโš ๏ธ ๊ตฌ์„ฑ ๋ณต์žก๋„ ์ฆ๊ฐ€\nโš ๏ธ ๋‘ ์‹œ์Šคํ…œ ์šด์˜ ํ•„์š”"]
    end

์ž‘์„ฑ์ผ: 2026-05-18
์•„ํ‚คํ…์ฒ˜ํŒ€
์ƒ์œ„ ๋ฌธ์„œ: Microsoft GraphRAG โ€” ์ง€์‹ ๊ทธ๋ž˜ํ”„ ๊ธฐ๋ฐ˜ ์ฐจ์„ธ๋Œ€ RAG ์‹œ์Šคํ…œ