새로운 기능으로는 커뮤니티 요약, 병렬 검색기, 텍스트에서 더 나은 Knowledge Graph 구성을 위한 확장된 모델 지원이 있어요.
배경
많은 개발자분들이 빌드를 시도하면서 Retrieval-Augmented Generation (RAG)를 벡터 검색만 사용해서 비정형 데이터의 정보와 상호 작용하고 원하는 결과를 얻으려고 노력하는 경험을 하셨을 거예요. 맥락 없이 텍스트 조각만 보면 지금까지의 정보만 얻을 수 있죠. 데이터 엔지니어링에는 평소와 같이 더 많은 것들이 필요해요. 고급 패턴 중 하나는 데이터를 전처리하고 지식을 추출하는 GraphRAG이에요. 데이터를 사용해서 기본 개념을 명확히 하고, 이를 활용해서 조각을 연결하고, 사용자 질문에 관련된 맥락을 제공할 수 있는 거죠.
저희는 오픈 소스이고, LLM Knowledge Graph Builder를 통해 구조화되지 않은 데이터를 처리하는 더 나은 방법을 시험해 볼 수 있도록 지원하고 있어요. 문서, 성적 증명서, 웹 기사 등을 전처리하는데, 소스를 청크로 나누고, 텍스트 Vector Embedding을 계산하고, 연결하는 방식(어휘 그래프)이에요.
하지만 여기서 멈추지 않아요. 저희는 또한 엔터티와 해당 Relationships를 추출하는데, 이는 여러 소스(Property Graph)에 분산된 조각을 연관시킬 수 있어서 여러 문서를 수집하는 경우 특히 중요해요.
이렇게 결합된 Knowledge Graph를 통해 다양한 검색기 집합이 데이터를 가져올 수 있게 되는 거죠 (아래 참조).
저희가 2024년 6월에 LLM Knowledge Graph Builder를 출시한 이후로, 인상적인 사용량과 사용자분들의 좋은 피드백을 받아서 정말 기뻤어요. 이제 AuraDB Free에서 네 번째로 인기 있는 사용자 상호 작용 소스가 되어서 정말 기쁘답니다.
2024년 가을에 출시했는데 AI 이벤트가 너무 많아서 블로그 포스팅을 작성하는데 대부분의 시간을 썼어요. 지난 몇 달 동안 팀은 정말 멋진 기능을 개발하기 위해 노력했고, 그 중 일부를 오늘 2025년 첫 번째 릴리스에서 소개해 드리고 싶어요.
LLM Knowledge Graph Builder는 어떤 기능을 하나요?
이 도구의 기능을 모르시는 분들을 위해 간단하게 소개해 드릴게요.
텍스트 문서, 웹 기사, Wikipedia 페이지 또는 유사한 구조화되지 않은 정보가 많이 있을 때, 그 안에 숨겨진 모든 지식을 구조화된 방식으로 명확히 하고 해당 엔터티와 Relationships를 사용해서 더 나은 결과를 얻는다면 정말 좋겠죠? 하는 것처럼요!
LLM Knowledge Graph Builder는 다음과 같은 기능을 제공해요:
- 문서를 가져와요.
- 청크로 분할하고 연결해요.
- 벡터 검색을 위한 텍스트 Vector Embedding을 생성하고 가장 유사한 것을 연결해요.
- 다양한 LLM (Large Language Model)을 사용해서 엔터티와 Relationships를 추출해요.
- 선택적으로 제공할 수 있는 그래프 스키마를 사용해서
- Neo4j에 Nodes와 Relationships를 저장해요.
- 그리고 Graph Data Science 지원 Neo4j 인스턴스에서 실행될 때 주제 클러스터링 및 요약도 수행해요.
프로세스에 대한 간략한 개요를 확인하고 다음에서 사용해 보세요: .
유일한 전제 조건은 데이터를 저장하기 위해 공개적으로 액세스할 수 있는 Neo4j 인스턴스예요. AuraDB에서 무료로 생성할 수 있어요 (또는 Graph Data Science가 포함된 Aura Pro 평가판을 사용해도 좋아요).
심층 블로그 시리즈
앞으로 몇 주 동안 일련의 블로그 게시물을 통해 LLM Knowledge Graph Builder의 다양한 측면을 살펴보고, 내부적으로 어떻게 작동하는지 자세히 설명할 예정이에요. 배운 내용을 여러분의 GenAI 프로젝트에 적용할 수 있도록요!
새로운 기능
새로운 기능들을 한번 살펴볼까요? 주요 내용은 다음과 같아요. 커뮤니티 요약 생성을 위한 새로운 로컬 및 글로벌 리트리버를 실행하고, 여러분의 질문과 병행하여 를 하는 기능이죠. 이제 다음을 사용해서 추출을 안내할 수도 있어요.
또한 몇 가지 사용자 경험 개선 사항도 눈에 띄어요.
더 많은 모델
개발 모드 또는 자체 배포 환경에서, 저희는 수많은 새로운 모델을 사용해서 LLM Knowledge Graph Builder를 테스트하고 구성해봤어요. 프로덕션 버전에도 적용될 예정이죠.
- OpenAI GPT-4o(및 GPT-4o mini)
- Google Gemini 1.5, 2.0 Pro 및 Flash
- 퀀 2.5
- Amazon Nova 모델
- Groq
- 라마 3.x
- 클로드 3.5 소네트
- DeepSeek 및 Microsoft Phi-4, 곧 출시 예정
저희는 통합 테스트를 위해 모델을 내부적으로 테스트하고, 추출에 얼마나 잘 작동하는지 확인하고 있어요.

