• altair823 released this 2026-05-31 10:45:21 +00:00 | 82 commits to main since this release

    이번 릴리스는 검색 품질을 높이는 doc-side expansion(별칭), 비싼 색인 계산을 재사용하는 파생물 캐시(V012), 그리고 외부 서버에서 색인하고 로컬에서 검색하는 워크플로를 추가합니다.

    1. doc-side expansion — 별칭 색인 (opt-in)

    무엇이 바뀌나 색인 시 LLM이 각 청크에 "같은 의미의 다른 표현"(동의어·약어·한↔영 번역·풀어쓴 설명)을 별칭으로 생성해, 줄별 개별 dense 벡터로 색인합니다. 검색 시 별칭이 원본 문서로 매핑돼, 설명형 질문이나 영어↔한국어 cross-lingual 질문의 검색 일관성을 높입니다.

    측정 나무위키 ~1000개 CS 문서(유사 주제 밀집) corpus에서 변형 일관성 14/18 → 16/18, 출렁임(spread@10) 0.222 → 0.111. 대조군(정답 없는 질문)에서 false-positive를 유발하지 않음을 확인했습니다.

    트레이드오프 / 활성 청크당 LLM 호출이라 비용이 큽니다 → 기본 off. config.toml[ingest.expansion] enabled = true + embed_aliases = true로 켭니다. 켜지 않으면 기존 동작과 완전히 동일합니다.

    2. 파생물 캐시 (V012) — 재색인 145배

    무엇이 바뀌나 embedding 벡터와 별칭 LLM 결과를 청크 내용 해시로 캐싱합니다(derivation_cache 테이블). 재색인이나 문서 갱신 시 내용이 같은 청크는 재계산을 건너뜁니다. 문서 중간에 내용을 추가해 청크 위치가 밀려도, 내용이 같은 청크는 캐시 히트라 비싼 임베딩·LLM 계산을 다시 하지 않습니다(DB row만 재기록, 계산은 변경분만).

    측정 정답 18문서 별칭 재색인 기준 cold 1879초(31분) → warm 13초 (≈145배).

    안전성 캐시 키에 모델·프롬프트·차원 버전이 포함돼, 모델/프롬프트를 바꾸면 자동으로 캐시가 무효화됩니다(잘못된 옛 벡터 재사용 없음). 별도 설정 없이 투명하게 동작합니다.

    알려진 제약 현재 캐시 자동 정리(TTL/LRU)는 미연결이라 캐시가 누적됩니다. 정리는 kebab reset으로만 가능합니다(후속 작업 예정).

    3. 외부 계산 + 로컬 검색 워크플로

    kebab search / kebab ask는 asset 원본 파일 없이 kebab.sqlite + lancedb만으로 동작합니다. 비싼 색인(임베딩·OCR·별칭 생성)을 성능 좋은 서버에서 수행한 뒤 이 두 산출물만 로컬로 복사하면 그대로 검색·질문할 수 있습니다. 캐시도 내용 해시 기반이라 머신 독립적으로 재사용됩니다.

    ⚠️ 업그레이드 (중요)

    V012 schema migration이 포함돼 이전 버전 binary로는 v0.21.0 데이터베이스를 열 수 없습니다(마이그레이션 mismatch). binary를 v0.21.0으로 교체하세요:

    git pull && cargo install --path crates/kebab-cli --locked --force
    

    기존 색인 데이터의 재색인은 불필요합니다 — 본문 청크의 chunk_id와 벡터는 변하지 않았고(V012는 캐시 테이블 추가일 뿐 기존 데이터를 건드리지 않음), 새 binary 첫 실행 시 V012가 자동 적용됩니다.

    상세 측정·설계 기록: docs/superpowers/handoffs/2026-05-31-namu-wiki-alias-cache-study.md

    Downloads