llm wiki 구축기

218.250.***.***
14

거의 일주일동안 메달려 llm wiki시스템이 어느정도 능선을 넘은것 같습니다

지나가던행인이님의 secall로 처음 접하게 되서 이런저런 시행 착오도 많이 겪고 수난도 많이 겪었지만 조금만 더 손보면 자동화 딸깍까지 갈수있는 정도까진 온것 같습니다

아래의 내용은 저와 claude가 구축한 저희 llm위키 의 요약입니다

🏗️ Vault 지식 시스템 요약

Karpathy의 LLM Wiki 패턴에서 출발했지만, 소스와 철학이 근본적으로 다르게 발전한 시스템.
LLM Wiki 패턴은 개념적 배경으로 참조하고, 이 문서는 우리 시스템 고유의 사상과 현재 상태를 기록한다.


📋 목차


핵심 사상 — 작업이 곧 지식이다

Karpathy 원본의 소스는 외부 문서 (기사, URL, 책)다.
이 시스템의 소스는 자신의 AI 세션 로그 — 작업하는 과정 자체가 raw 데이터가 된다.

Karpathy: 외부 세계의 지식 → 나를 위해 정리
이 시스템: 내가 일하는 과정 → 그 자체가 지식

자기참조적 지식 시스템

볼트는 외부 정보를 담는 그릇이 아니라, 나의 사고 과정이 쌓이는 공간이다.
세션이 끝날 때마다 지식이 자동으로 축적되고, 과거의 나와 대화할 수 있다.


Karpathy 원본과의 차이

항목

Karpathy 원본

이 시스템

주요 소스

외부 문서 (URL, 기사)

AI 세션 로그 + 클리핑

수집 방식

수동 ingest

세션 종료 시 자동 수집

LLM 구성

단일 LLM

멀티 LLM 역할 분담

품질 보증

없음 (LLM 직접 생성)

2계층 검증 (PR 파이프라인)

검색

파일 검색 위주

FTS5(BM25) + BGE-M3 벡터 하이브리드

지식 축적

외부 → 내부 단방향

내 작업 ↔ wiki 양방향

자기 개선

없음

PR history 피드백 루프


파이프라인 — 사용자 → 세션 → 지식

이 시스템의 전체 데이터 흐름은 세 계층으로 구성된다.

┌─────────────────────────────────────────────────────────┐
│  사용자 (User)                                           │
│  Claude Code / Claude AI 로 작업                        │
└────────────────────┬────────────────────────────────────┘
                     │ 작업 중 자동 캡처
                     ▼
┌─────────────────────────────────────────────────────────┐
│  세션 (Session)                                          │
│  raw/sessions/YYYY-MM-DD/{agent}_{project}_{id8}.md     │
│  secall: BGE-M3 벡터 임베딩 → SQLite + ANN 인덱스       │
└────────────────────┬────────────────────────────────────┘
                     │ Gemma4 크론 (09/15/21시)
                     │ Claude PR review
                     ▼
┌─────────────────────────────────────────────────────────┐
│  지식 (Wiki)                                             │
│  wiki/projects/ · wiki/topics/ · wiki/decisions/        │
│  → recall 시 다음 세션에 컨텍스트로 환류                 │
└─────────────────────────────────────────────────────────┘

계층 1 — 사용자

사용자는 Claude Code(코딩·운영)와 Claude AI(탐색·대화) 두 채널로 작업한다.
채널이 달라도 세션 파일로 동일하게 수집되어 agent 필드로 구분한다.

채널

agent 값

주요 용도

Claude Code

claude-code

코딩, Vault 운영, 태스크 실행

Claude AI (웹)

claude-ai

리서치, 토론, 개념 탐색

프로젝트 맥락: 세션은 cwd(작업 디렉토리)에서 프로젝트 이름을 자동 추출한다.
614개 세션, 114개 프로젝트 — 작업 디렉토리가 곧 지식의 범주가 된다.

계층 2 — 세션

세션 수명주기는 secall이 자동 관리한다.

이벤트

동작

명령

세션 시작 (Initialize)

ingest only

secall sync --local-only --no-wiki

세션 종료 (SessionEnd)

ingest + push

secall sync --no-wiki

30분 cron

ingest only

secall sync --local-only --no-wiki

인덱싱 구조:

세션 파일 (Markdown)
    ↓ 청크 분할
BGE-M3 (1024차원 벡터)
    ↓
┌──────────────────┬────────────────────────────┐
│  SQLite turn_vectors 테이블  │  ANN (USearch) 인덱스  │
│  + FTS5 전문 검색 인덱스     │  근사 최근접 이웃 검색  │
└──────────────────┴────────────────────────────┘

