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("이전 질문과 연결해서 설명해줘")
OpenKB GitHub 저장소
더 읽어보기
-
Graphify: 복잡한 코드베이스를 한눈에 - AI 코딩 어시스턴트를 위한 지식 그래프(Knowledge Graph) 도구
-
Andrej Karpathy, 개발자를 위한 LLM 소개 영상 'ChatGPT와 같은 LLM 심층 분석' 공개 📺 [영어/YouTube/3:31:23]
이 글은 GPT 모델로 정리한 글을 바탕으로 한 것으로, 원문의 내용 또는 의도와 다르게 정리된 내용이 있을 수 있습니다. 관심있는 내용이시라면 원문도 함께 참고해주세요! 읽으시면서 어색하거나 잘못된 내용을 발견하시면 덧글로 알려주시기를 부탁드립니다. ![]()
파이토치 한국 사용자 모임
이 정리한 이 글이 유용하셨나요? 회원으로 가입하시면 주요 글들을 이메일
로 보내드립니다! (기본은 Weekly지만 Daily로 변경도 가능합니다.)
아래
쪽에 좋아요
를 눌러주시면 새로운 소식들을 정리하고 공유하는데 힘이 됩니다~ ![]()
