OpenKB: LLM이 문서를 자동으로 위키 형태의 지식 베이스로 컴파일하는 오픈소스 도구

OpenKB 소개

Andrej Karpathy는 LLM이 문서를 그때그때 검색하는 것을 넘어, 지식을 일종의 위키(wiki)로 지속적으로 컴파일하고 업데이트하는 방식이 훨씬 강력할 것이라고 이야기한 바 있습니다. 전통적인 RAG(Retrieval-Augmented Generation) 방식은 매 쿼리마다 지식을 새로 발견합니다. 이전에 분석한 내용이 축적되지 않고, 여러 문서에 걸친 교차 참조도 자동으로 만들어지지 않으며, 모순도 감지되지 않습니다.

OpenKB는 이 아이디어를 실현한 오픈소스 커맨드라인 도구입니다. PDF, Word, Markdown, PowerPoint, HTML, Excel 등 다양한 형식의 문서를 투입하면, LLM이 그 문서들을 요약 페이지, 개념 페이지, 교차 참조가 있는 위키 형태의 지식 베이스로 자동 컴파일합니다. 한 번 컴파일된 지식은 이후 쿼리에서 재발견 없이 바로 활용되며, 새 문서가 추가될 때마다 기존 위키가 풍부해지는 누적 구조를 가집니다. LiteLLM을 통해 OpenAI, Claude, Gemini 등 다양한 LLM 프로바이더를 지원하며, 생성된 위키는 순수 마크다운 파일이라 Obsidian 등 로컬 도구에서도 열 수 있습니다.

OpenKB의 특징적인 점은 짧은 문서와 긴 문서를 다르게 처리한다는 것입니다. 짧은 문서는 전체 텍스트를 LLM이 직접 읽지만, 20페이지 이상의 긴 PDF는 PageIndex 트리 인덱싱을 사용해 계층적 요약 트리를 만들고 LLM이 전체 텍스트 대신 트리를 읽습니다. 덕분에 수백 페이지짜리 기술 문서도 정확하게 처리하면서 컨텍스트 창 제한을 우회할 수 있습니다.

OpenKB의 아키텍처

OpenKB가 문서를 지식 베이스로 변환하는 과정은 다음과 같이 동작합니다:

raw/  # <- 다양한 문서들이 위치하는 곳
 │ 
 │
 ├─ 짧은 문서 ──→ markitdown ──→ LLM이 전체 텍스트 읽기
 │                                     │
 ├─ 긴 PDF ──→ PageIndex ────→ LLM이 문서 트리 읽기
 │                                     │
 │                                     ▼
 │                          위키 컴파일 (LLM 사용)
 │                                     │
 ▼                                     ▼
wiki/
 ├── index.md            지식 베이스 개요
 ├── log.md              운영 타임라인
 ├── AGENTS.md           위키 스키마 (LLM 지침)
 ├── sources/            전문 변환본
 ├── summaries/          문서별 요약
 ├── concepts/           교차 문서 합성  ← 핵심
 ├── explorations/       저장된 쿼리 결과
 └── reports/            린트 리포트

문서 하나가 추가될 때 LLM은 요약 페이지를 생성하고, 기존 개념 페이지들을 읽어 새 지식으로 업데이트하거나 새 개념 페이지를 만들며, 인덱스와 로그를 갱신합니다. 문서 하나가 보통 10~15개의 위키 페이지에 영향을 미치며, 각 문서가 고립된 섬이 아니라 전체 지식 그래프의 일부로 연결됩니다.

OpenKB의 주요 기능

다양한 형식 지원: PDF, Word(.docx), Markdown, PowerPoint, HTML, Excel, 일반 텍스트를 markitdown을 통해 처리합니다. 이미지, 표, 그림도 네이티브 멀티모달로 추출하고 이해합니다.

위키 컴파일: LLM이 여러 문서를 아우르는 요약, 개념 페이지, 교차 링크를 자동으로 관리합니다. 시간이 지날수록 지식이 풍부해지는 누적 구조입니다.

쿼리와 대화: openkb query로 일회성 질문을 하거나, openkb chat으로 세션을 유지하며 멀티턴 대화를 나눌 수 있습니다. 대화 세션은 저장하고 재개할 수 있습니다.

Lint 건강 검사: openkb lint를 실행하면 지식 베이스의 모순, 공백, 고립된 페이지(orphan), 오래된 콘텐츠를 탐지합니다.

감시 모드: openkb watch를 실행하면 raw/ 디렉토리를 모니터링하다가 새 파일이 추가되면 자동으로 위키를 업데이트합니다.

Obsidian 호환: 위키는 [[wikilinks]]를 포함한 순수 마크다운 파일로 구성되어, Obsidian에서 그래프 뷰와 브라우징이 가능합니다.

OpenKB 설치 및 사용법

# 설치
pip install openkb

# 지식 베이스 초기화
mkdir my-kb && cd my-kb
openkb init

# 문서 추가 및 위키 컴파일
openkb add paper.pdf
openkb add ~/papers/        # 디렉토리 전체 추가
openkb add research.docx

# LLM API 키 설정 (.env)
# LLM_API_KEY=your_api_key
# init 시 또는 .openkb/config.yaml에서 모델 지정
# 예: anthropic/claude-sonnet-4-6, gpt-5.4

기본 사용 패턴:

# 질문하기
openkb query "이 논문들의 주요 발견은 무엇인가요?"

# 답변을 위키에 저장
openkb query "트랜스포머 아키텍처의 핵심 혁신은?" --save

# 대화형 채팅 (세션 유지)
openkb chat

# 이전 세션 재개
openkb chat --resume

# 지식 베이스 건강 검사
openkb lint

# 자동 업데이트 모드
openkb watch
# Python API 활용 예시
from openkb import KnowledgeBase

kb = KnowledgeBase("./my-kb")

# 문서 추가
kb.add("research_paper.pdf")

# 쿼리
answer = kb.query("이 논문의 핵심 방법론은?")
print(answer)

# 대화형 세션
session = kb.chat()
session.ask("이전 질문과 연결해서 설명해줘")

:github: OpenKB GitHub 저장소

더 읽어보기




이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. :hugs:

:pytorch:파이토치 한국 사용자 모임:south_korea:이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일:love_letter:로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)

:wrapped_gift: 아래:down_right_arrow:쪽에 좋아요:+1:를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ :star_struck:

5개의 좋아요

해외에서 만든 llm wiki 구현체의 가장 약점은 CJK 형태소 검색입니다.(토크나이저가 없어요) 다만 이 프로젝트는 여러 문서형태를 지원해서 좋아보이네요. 한국어 llm wiki중엔 GitHub - hang-in/seCall: recall your second brain · GitHub 현재까지 이게 가장 나은거 같아요

이론상 굉장히 좋아보입니다. 특히 기존 벡터 DB RAG 의 문제점을 크게 개선할 수 있을것 같습니다. 물론 벡터 DB RAG를 완전히 대체하지는 못하겠지만, 공존하며 응용될 여지가 큰 기술로 보입니다.

이전에 이야기만 들었을 땐 너무 추상적으로 다가왔는데 구현된 걸 보니 한층 이해하기가 쉽네요

제가 Claude Code를 활용하여 만든 유틸리티 컬렉션인 logicutils와의 궁합은 어떠할지 궁금하네요...