1. LLM ์ด์ฉํ ๊ทธ๋ํ ์คํค๋ง ์ค๊ณ(GraphRAG ๊ด์ )
: ๋น์ ํ ํ ์คํธ ๋ฌธ์๋ฅผ LLM์ ๋ฃ์ด Neo4j์ ์ ์ฌ ๊ฐ๋ฅํ ๋ ธ๋/๊ด๊ณ/์์ฑ ์คํค๋ง&Cypher ์ฟผ๋ฆฌ ์๋ ์์ฑ
โ๏ธ LLM ์ฐ์ถ๋ฌผ : ํญ์ ์ด์. ๋ฐ์ดํฐ ์ค๋ณต·๊ด๊ณ ๋ฐฉํฅ·๋ค์ด๋ฐ ๊ท์น·๊ณ ์ ์๋ณ์·๊ฒ์ ๋ชฉ์ ๋ฑ์ ์ฌ๋์ด ๊ฒํ
1-1. ๋ ธ๋(Label) ์ค๊ณ ์์น
• ๋ฌธ์์์ ๋ ๋ฆฝ์ ์ผ๋ก ์๋ณ, ๋ค๋ฅธ ๊ฐ์ฒด๊ฐ ์ฐธ์กฐ ๊ฐ๋ฅ. ํ์์ ์์์ ์ด ๋ ์ ์๋ ๊ฐ์ฒด๋ก ๋ง๋ฆ
• ํ๋ณด : ์ฌ๋, ์กฐ์ง, ์ฅ์, ์ํ, ๋ฌธ์, ์ฌ๊ฑด, ๊ฐ๋ , ๊ธฐ์ , ํ๋ก์ ํธ ๋ฑ
• ๋ช ๋ช ๊ท์น : Pascal(ex. Person, Company, Product)
• ๋์์ด : ํ๋์ Label๋ก ํตํฉ(ex. ๊ธฐ์ /ํ์ฌ/์ ์ฒด → Company)
• ๊ฐ ๋ ธ๋๋ ์ต์ ํ๋์ ์๋ณ ์์ฑ(name, id, code ๋ฑ) ๊ฐ์ ธ์ผ ํจ
1-2. ๊ด๊ณ(Relationship) ์ค๊ณ ์์น
• ๋ ๋ ธ๋ ์ฌ์ด ๋ฐฉํฅ์ฑ ์๋ ํ์/์ญํ /์ฐ๊ด ๊ด๊ณ๋ก ๋ง๋ฆ(๋จ์ํ ๊ฐ์ ๋ฌธ์ฅ์ ๋ฑ์ฅํ๋ค๋ ์ด์ X)
• ๋ช ๋ช ๊ท์น : ๋๋ฌธ์ SNAKE_CASE, ๋์ฌ/๋์ฌ๊ตฌ(WORKS_FOR, LOCATED_IN ๋ฑ)
• ๊ด๊ณ ์์ฑ : ๊ด๊ณ ์์ฒด์ ์๋ฏธ ์๋ ์ ๋ณด(ex. since, role ๋ฑ)
1-3. ์์ฑ(Property) ์ค๊ณ ์์น
• String, Integer, Float, Boolean, Date, List
• ๋ช ๋ช ๊ท์น : camelCase
• ๊ฐ์ ๋ฌธ์์ ์๋ ๊ฒ๋ง ์ฌ์ฉ(์๋ ์ ๋ณด ์์ ์์ฑ X)
• ๊ตฌ์กฐํ ๊ฐ๋ฅํ ์ ๋ณด๋ ๊ฐ๋ฅํ ํ ๋ณ๋ ์์ฑ์ผ๋ก ๋ถ๋ฆฌ(ex. ๋ ์ง/๊ธ์ก/์๋/์ํ/์ญํ )
1-4. ์ ์ฝ์กฐ๊ฑด/์ธ๋ฑ์ค ์ค๊ณ
• ์ฃผ์ ๋ ธ๋์ ๊ณ ์ ์๋ณ ์์ฑ : UNIQUE ์ ์ฝ์กฐ๊ฑด
• ์์ฃผ ๊ฒ์๋ ์์ฑ : ์ธ๋ฑ์ค(ex. ์ด๋ฆ·์ ๋ชฉ·์ฝ๋·๋ ์ง·์ํ·์นดํ ๊ณ ๋ฆฌ ๋ฑ)
- UNIQUE ์ ์ฝ ์์ฑ์๋ ์ค๋ณต์ผ๋ก ์ผ๋ฐ ์ธ๋ฑ์ค ์์ฑ X
1-5. ์์ฑ ์ ๋ต
• ๋ฌธ์ ๋ถ๋ ์ ์ : ํ๋์ ํ๋กฌํํธ๋ก ์คํค๋ง+์ฟผ๋ฆฌ+๋ช ์ธ์ ์์ฑ ๊ฐ๋ฅ
• ๋ฌธ์ ๋ถ๋ ๋ง์ : ๋จ๊ณ์ ์ฒด์ธ์ผ๋ก ๋๋๋ ๊ฒ์ด ํ์ง์ ์ข์
1-6. ์ค๊ณ ๊ทผ๊ฑฐ(Rationale) ์์ฑ ํ์ํ ์ด์
- LLM์ด ์์ฑํ ์คํค๋ง๋ฅผ ์ฌ๋์ด ๊ฒํ ์ ํจ๊ป ์ ์๋์ด์ผ ์ ๋ขฐ ๊ฐ๋ฅ
• ์ ์ด ๊ฐ์ฒด๋ฅผ ๋ ธ๋๋ก, ์ ์ ์ฐ๊ฒฐ์ ๊ด๊ณ๋ก ์ผ์๋์ง
• ์ด๋ค ์์ฑ์ ์๋ณ์/๊ฒ์ ๋์์ผ๋ก ํ๋จํ๋์ง
• ๋ฌธ์์ ์ ๋ณด๊ฐ ๋ถ์กฑํด ํ์ ํ๊ธฐ ์ด๋ ค์ด ๋ถ๋ถ
2. ์๋ฏธ๊ธฐ๋ฐ ๊ฒ์(Semantic Search) ์ํ ๋ฒกํฐ ์๋ฒ ๋ฉ
2-1. ํ์์ฑ
: Neo4j๋ ํค์๋ ๊ธฐ๋ฐ ๊ฒ์์ผ๋ก, ์๋ฏธ ๊ธฐ๋ฐ ์ง์๋ ์ฒ๋ฆฌํ ์ ์์ด ๋ ธ๋์ ์๋ฒ ๋ฉ ํ๋ ์ถ๊ฐ
- ํ๋ ์์ฑ ์ ํ์ํ 3๊ฐ์ง
โ ์๋ฒ ๋ฉ ๋์ ํ ์คํธ : ๊ธฐ์กด ์์ฑ ๋๋ ์ ํ ์คํธ
โ ์๋ฒ ๋ฉ ๋ชจ๋ธ : Neo4j๋ ๋ฒกํฐ ์ง์ ์์ฑ X → OpenAI ๋ฑ ์ธ๋ถ ์๋ฒ ๋ฉ API ํธ์ถ ํ์(๋ชจ๋ธ์ ๋ฐ๋ผ ์ถ๋ ฅ ๋ฒก์ฒ ์ฐจ์ ์ ๊ฒฐ์ )
โ ๋ฒกํฐ ์ ์ฅํ ๋ ธ๋ ์์ฑ : ์ด ์์ฑ์ ๋ฒกํฐ ์ธ๋ฑ์ค๋ฅผ ๊ฑธ์ด์ผ ์ ์ฌ๋ ๊ฒ์ ๊ฐ๋ฅ
2-2. ๋ฒกํฐ ์ธ๋ฑ์ค
: ๊ณ ์ฐจ์ ๋ฒกํฐ ๊ณต๊ฐ์์ ์ ์ฌ ๋ฒกํฐ ๋น ๋ฅด๊ฒ ์ฐพ๊ธฐ ์ํ ํน์ ์ธ๋ฑ์ค(ANN ์๊ณ ๋ฆฌ์ฆ)
- ์ธ๋ฑ์ค ์์ด๋ ๋ชจ๋ ๋ ธ๋๋ฅผ ์์ฐจ ๋น๊ต(๋นํจ์จ์ )
2-3. ๋ฒกํฐ ๊ฐ ์ ์ฅ
- ๋ ธ๋์ ์๋ฒ ๋ฉ ์์ฑ์ ์๋ฒ ๋ฉ ๋ฒกํฐ ์ ์ฅ : db.create.setNodeVectorProperty() ํจ์(ํ๋ก์์ ) ์ฌ์ฉ
2-4. SEARCH์ (์ ๊ท ๋ฌธ๋ฒ)
: MATCH / OPTIONAL MATCH์ ์ข ์๋ ์๋ธ์ (๋ ๋ฆฝ์ X)
[OPTIONAL] MATCH (์กฐํํ ๋
ธ๋)
SEARCH ๋
ธ๋ IN(
VECTOR INDEX vector_index_name
FOR embedding_vector // ์ง์ ๋ฒกํฐ
[WHERE ํํฐ์กฐ๊ฑด] // ์ธ๋ฑ์ค ๋ด ํํฐ๋ง(์ ํ)
LIMIT ์กฐํ๊ฐ์ // ํ์ : top_k
)
[SCORE AS ๋ณ์นญ] // ์ ์ฌ๋ ์ ์(์ ํ)
3. Text-to-Cypher
: ์์ฐ์ด ์ง์๋ฅผ Neo4j์ Cypher๋ก ๋ณํ → ๊ทธ๋ํ๋ฅผ ์์ฐ์ด๋ก ์กฐํ
3-1. GraphCypherQAChain ๋์ ๊ตฌ์กฐ
์ฌ์ฉ์ ์์ฐ์ด ์ง๋ฌธ
↓ [1๋จ๊ณ LLM] ๊ทธ๋ํ ์คํค๋ง ์ฐธ๊ณ
Cypher ์ฟผ๋ฆฌ ์์ฑ
↓ Neo4j ์คํ
์ฟผ๋ฆฌ ๊ฒฐ๊ณผ(์ปจํ ์คํธ)
↓ [2๋จ๊ณ LLM] ์ปจํ ์คํธ + ์๋ ์ง๋ฌธ
์ต์ข ์์ฐ์ด ๋ต๋ณ
- ๊ฐ์ฒด : ์์ฑ์ ๋์ from_llm() ํด๋์ค ๋ฉ์๋๋ก ์์ฑ
3-2. ์ฃผ์ ํ๋ผ๋ฏธํฐ
• ํ์
| graph | ์ฐ๊ฒฐํ Neo4jGraph ๊ฐ์ฒด |
| allow_dangerous_requests | True ๋ช ์ ํ์(DB ๋ณ๊ฒฝ ์ฟผ๋ฆฌ ํ์ฉ์ ๋ํ ๋์) |
• LLM ๋ถ๋ฆฌ
| llm | Cypher ์์ฑ + ๋ต๋ณ ์์ฑ์ ๋์ผ LLM ์ฌ์ฉ |
| cypher_llm | Cypher ์์ฑ ์ ์ฉ LLM |
| qa_llm | ๋ต๋ณ ์์ฑ ์ ์ฉ LLM |
• ํ๋กฌํํธ / ์คํค๋ง ์ ์ด
| cypher_prompt | Cypher ์์ฑ์ฉ ์ปค์คํ
ํ๋กฌํํธ ({schema}, {question} ๋ณ์ ํฌํจ) |
| qa_prompt | ๋ต๋ณ ์์ฑ์ฉ ์ปค์คํ ํ๋กฌํํธ |
| include_types / exclude_types | LLM์ ๋ ธ์ถ / ์ ์ธํ ๋ ธ๋•๊ด๊ณ ํ์ ์ง์ |
• ๊ฒฐ๊ณผ ์ ์ด
| top_k | LLM์ ์ ๋ฌํ ์ต๋ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ ๊ฑด์(๊ธฐ๋ณธ๊ฐ 10) |
| return_intermediate_steps | True์ ์์ฑ๋ Cypher์ ์กฐํ ๊ฒฐ๊ณผ๋ ํจ๊ป ๋ฐํ(๊ธฐ๋ณธ๊ฐ False) |
| return_direct | True์ 2๋จ๊ณ(์์ฐ์ด ๋ต๋ณ ์์ฑ) ์๋ต, DB ์กฐํ ๊ฒฐ๊ณผ๋ฅผ ๊ทธ๋๋ก ๋ฐํ(๊ธฐ๋ณธ๊ฐ False) |
| validate_cypher | True์ ๊ด๊ณ ๋ฐฉํฅ ์ค๋ฅ ๋ฑ ์๋ ๊ต์ (๊ธฐ๋ณธ๊ฐ False) |
| use_function_response | True์ DB ๊ฒฐ๊ณผ๋ฅผ tool/function ์๋ต ํ์์ผ๋ก ์ ๋ฌ → ์ ํ๋ ํฅ์(๊ธฐ๋ณธ๊ฐ False) |
| verbose | ์ค๊ฐ ๊ณผ์ (Cypher, ์ปจํ ์คํธ) ์ถ๋ ฅ(๊ธฐ๋ณธ๊ฐ False) |
3-3. ์ฃผ์ ์์ฑ
| graph_schema | LLM์ ์ ๋ฌ๋๋ ํ์ฌ ๊ทธ๋ํ ์คํค๋ง ๋ฌธ์์ด |
| input_key | ์ ๋ ฅ ํค(๊ธฐ๋ณธ๊ฐ "query") |
| output_key | ์ถ๋ ฅ ํค(๊ธฐ๋ณธ๊ฐ "result") |
'STUDY > LLM' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [LLM] Neo4jGraph์ Cypher ์ฟผ๋ฆฌ - 2 (0) | 2026.07.09 |
|---|---|
| [LLM] Neo4jGraph์ Cypher ์ฟผ๋ฆฌ (0) | 2026.07.07 |
| [LLM] RAG - evaluation (0) | 2026.07.06 |
| [LLM] Advanced RAG (0) | 2026.07.05 |
| [LLM] RAG - Retriever (0) | 2026.07.04 |