검색 쿼리 타입:

타입

엔진

언제

keyword

FTS5 (BM25)

함수명·파일명·날짜 등 정확한 단어

semantic

BGE-M3 cosine similarity

"왜 이렇게 했지" 같은 의미 검색

계층 3 — 지식 (Wiki)

세션은 두 경로로 wiki가 된다.

[자동] Gemma4 크론 (09/15/21시)
    세션 → wiki/pr/{id8}.md (1차 초안)
        ↓ A: 기존 wiki 컨텍스트 주입
        ↓ C: 중복 감지 (80%+ → 3초 SKIP)
    Claude PR review
        ↓ merge / create / discard 판정
    wiki/topics/ · wiki/projects/ · wiki/decisions/

[수동] Claude /wiki · /wiki-batch · /wiki-query
    필요한 시점에 직접 인제스트 또는 합성

지식의 환류: wiki는 정적인 저장소가 아니다.

사용자 질문
    ↓ wiki_search (경량) 또는 /wiki-query (전체 탐색)
관련 wiki 페이지 + 세션 recall
    ↓ Claude 응답에 반영
더 나은 작업 결과 → 새 세션 → 더 나은 wiki

프로젝트 차원의 지식 격리

wiki/projects/는 프로젝트별 현재 상태를 독립적으로 유지한다.
프로젝트 A의 결정이 프로젝트 B에 섞이지 않도록 sources: frontmatter로 추적한다.


발전된 점

1. 멀티 LLM 역할 분담

속도와 정확도를 분리했다.

에이전트

역할

특성

Gemma4

세션 → wiki/pr/ 1차 초안 (하루 3회 크론)

빠름, 대량 처리

Claude

2차 review, 판정, wiki 운영

정확, 맥락 이해

Karpathy 원본은 단일 LLM이 전부 처리 → 품질과 속도를 동시에 만족할 수 없음.

2. 2계층 검증 파이프라인

Gemma4가 만든 초안을 Claude가 기존 wiki와 대조 후 판정(merge/create/discard).
소형 모델의 구조적 한계(분류 오류, 중복 생성)를 Claude가 보완.

→ Wiki PR review 2계층 검증 체계

3. PR history 피드백 루프 (2026-04-15)

판정 완료된 PR을 삭제하지 않고 wiki/pr/history/YYYY-MM-DD-{id8}.md로 보관.
frontmatter의 verdict 필드와 ^review 블록으로 판정 사유를 구조화.

목적: 판정 이력 축적
   → 통계: Gemma4 정확도, discard 사유 빈도
   → 미래 판단: "이 유형은 과거에 어떻게 판정했지?" recall 가능
   → Gemma4 튜닝: 반복되는 오판 패턴 → 프롬프트 개선 근거

이것이 단순 기록을 넘어 시스템이 스스로 개선되는 루프를 만든다.

4. 지연 정제 루프 (Lazy Refinement Loop)

wiki-execute가 놓친 세션은 사라지지 않는다.
raw/sessions/에 보존 → 필요한 시점에 /wiki-query의 recall 폴백으로 발굴 → wiki 승격.

자동 처리 (속도 우선, 맥락 부족)
    ↓ 놓친 세션은 raw에 잔류
수요 기반 발굴 (질문이 트리거, 맥락 명확)
    ↓
더 정확한 wiki 페이지 생성

"왜 필요한지가 명확할 때 wiki로 만들어야 한다" — 자동 추천보다 신호 대 소음 비율이 좋다.

5. A+C 품질 향상

단계

이름

동작

생성 전

A (Augment)

기존 wiki 컨텍스트를 Gemma4 프롬프트에 주입

생성 후

C (Check)

생성 파일명으로 유사 wiki 검색 → merge_candidate 삽입

기존 wiki와 80%+ 중복인 세션은 ~70분 생성 대신 3초 SKIP.
요건: secall serve (포트 8765) 실행 중.

6. 세션 연속성 — 핸드오프 (2026-04-15)

LLM의 근본적 한계: 세션이 끝나면 컨텍스트가 사라진다.
이 시스템은 세션 종료 시 핸드오프 파일을 생성해 다음 세션에 전달함으로써 이를 극복한다.

세션 종료 (/session-close)
    ↓
share/project/obsidian-vault/handoff/YYYY-MMDDThhmm.md 생성
    ↓
다음 세션 시작 시 Claude가 자동으로 읽음
    ↓
이전 완료 작업 + 예정 작업 + 현재 상태 파악

핸드오프 파일 구조:

섹션

내용

✅ 완료한 작업

