LLM 위키와 Graphify를 결합한 로컬 지식 파이프라인
출처: https://www.youtube.com/watch?v=IIvMDB6Oxok · 남다른 AI · 4:28 · 2026-05-25
요지
- 문서를 그대로 일대일 복사해 만든 LLM 위키는 규모가 커질수록 검색 비용과 오류 전파 위험이 커진다.
- LLM 위키는 상세한 맥락을 보존하고, Graphify는 개체와 관계를 그래프로 구조화하는 상호 보완적 역할을 맡는다.
- 질의할 때 지식 그래프로 관련 위치를 먼저 좁힌 뒤 원문 위키에서 세부 내용을 가져오면 전체 문서를 매번 읽는 방식보다 효율적이다.
- 동의어와 의미상 관련된 표현을 정규화하지 않으면 서로 연결되지 않은 고립 노드가 생기므로 의미 기반 연결 단계가 필요하다.
- Tree-sitter 같은 결정론적 파서로 사실 기반의 구조를 먼저 추출하고 AI가 문맥을 보강하는 투패스 구조는 환각 위험을 줄인다.
- 원료 투입, 주제별 위키 병합, 그래프 동기화, 질의의 네 단계를 로컬에서 자동화하면 지속적으로 성장하는 세컨드 브레인을 만들 수 있다.
개요
영상은 LLM 위키와 지식 그래프를 어느 하나로 대체 관계에 놓지 않고 함께 사용해야 하는 두 계층으로 설명한다. LLM 위키는 원문의 설명과 맥락을 충분히 보존하지만, 문서가 많아지면 검색 범위와 토큰 사용량이 커진다. 반대로 Graphify가 만드는 지식 그래프는 개체의 위치와 관계를 빠르게 찾는 데 유리하지만, 노드에 연결된 상세 자료가 빈약하면 내용 없는 뼈대에 그칠 수 있다.
따라서 그래프를 탐색용 지도 또는 인덱스로 사용하고, 위키를 상세 내용의 원장으로 사용하는 것이 핵심이다. 여기에 결정론적 구조 추출과 의미 기반 관계 보강을 분리한 투패스 처리, 원료 폴더부터 질의까지 이어지는 자동화 파이프라인을 더해 검색 비용과 환각을 함께 낮추는 것이 영상의 제안이다.
배경 / 사전 지식
- LLM 위키: 메모, 스크랩, 코드, 문서 등을 주제별 Markdown 문서로 정리해 LLM이 검색·요약할 수 있게 만든 지식 저장소다. 긴 설명과 출처 맥락을 보존하기 좋다.
- 지식 그래프: 사람, 기술, 프로젝트 같은 개체를 노드로, 개체 사이의 관계를 간선으로 표현한 구조다. 관련 개념의 위치와 연결 경로를 탐색하는 데 적합하다.
- Graphify: 영상에서는 로컬 파일을 분석해 노드와 관계로 구성된 그래프를 만드는 도구 또는 그래프화 계층을 가리킨다.
- 토큰 비용: LLM에 전달되는 텍스트가 길수록 입력 토큰과 처리 비용이 증가한다. 검색으로 후보 문서를 먼저 줄이면 불필요한 입력을 피할 수 있다.
- 환각: 모델이 원료에 없는 내용이나 잘못된 관계를 그럴듯하게 생성하는 현상이다. 생성 결과를 다시 지식 원장으로 사용하면 오류가 전체 위키로 전파될 수 있다.
- Tree-sitter: 소스 코드 등의 문법을 구문 트리로 변환하는 결정론적 파서다. 같은 입력에서 안정적인 구조를 얻을 수 있어 AI가 사실 구조를 임의로 만들어 내는 범위를 줄여 준다.
- 시맨틱 연결: 표면적인 문자열 일치가 아니라 문맥과 의미의 유사성을 이용해 표현들을 연결하는 작업이다. 예를 들어 약어, 동의어, 상·하위 개념을 같은 개체나 관련 개체로 묶을 수 있다.
핵심 개념
상세 원장과 탐색 지도의 분리
위키와 그래프는 같은 정보를 중복 저장하는 두 시스템이 아니다. 위키는 설명, 근거, 예시와 같은 풍부한 텍스트를 보존하는 상세 원장이고, 그래프는 어떤 정보가 어디에 있으며 무엇과 연결되는지를 보여 주는 탐색 지도다. 질의 시 그래프로 검색 공간을 좁히고 선택된 노드에 연결된 위키 문서만 읽으면 두 표현 방식의 장점을 함께 얻을 수 있다.
문서 일대일 복사의 한계
원료 문서 하나를 위키 문서 하나로 기계적으로 복사하면 정보가 주제별로 합쳐지지 않는다. 같은 개념이 여러 파일에 중복되고, 이름이 조금씩 다른 개체가 별도 항목으로 남으며, 요약 과정에서 생긴 오류가 후속 문서에 재사용될 수 있다. 지식의 복리를 만들려면 문서 수를 늘리는 데 그치지 않고 기존 주제에 새 근거를 병합하고 관계를 갱신해야 한다.
고립 노드와 개체 정규화
문자열만으로 노드를 만들면 동의어, 약어, 철자 변형이 서로 다른 개체로 등록될 수 있다. 그 결과 관계가 없는 고립 노드가 늘고 탐색 품질이 떨어진다. 이를 막으려면 표준 이름, 별칭, 출처 식별자 같은 규칙 기반 정규화와 의미 유사도 분석을 함께 적용해야 한다. AI가 제안한 연결은 원문 근거나 검증 상태도 함께 보존하는 편이 안전하다.
투패스 아키텍처
첫 번째 패스에서는 파서와 명시적 규칙을 이용해 제목, 링크, 코드 심벌, 문서 계층처럼 입력에서 직접 확인할 수 있는 구조를 추출한다. 두 번째 패스에서만 AI가 요약, 개체 통합 후보, 암묵적 관계와 자연어 설명을 보강한다. 사실의 뼈대와 확률적 해석을 분리하면 AI가 만든 추론을 원문 사실로 오인할 가능성을 낮출 수 있다.
그래프 기반 사전 필터링
영상은 기존 위키 검색에서 세션당 약 2만 토큰을 사용하던 사례가 그래프 사전 컴파일 후 약 280토큰으로 줄어 약 71.5배 절감됐다고 소개한다. 이는 영상이 제시한 특정 사례이며 모든 데이터셋에서 보장되는 수치는 아니다. 일반화할 수 있는 원리는 그래프 탐색으로 관련 후보를 먼저 제한하면 전체 문서를 LLM에 전달하지 않아도 된다는 점이다.
작동 원리
- 원료 수집: 새로운 메모와 스크랩을
raw폴더에 넣는다. 가능한 경우 원본 URL, 작성일, 제목 같은 출처 정보도 함께 보존한다. - 결정론적 추출: 인제스트 단계가 파일 형식과 구문을 분석해 제목, 절, 링크, 코드 심벌 등 직접 확인할 수 있는 구조를 만든다. 코드라면 Tree-sitter 같은 파서를 활용할 수 있다.
- 주제별 병합: 추출한 내용을 문서별로 복제하지 않고 기존 주제의 위키 문서에 누적한다. 새 주장과 기존 주장이 충돌하면 덮어쓰지 말고 각각의 출처를 남긴다.
- 그래프 빌드·동기화: 위키와 로컬 파일을 스캔해 개체 노드와 명시적 관계를 생성하고, 삭제·변경된 문서도 반영한다.
- 의미 관계 보강: 별칭과 동의어를 통합하고 의미상 가까운 고립 노드의 연결 후보를 만든다. AI가 추론한 관계는 결정론적으로 확인된 관계와 구분한다.
- 그래프 우선 검색: 사용자의 질문에서 핵심 개체를 찾아 그래프를 탐색하고 관련 노드와 문서 경로를 좁힌다.
- 위키 원문 회수: 선택된 노드에 연결된 위키 절과 근거 문서만 LLM의 컨텍스트에 넣는다.
- 답변 합성: 회수된 근거로 자연어 답변을 만들고 가능하면 사용한 문서나 노드를 함께 표시한다.
이 구조에서 그래프는 답변 자체가 아니라 검색 계획을 만드는 역할을 한다. 상세 설명은 위키 원문에서 가져오므로 그래프가 지나치게 압축되어 있더라도 맥락을 복원할 수 있다.
코드 예시
아래는 영상이 설명한 흐름을 재현한 개념적 셸 예시다. 실제 저장소의 스크립트명과 옵션은 해당 프로젝트의 README.md를 기준으로 바꿔야 한다.
# 1. 로컬 가상 환경과 의존성 준비
uv sync
# 2. raw/의 새 자료를 주제별 wiki/ 문서에 병합
uv run python scripts/ingest.py --input raw --output wiki
# 3. 위키를 스캔해 지식 그래프를 다시 동기화
uv run python scripts/sync_graph.py --source wiki --output graph
# 4. 그래프에서 후보를 찾고 관련 위키 본문으로 답변
uv run python scripts/query.py "LLM 위키와 지식 그래프를 왜 함께 써야 하나?"
첫 명령은 격리된 로컬 실행 환경을 준비한다. ingest는 원료를 위키에 누적하고, sync_graph는 최신 위키에서 노드와 관계를 빌드한다. query는 전체 위키를 한 번에 읽는 대신 그래프로 관련 범위를 찾은 다음 선택된 위키 문서만 회수해야 한다. 외부 API를 쓰지 않는 구현이라면 모델과 임베딩 데이터가 모두 로컬에 준비되어 있는지도 확인해야 한다.
함정·실수
- 원료 하나당 위키 하나를 만드는 것: 파일만 늘고 주제 지식이 통합되지 않는다. 안정적인 주제 식별자를 정하고 기존 문서에 새 근거를 병합한다.
- AI 요약을 검증 없이 사실로 저장하는 것: 작은 오류가 다음 요약의 입력이 되어 확대될 수 있다. 원문, 결정론적 추출 결과, AI의 해석을 구분해 저장한다.
- 그래프만 구축하면 충분하다고 보는 것: 관계는 풍부해도 노드가 상세 근거를 가리키지 않으면 답변의 깊이가 사라진다. 각 노드를 위키의 구체적인 절과 출처에 연결한다.
- 문자열이 다르면 별도 개체로 처리하는 것: 동의어와 약어가 고립 노드를 만든다. 정규화된 이름과 별칭 테이블을 운영한다.
- 의미 유사도를 곧바로 사실 관계로 확정하는 것: 비슷한 개념이라고 실제 관계가 있는 것은 아니다. 의미 연결에는 점수, 근거, 검증 상태를 기록한다.
- 전체 위키를 매 질의에 전달하는 것: 데이터가 커질수록 토큰과 지연 시간이 증가한다. 그래프와 메타데이터 필터로 후보를 줄인 뒤 필요한 절만 회수한다.
- 그래프를 재빌드하지 않는 것: 위키와 그래프가 어긋나면 오래된 노드와 끊어진 링크가 남는다. 인제스트 후 동기화를 자동 실행하고 변경·삭제도 처리한다.
- 로컬 실행을 곧 완전한 보안으로 간주하는 것: 외부 API 키가 없어도 파일 권한, 로그, 모델 공급망, Git 커밋을 통한 유출 위험은 남는다. 민감 자료의 추적 여부를 별도로 관리한다.
베스트 프랙티스
- 위키 문서마다 안정적인 식별자와 출처 링크를 두고 그래프 노드가 해당 문서의 정확한 절을 가리키게 한다.
- 결정론적으로 추출된 사실, 규칙으로 파생된 관계, AI가 추론한 관계를 서로 다른 유형이나 신뢰 수준으로 표현한다.
- 개체 정규화는 소문자화 같은 단순 전처리, 별칭 사전, 의미 유사도, 사람의 검토 순서로 단계화한다.
- 그래프 검색 결과에는 노드 수, 관계 유형, 시간 범위 같은 제한을 두어 불필요한 컨텍스트 확장을 방지한다.
- 최종 답변에는 사용한 위키 문서와 원출처를 표시해 사용자가 근거를 역추적할 수 있게 한다.
- 토큰 절감 효과는 고정 수치로 가정하지 말고 동일한 질의 모음으로 전체 문서 검색과 그래프 우선 검색을 비교 측정한다.
- 인제스트와 그래프 동기화는 멱등적으로 만들어 같은 자료를 다시 처리해도 문서와 노드가 중복되지 않게 한다.
- 자동 병합 전에 백업이나 버전 관리를 적용하고, 생성 파일·로컬 모델·민감한 원료가 원격 저장소에 올라가지 않도록
.gitignore와 비밀 탐지를 설정한다. - 그래프가 효과적이지 않은 소규모 자료에는 전문 검색이나 임베딩 검색만으로도 충분할 수 있다. 데이터의 관계성이 높고 규모가 커질 때 그래프 계층을 추가하는 것이 합리적이다.
참고
- 영상에서 언급한 개념 및 도구: LLM 위키 패턴, 지식의 복리, Graphify, Tree-sitter, UV 가상 환경
- 영상에서 소개한 사례: 프로덕션 SaaS
bookzero.ai의 시니어 엔지니어 Eric이 기존 RAG·위키 방식의 세션당 약 20,000토큰을 지식 그래프 사전 컴파일 후 약 280토큰으로 줄였다는 사례 - 데모의 전체 데이터 흐름과 정확한 설치·실행 명령은 배포 저장소의
README.md에 기재되어 있다고 설명하지만, 자막에는 저장소 URL이나 정확한 명령어가 제시되지 않는다.