커뮤니티 요약
문서를 나타내는 그래프의 풍부함을 향상시킬 수 있는 한 가지 방법은 그래프 알고리즘을 실행하여 그래프 구조에 숨겨진 추가 정보를 추출하는 것이에요.
Microsoft는 작년에 “로컬에서 글로벌로 — 쿼리 중심 요약 GraphRAG" 논문을 발표했는데요. 그들은 계층적 그래프 클러스터링 알고리즘(Leiden)을 추출한 엔터티 도메인 그래프에 적용했어요. 이 알고리즘은 밀접하게 관련된 엔터티의 클러스터를 식별하고, LLM은 콘텐츠를 커뮤니티 요약 Node로 요약하죠. 이는 해당 엔터티 및 관계 집합의 정보를 나타내요. 계층적 결과 덕분에 매우 세부적인 수준부터 가장 높은 수준까지 여러 수준에서 수행될 수 있어요.
평가에 대한 더 자세한 블로그 게시물은 시리즈 후반부에 제공될 예정이에요.
추출된 커뮤니티는 문서의 그래프 시각화에 표시되는데요, 해당 커뮤니티와 텍스트를 검사하고 요약하고 있는 엔터티를 확인할 수 있어요.
그리고 해당 커뮤니티 요약은 글로벌 리트리버를 통해 특정 엔터티에 국한되지 않고 문서 전반에 걸쳐 주제를 식별하는 문서에 대한 일반적인 질문에 답변하는 데 사용돼요. 각 문서 내용의 수직 순서 대신 개별 문서에 걸친 주제를 나타내는 거죠.
LLM Knowledge Graph Builder에서는 다음을 사용해서 구현했는데요, 동일한 클러스터링 알고리즘을 사용했어요. 그래서 Graph Data Science가 활성화된 Neo4j 인스턴스(GDS, AuraDS, Neo4j Sandbox가 포함된 AuraPro 또는 자체 호스팅 (앱 상단에 ⚛로 표시됨))에 연결하고 그래프 향상 > 사후 처리에서 커뮤니티 요약을 활성화하면 알고리즘을 실행하고 요약 트리를 생성할 수 있답니다.
저희의 글로벌 커뮤니티 리트리버는 질문에 답하기 위해 모든 커뮤니티 요약(특정 수준)을 여러 LLM 프롬프트에 포함하는 논문과는 약간 다른 접근 방식을 취했어요. 저희는 커뮤니티 요약의 Vector Embedding을 생성하고 유사성 및 전체 텍스트 검색을 사용하여 Microsoft Research가 최근 제안한 질문과 가장 관련성이 높은 항목을 찾고 이를 사용하여 질문에 답변합니다.
이제 여러 검색기를 병렬로 실행할 수 있으니까, 차이점을 직접 확인할 수 있어요. 전역 및 로컬 엔터티 검색기 비교를 확인해 보세요!
다른 모든 검색기와 마찬가지로 두 검색기 모두 답변을 생성하는 데 사용된 검색된 상황별 그래프 데이터(커뮤니티, 엔터티, 청크)를 표시하여 설명 가능성을 지원해요.
로컬 엔터티 리트리버
The Local Entity Retriever는 Microsoft 문서 구현에서 수천 줄의 Python 코드를 약 50줄의 Cypher(실제 Graph Database 사용의 이점 중 하나)로 변환해서 다음을 가져와요.
- 하이브리드 검색을 사용하는 엔터티(임베딩 및 전체 텍스트)
- 그들 사이의 관계 (Relationship)
- 초기 세트 외부 항목과의 가장 일반적인 관계
- 엔터티가 추출된 Chunk 및 문서
- 해당 법인이 속한 커뮤니티 요약
// previous hybrid search on entities, then graph expansion
WITH collect(node) AS nodes,
avg(score) AS score,
collect({id: elementId(node), score: score}) AS metadata
RETURN score, nodes, metadata,
collect {
UNWIND nodes AS n
MATCH (n)<-[:HAS_ENTITY]->(c:Chunk)
WITH c, count(distinct n) AS freq
RETURN c
ORDER BY freq DESC
LIMIT 3
} AS chunks,
collect {
UNWIND nodes AS n
OPTIONAL MATCH (n)-[:IN_COMMUNITY]->(c:__Community__)
WITH c, c.community_rank AS rank, c.weight AS weight
RETURN c
ORDER BY rank, weight DESC
LIMIT 3
} AS communities,
collect {
UNWIND nodes AS n
UNWIND nodes AS m
MATCH (n)-[r]->(m)
RETURN DISTINCT r
} AS rels,
collect {
UNWIND nodes AS n
MATCH path = (n)-[r]-(m:__Entity__)
WHERE NOT m IN nodes
WITH m, collect(distinct r) AS rels, count(*) AS freq
ORDER BY freq DESC
LIMIT 10
WITH collect(m) AS outsideNodes, apoc.coll.flatten(collect(rels)) AS rels
RETURN { nodes: outsideNodes, rels: rels }
} AS outside
엔터티 검색기의 경우 텍스트 청크뿐만 아니라 엔터티와 검색된 관계도 표시할 수 있어요.
멀티 리트리버
이전 섹션에서 보셨듯이, 이제 병렬로 실행되는 하나 이상의 검색기를 선택해서 질문에 대한 답변을 생성하고, 답변 결과 간에 직접 전환해서 비교할 수도 있어요.
검색자는 각 답변 뒤에 데이터베이스에서 검색한 상황별 사실과 해당 링크를 제공하고, 이를 LLM으로 전송해요. 모델, 런타임, 토큰 수에 대한 추가 정보도 함께 제공되죠.
개발 모드나 자체 호스팅 환경에서는 더 많은 검색기를 테스트하고 비교해볼 수 있어요.
좀 더 쉽게 테스트할 수 있도록 좁은 오른쪽 대화 사이드바를 최대화하거나, 전체 프레임으로 팝업해서 공유할 수도 있답니다. 읽기 전용 데이터베이스 연결 설정에 특히 유용하고, 이제 생성된 Knowledge Graph 공유도 지원한다니 정말 편리하죠?
대화의 기본 데이터는 JSON 파일로 다운로드할 수 있어서 필요에 따라 처리하기도 좋답니다.
Retriever 평가
병렬 검색기 평가를 하는 이유 중 하나는 평가 지표를 생성하는 기능을 추가하기 위해서였어요.
평가를 실행하기 위해 RAGAs 프레임워크를 사용하고 있는데, 현재 다음과 같은 측정 항목을 계산하고 있고, 그 중 일부는 정답을 제공해야 해요.
- 관련성(Relevancy) — 답변이 사용자의 질문을 얼마나 잘 해결하는지
- 충실성(Faithfulness) — 답변이 제공된 정보를 얼마나 정확하게 반영하는지
- 컨텍스트 관련성(Context Relevance) — 생성된 답변 및 검색된 컨텍스트에 존재하는 엔터티의 회상을 결정해요.
- 의미적 관련성(Semantic Relevance) — 생성된 답변이 참조 답변의 의미를 얼마나 잘 이해하고 있는지
- ROUGE — 단어별 정답 답변과 유사함

