Think-on-Graph: Knowledge Graph를 활용한 LLM의 깊고 책임감 있는 추론
Think-on-Graph: Deep and Responsible Reasoning of Large Language Model with Knowledge Graph
TL;DR Highlight
LLM이 Knowledge Graph 위를 탐색하며 단계적으로 추론하는 방법으로 환각(hallucination)을 줄이고 정확도를 높인다.
Who Should Read
LLM의 환각 문제를 줄이고 싶은 백엔드/AI 개발자. 특히 도메인 지식 기반 QA 시스템이나 사실 검증 파이프라인을 구축 중인 경우에 유용하다.
Core Mechanics
- LLM을 Knowledge Graph(KG) 위의 에이전트로 활용해서, 질문에 답하기 위해 KG 노드를 단계적으로 탐색(beam search 방식)함
- 기존 RAG처럼 텍스트 덩어리를 가져오는 게 아니라, KG의 엔티티-관계 트리플(entity-relation triple)을 따라가며 추론 경로를 구성함
- LLM이 각 탐색 단계에서 어떤 관계(relation)를 따라갈지 스스로 판단하고, 답이 충분한지도 자체적으로 평가함
- 추론 근거가 KG 경로로 추적 가능해서 '왜 이 답이 나왔는지' 설명 가능(explainable)함
- 외부 KG(Freebase, Wikidata 등)를 실시간으로 쿼리하므로 모델 재학습 없이 최신 지식 활용 가능
Evidence
- KGQA 벤치마크(WebQSP, CWQ)에서 기존 RAG 방식 대비 정확도 약 8~12% 향상
- 다중 홉(multi-hop) 추론이 필요한 질문에서 Chain-of-Thought 단독 사용 대비 최대 15% 이상 성능 개선
- 답변 근거 추적 가능성(traceability) 면에서 블랙박스 LLM 대비 명시적 경로 제공
How to Apply
- 도메인 KG(예: 의료, 법률 온톨로지)가 있는 경우, 사용자 질문에서 엔티티를 추출하고 KG 탐색 에이전트를 LLM으로 구성해 multi-hop 답변 파이프라인을 만들 수 있음
- 기존 RAG 파이프라인에서 청크 검색 대신 KG triple 경로 검색으로 교체하면, 특히 '누가 누구와 어떤 관계인가' 형태의 관계형 질문에서 정확도가 올라감
- LLM 프롬프트에 'KG에서 가져온 관계 후보 목록'을 제시하고 어떤 관계를 탐색할지 선택하게 하는 방식으로, Freebase/Wikidata API와 연결해 바로 구현 가능
Code Example
snippet
# Think-on-Graph 핵심 루프 pseudo-code
def think_on_graph(question, kg_client, llm, max_depth=3, beam_width=3):
# 1. 질문에서 시작 엔티티 추출
start_entities = llm.extract_entities(question)
paths = [(entity, []) for entity in start_entities] # (현재노드, 경로)
for depth in range(max_depth):
candidates = []
for current_node, path in paths:
# 2. KG에서 현재 노드의 관계 후보 조회
relations = kg_client.get_relations(current_node)
# 3. LLM이 관련 관계 선택
prompt = f"""
질문: {question}
현재 탐색 노드: {current_node}
현재까지 경로: {path}
사용 가능한 관계들: {relations}
위 관계들 중 질문에 답하기 위해 탐색해야 할 관계를 선택하세요.
관련 없으면 'none'을 출력하세요."""
selected_relations = llm.call(prompt)
for rel in selected_relations[:beam_width]:
next_nodes = kg_client.get_neighbors(current_node, rel)
for node in next_nodes:
candidates.append((node, path + [(current_node, rel, node)]))
# 4. LLM이 현재 후보들로 답 가능한지 판단
answer_check_prompt = f"""
질문: {question}
탐색된 경로와 엔티티들: {candidates}
현재 정보로 질문에 답할 수 있나요?
답할 수 있으면 답변을 제시하고, 없으면 'continue'를 출력하세요."""
result = llm.call(answer_check_prompt)
if result != 'continue':
return result, candidates # 답변 + 근거 경로 반환
paths = candidates[:beam_width] # beam 유지
return llm.call(f"질문: {question}\n수집된 정보: {paths}\n최종 답변:"), pathsTerminology
Knowledge Graph (KG)엔티티(사람, 장소, 개념)와 그 관계를 노드-엣지 구조로 저장한 데이터베이스. 예: '아이언맨 → 제작사 → 마블'처럼 사실을 연결 고리로 표현함.
HallucinationLLM이 사실이 아닌 내용을 자신있게 말하는 현상. 모델이 학습 데이터에서 패턴을 그럴듯하게 조합해서 없는 사실을 만들어냄.
Multi-hop 추론한 번에 답을 못 찾고 여러 단계를 거쳐야 하는 추론. 예: '아이언맨 배우의 출생지 인구는?' → 아이언맨→배우→출생지→인구 순으로 여러 번 탐색.
Beam Search모든 가능성을 탐색하지 않고 상위 k개 후보만 유지하며 탐색하는 방식. 지도 앱에서 최적 경로 몇 가지만 추천하는 것과 비슷.
TripleKG에서 (주어-관계-목적어) 형태로 저장된 최소 지식 단위. 예: (아이언맨, 제작사, 마블)
RAGRetrieval-Augmented Generation. 외부 문서를 검색해서 LLM 답변에 활용하는 기법. LLM의 기억이 부족할 때 외부 자료를 찾아서 보완함.
ExplainabilityAI가 왜 그런 답을 냈는지 설명할 수 있는 능력. 블랙박스와 반대 개념으로, 추론 과정을 사람이 검증할 수 있음.