๐น ๋ฌธ์
์ ์กฐ๊ณต์ ์์์ ๊ณ ์ฅ ๋ถ์์ด๋ ํ์ง ์ด์ ์์ธ์ ๋จ์ ๋ฌธ์ ๊ฒ์ ๊ธฐ๋ฐ RAG๋ก๋ ์ ํํ ํ์
ํ๊ธฐ ์ด๋ ต๋ค.
๊ณต์ ·์ค๋น·๋ถํ·๊ฒฐํจ ๊ฐ ๊ด๊ณ๋ฅผ ์ดํดํ๊ณ ์ถ๋ก ํ ์ ์๋ Graph RAG (Knowledge Graph ๊ธฐ๋ฐ RAG) ์์คํ
์ ์ค๊ณํ์์ค.
๋ค์ ํญ๋ชฉ์ ํฌํจํ์ฌ ์ค๋ช ํ์์ค.
- Graph RAG์ ๊ฐ๋ ๊ณผ ๊ธฐ์กด RAG์์ ์ฐจ์ด
- Graph ๊ธฐ๋ฐ ์ง์ ๊ตฌ์กฐ(์ํฐํฐ·๊ด๊ณ·์์ฑ) ์ค๊ณ
- Graph + Vector Hybrid Retrieval ๊ตฌ์กฐ
- Graph ๊ธฐ๋ฐ ์ถ๋ก ๋ฐ LLM ํตํฉ ๋ฐฉ์
- ํ์ง ๊ฒ์ฆ ๋ฐ Explainability ํ๋ณด ๋ฐฉ๋ฒ
๐ก ๋ชจ๋ฒ๋ต์ (์์ธ)
(1) ๊ฐ๋ ์ฐจ์ด
| ๊ฒ์ ๋จ์ | ๋ฌธ๋จ(Chunk) | ์ํฐํฐ(Entity)·๊ด๊ณ(Relation) |
| ๊ตฌ์กฐ | Vector DB | Graph DB (Neo4j/Arango) |
| ์ง์ ๋ฐฉ์ | ์ ์ฌ๋ ๊ฒ์ | ๊ฒฝ๋ก ํ์(Query Path) |
| ์ฅ์ | ๋น ๋ฆ | ๊ด๊ณ ๊ธฐ๋ฐ ๋งฅ๋ฝ ์ดํด/์ถ๋ก ๊ฐ๋ฅ |
(2) ๋ฐ์ดํฐ ๊ตฌ์กฐ
- ์ํฐํฐ(Entity): ์ค๋น, ๊ณต์ ๋จ๊ณ, ๋ถํ, ๊ฒฐํจ, ์ผ์
- ๊ด๊ณ(Relation):
- (๊ณต์ ๋จ๊ณ)-[์ฌ์ฉ]->(์ค๋น)
- (์ค๋น)-[์์ธ]->(๊ฒฐํจ)
- (๊ฒฐํจ)-[๊ด๋ จ]->(ํ์ง์งํ)
- ์์ฑ(Attribute): ์จ๋, ์๋ ฅ, ์๊ฐ, ์์ฐ๋ ๋ฑ
(3) Graph + Vector Hybrid Retrieval
โโ Graph Query (Cypher): ๊ด๋ จ ๋ ธ๋/์ฃ์ง ํ์
โโ Vector Search (pgvector): ์๋ฏธ ์ ์ฌ ํ ์คํธ ๊ฒ์
โโ Merge & Re-rank (Cross-Encoder)
- Graph Context → ๊ทผ๊ฑฐ ๋ฌธ๋จ ์ถ์ถ → LLM Prompt ์ฝ์
(4) ์ถ๋ก ๋ฐ ํตํฉ
- LLM ์ ๋ ฅ:
-
Context = Graph Path + ๊ด๋ จ ๋ฌธ์ ๋ธ๋ก
- ReasoningAgent๊ฐ Graph Path ๋ด ๋ ธ๋ ๊ด๊ณ๋ฅผ ๋จ๊ณ๋ณ ์ค๋ช
- ์: “๋์ ๊ฒฐํจ๋ฅ ์ฆ๊ฐ → ํน์ ์ค๋น๊ตฐ(A01, A02) ๊ด๋ จ Edge 3ํ ๋ฑ์ฅ → ์ฃผ์ ์์ธ ํ๋ณด ๋์ถ”
(5) Explainability
| ๋ชจ๋ธ | Graph ๊ฒฝ๋ก ์๊ฐํ(Neo4j Bloom) |
| LLM | Reasoning Chain Logging (CoT ์ถ๋ ฅ) |
| ๋ณด๊ณ ์ | “๊ทผ๊ฑฐ ๊ฒฝ๋ก ์์ฝ: (๊ณต์ #12→์ค๋นA→๊ฒฐํจLeak)” ์ฝ์ |
| ํ๊ฐ | Path Accuracy ≥ 0.85, Groundedness ≥ 0.9 |
(6) ์ด์ ์์
- DB: Neo4j + pgvector Hybrid Query
- ์ค์ผ์คํธ๋ ์ด์ : Airflow/LangGraph
- ์๊ฐํ: Grafana + Bloom View
- ์ฅ์ : ๋จ์ ๊ฒ์ํ RAG ๋๋น ์ค๋ช ๊ฐ๋ฅ์ฑ + ์ถ๋ก ๋ ฅ + ๋๋ฉ์ธ ๋งฅ๋ฝ์ฑ ๊ฐํ