시리즈 후반부에 평가에 대한 자세한 블로그 게시물이 있을 예정이에요.
추출을 위한 안내 지침
최신 버전에서는 사용자가 엔터티 추출을 위해 LLM에 추가 프롬프트를 전달해서 추출을 더 많이 안내하는 기능을 추가했어요. 문서를 특정 부분만 집중하거나, 특정 테마에만 집중하거나, 특정 추가 지침을 사용하도록 강제할 수 있게 된 거죠.

Albert Einstein의 작업에 관한 여러 기사에서 엔터티와 관계를 추출했지만, LLM에게 그의 물리학 작업과 관련된 어떤 것도 추출하지 않도록 지시해서 테스트해봤어요. 그랬더니 생명, 사람, 상, 평화 활동 및 기타 발명품은 추출했지만, 물리학 분야에 엄청난 공헌을 한 내용은 많지 않았답니다.
사용자 경험 개선
개선 사항을 간단하게 정리해봤어요:
- 읽기 전용 데이터베이스 액세스를 허용해서 검색만 가능하도록 했어요.
- 채팅 환경을 별도의 팝업 창으로 띄울 수 있게 되었죠.
- 지역 검색 및 강조 표시 기능으로 그래프 시각화가 더 좋아졌어요.
그래프 통합
이 실험적인 기능은 데이터에서 추출한 Knowledge Graph를 빠르게 보고 싶지만, 그래프 스키마를 미리 지정하고 싶지는 않은 분들을 위한 자동 그래프 통합 기능이에요.
이런 경우, LLM은 수많은 엔터티 유형과 관계를 생성하는데, 자유롭게 놔두면 그 수가 수천 개에 달할 수도 있어요. 검색하는 사람은 그래프를 탐색할 때 실제 유형보다는 그래프 토폴로지를 사용하기 때문에 크게 신경 쓰지 않죠 (텍스트 정보와 함께 수집하긴 하지만요).
그래서 의미적으로 더 제한된 Knowledge Graph를 위해서는 그래프 스키마를 미리 제공하는 게 좋아요. 하지만 그렇게 하지 못했을 경우, LLM을 사용해서 정렬된 Node 레이블 및 Relationship 유형 목록을 더 작고 일반적인 세트로 분류할 수 있어요. 100% 만족스럽게 줄어들지는 않기 때문에 기본적으로 활성화하지는 않았지만, 여러분의 피드백을 환영해요! 그래프 개선 사항에서 후처리 작업 중 하나로 찾을 수 있을 거예요.
요약
이런 오픈 소스 도구를 만드는 건 정말 만족스러운 경험이에요. 특히 지금까지 받은 피드백이 많아서 더 그렇죠. 내부 계획 작업을 포함해서 400개 이상의 GitHub 이슈를 해결했고, 2,800개 이상의 GitHub 스타를 받았답니다.
아직 안 써보셨다면, 한번 사용해 보시고 의견을 알려주세요! 댓글로 남겨주시면 정말 기쁠 거예요. 다양한 도메인의 다양한 문서 세트에 대해 도구를 사용한 경험에 대해 써주시면 더 좋고요.
즐거운 개발 되세요!
- 그래프RAG
- 검색 증강 생성
에이치시스템즈의 LogTree는 Neo4j 기반 GraphRAG 플랫폼으로, 데이터를 자동으로 지식그래프화하고 자연어 질의로 즉시 답을 제공합니다.
'Ontology & Knowledge Graph' 카테고리의 다른 글
| 머신러닝, 그래프, 그리고 가짜 뉴스 팬데믹 (1부) (1) | 2026.07.18 |
|---|---|
| Neo4j LLM 지식 그래프 빌더, 이렇게 시작하세요! (0) | 2026.07.18 |
| LLM Knowledge Graph Builder 백엔드 아키텍처 및 API 개요 (1) | 2026.07.17 |
| LlamaParse로 문서에서 Knowledge Graph 만들기 (0) | 2026.07.17 |
| #GraphCast: 생명과학 분야 그래프 - 복잡한 데이터를 연결하는 치료제 (0) | 2026.07.17 |