세션에서 실제 처리된 항목 (PR 판정, wiki 생성 등)

🎯 다음 세션 예정 작업

미완료 작업, 후속 제안

📋 참고 상태

PR staging 상태, 특기 사항

왜 Obsidian CLI를 쓰는가:

# 볼트 상대경로로 동작 → PC가 달라져도 경로 동일
obsidian files folder="share/project/obsidian-vault/handoff"
obsidian read path="share/project/obsidian-vault/handoff/<파일명>"

ls + Read 툴(절대경로)과 달리 obsidian CLI는 볼트 루트 기준 상대경로를 사용한다.
MacBook ↔ NAS ↔ 다른 PC 간 이동해도 동일한 명령이 작동한다.

핸드오프는 LLM 기억의 외부화다

세션 사이의 공백을 메우는 것이 아니라, 볼트 자체가 지속적 메모리가 되는 것.
"과거의 나 → 미래의 나"에게 보내는 상태 요약이다.

7. 세션 생명주기 인식

--resume으로 재진입한 세션은 turns_seen < total_turns 조건으로 부분 재처리.
같은 세션의 성장을 추적하며, PR history 파일명의 날짜가 달라져 자동으로 구분.


미흡한 점 / 과제

❶ 단락 수준 소스 추적 (미구현)

현재는 페이지 단위 sources: frontmatter만 있다.
llm-wiki-compiler^[session_id] 단락 마크처럼 주장 단위 출처 추적이 없다.

# 미래 목표 예시
Gemma4는 word-level timestamp를 지원한다. ^[9c979986]

페이지 수가 적을 때는 불필요. 수백 페이지 이상 + 다수 소스 혼합 시 도입 검토.

❷ 대형 세션 (100턴+) 자동화 미완

100턴 이상 세션은 wiki-execute-large.sh로 수동 실행. RTX 5080(NAS) 권장.
크론 자동화 대상에서 제외된 상태.

❸ 관리자 편향 (개선 중)

Claude가 project/topic 분류 기준으로 과도하게 discard하는 경향.
PR history 축적으로 데이터 기반 패턴 분석 가능해지면 개선 예정.

❹ exportignore 유연성 부족

특정 세션/프로젝트를 인덱싱에서 제외하는 설정이 SQLite 쿼리에 하드코딩되어 있다.
llm-wiki-template.exportignore 파일 방식이 더 유연하지만, secall Rust 코드 수정 필요.

❺ confidential 세션 처리 없음

건강 데이터, 개인 금융 관련 세션의 암호화 보관 메커니즘 없음.
llm-wiki-templatesessions/confidential/ + GPG 방식 참고 가능.

❻ Dataview 통계 대시보드 (Phase 4)

wiki/pr/history의 verdict 필드, wiki 페이지 수, 소스 분포 등을 시각화하는
Dataview 대시보드가 없다. 기반 데이터(frontmatter)는 이미 갖춰지는 중.


구조 원칙

소스 계층 불변성

raw/ 하위 파일은 절대 수정하지 않는다. 관찰 대상이 바뀌면 안 된다.

wiki는 현재 상태 중심

wiki는 히스토리가 아니라 현재 상태를 담는다.
이력과 의사결정은 decisions/로 분리.

에이전트 소유권 분리

소유

담당

raw/articles/, raw/inbox/

Gemini/사용자 (Claude 수정 금지)

wiki/pr/ staging

Gemma4 생성

wiki/pr/history/

Claude review

wiki/topics/, wiki/projects/, wiki/decisions/

Claude (최종 관리)

log.md, overview.md (루트)

secall 자동 생성 (수정 금지)

obsidian CLI 우선

볼트 파일 접근은 obsidian CLI로 한다. 볼트 상대경로로 동작하므로 PC가 달라져도 경로가 동일하다.


세션 연속성 — 핸드오프

발전된 점 섹션의 "7. 세션 연속성 — 핸드오프" 참조.

핵심 요약:

  • /session-close 스킬이 share/project/obsidian-vault/handoff/ 에 파일 생성

  • 다음 세션 첫 번째 응답 전 obsidian CLI로 최신 파일을 자동 확인

  • 완료 작업 / 예정 작업 / 시스템 상태를 구조화해 저장

  • obsidian CLI 기반 → 볼트 상대경로 → PC 이식성 확보

로그인한 회원만 댓글 등록이 가능합니다.

개발한당

KR | ID | EN
  • IDR
  • KOR
8.34 =0.00

2026.07.11 KEB 하나은행 고시회차 1694회

다가오는 한인 행사일정

  • 등록 된 일정이 없어요!