
로컬 검색을 통한 Obsidian 내 AI 컨텍스트 낭비 줄이기
요약
Obsidian 사용자가 AI 어시스턴트 활용 시 발생하는 컨텍스트 낭비를 줄일 수 있도록 돕는 오픈 소스 플러그인 'Context Prism'을 소개합니다. 로컬 기반의 어휘 검색 방식을 통해 관련성 높은 노트 스니펫을 압축된 컨텍스트 팩으로 생성하여 토큰 비용을 절감하고 효율성을 높입니다.
핵심 포인트
- 로컬 우선 접근 방식으로 개인정보 보호 및 비용 절감
- TF-IDF 및 BM25 기반의 효율적인 로컬 랭킹 시스템
- 압축된 Markdown 컨텍스트 팩을 통한 토큰 사용량 최적화
- 외부 API 호출 없이 Obsidian 내부에서 동작
AI 어시스턴트(AI assistants) 및 대규모 지식 베이스(knowledge base)와 함께 작업할 때 반복적으로 발생하는 문제 중 하나는 컨텍스트 낭비(context waste)입니다.
여러분은 일련의 노트들을 가지고 있는데, 그중 일부는 관련이 있고 많은 것들은 느슨하게만 연결되어 있습니다. 이때 가장 쉬운 방법은 종종 모델에 너무 많은 컨텍스트를 붙여넣는 것입니다.
이는 몇 가지 문제를 야기합니다:
- 토큰 사용량(token usage)이 빠르게 증가함
- 프롬프트(prompts)를 검토하기가 더 어려워짐
- 어시스턴트가 무관한 정보를 받게 됨
- 중요한 노트를 여전히 놓칠 수 있음
- 워크플로우가 수동 검색에 너무 많이 의존함
저는 Obsidian 내부에서 이 문제에 대한 로컬 우선(local-first) 접근 방식을 탐구하고 싶었습니다.
그 결과물은 관련 노트로부터 토큰을 인식하는 컨텍스트 팩(context packs)을 생성하는 오픈 소스 Obsidian 플러그인인 Context Prism입니다.
커뮤니티 디렉토리: https://community.obsidian.md/plugins/context-prism
GitHub: https://github.com/stefanimp/context-prism
아이디어
AI 어시스턴트에게 대규모 볼트(vault)를 검토하도록 요청하는 대신, Context Prism은 첫 번째 검색(retrieval) 단계를 로컬에서 수행합니다.
활성화된 노트가 쿼리(query)가 됩니다. 플러그인은 볼트 내의 관련 노트를 순위 매기고(ranks) 다음과 같은 내용을 포함하는 압축된 Markdown 컨텍스트 팩을 생성합니다:
- 노트 경로(note paths)
- 집중된 스니펫(focused snippets)
- 순위 선정 이유(ranking reasons)
- 대략적인 토큰 추정치(rough token estimates)
- 추정된 절약된 컨텍스트(estimated avoided context)
이 컨텍스트 팩은 분석, 글쓰기 도움, 계획 또는 구현 작업을 요청하기 전에 ChatGPT, Claude, Codex, Cursor 또는 기타 어시스턴트에 붙여넣을 수 있습니다.
목표는 어시스턴트를 대체하는 것이 아닙니다. 목표는 어시스턴트에게 더 작고 관련성 높은 시작점을 제공하는 것입니다.
로컬 우선이 중요한 이유
이러한 종류의 도구에서는 개인정보 보호(privacy)와 예측 가능성(predictability)이 중요합니다.
Context Prism은 외부 API를 호출하지 않고, 노트 콘텐츠를 어디로도 전송하지 않으며, 임베딩 서비스(embedding service)를 필요로 하지 않습니다. Obsidian 플러그인 API를 통해 Markdown 파일을 읽고 로컬에서 순위를 생성합니다.
그러한 설계에는 트레이드오프 (tradeoffs)가 있습니다. 로컬 어휘 검색 (Local lexical retrieval)은 임베딩 기반 검색 (embedding-based search)만큼 의미론적으로 강력하지는 않지만, 빠르고, 설명 가능하며, 실행 비용이 저렴하고, 신뢰하기 더 쉽습니다.
노트 작성 워크플로우 (workflow)에서는 이러한 속성들이 중요합니다.
랭킹 접근 방식 (Ranking approach)
현재의 랭킹 시스템은 다음과 같은 여러 가벼운 신호들을 결합합니다:
- TF-IDF 코사인 유사도 (TF-IDF cosine similarity)
- BM25 방식의 어휘 점수 산정 (BM25-style lexical scoring)
- 제목 및 별칭 일치 (title and alias matches)
- 헤딩 일치 (heading matches)
- 설정 가능한 메타데이터 가중치 (configurable metadata weighting)
- 폴더 포함/제외 필터 (folder include/exclude filters)
- 다국어 불용어 프로필 (multilingual stopword profiles)
각 후보는 왜 선택되었는지에 대한 짧은 설명을 포함합니다. 이는 검색 도구가 블랙박스 (black box)처럼 동작해서는 안 되기 때문에 중요합니다. 만약 특정 노트가 팩 (pack)에 포함되었다면, 사용자는 그 이유를 이해할 수 있어야 합니다.
다국어 보관함 (Multilingual vaults)
많은 실제 보관함 (vaults)은 순수하게 영어로만 되어 있지 않습니다. 제 보관함도 마찬가지입니다.
Context Prism은 다음과 같은 다양한 언어 프로필을 지원합니다:
- 영어 (English)
- 스페인어 (Spanish)
- 프랑스어 (French)
- 독일어 (German)
- 이탈리아어 (Italian)
- 포르투갈어 (Portuguese)
- 다국어 모드 (multilingual mode)
다국어 레이어는 여전히 어휘적 (lexical)입니다. 노트를 번역하거나 의미론적 임베딩 (semantic embeddings)을 사용하지 않습니다. 목표는 흔한 단어들로부터 발생하는 명백한 노이즈를 줄이고, 혼합 언어 보관함을 더 사용하기 쉽게 만드는 것입니다.
토큰 인식 컨텍스트 팩 (Token-aware context packs)
컨텍스트 팩에는 대략적인 토큰 (token) 추정치가 포함됩니다.
이것이 모든 모델을 위한 완벽한 토크나이저 (tokenizer)가 되려는 것은 아닙니다. 이는 다음과 같은 간단한 질문에 답하는 데 도움이 되는 실용적인 근사치입니다:
내가 지금 작고 집중된 팩을 붙여넣으려는 것인가, 아니면 방대한 양의 불필요한 컨텍스트를 붙여넣으려는 것인가?
AI 워크플로우에서 이 차이는 매우 중요합니다.
수동 연결은 여전히 유용합니다
주요 사용 사례는 AI 컨텍스트 라우팅 (context routing)이지만, Context Prism은 수동 링크 검토 워크플로우도 포함하고 있습니다.
제안된 관련 노트를 검토하고 선택한 위키링크 (wiki-links)를 현재 노트에 삽입할 수 있습니다. 이를 통해 AI 어시스턴트와 함께 작업하지 않을 때도 이 플러그인을 유용하게 사용할 수 있습니다.
내가 배운 점
이것을 구축하면서 검색 품질 (retrieval quality)에 대해 더 신중하게 생각하게 되었습니다.
어려운 점은 단순히 공통된 단어가 포함된 노트를 찾는 것만이 아닙니다. 진짜 어려운 점은 사용자의 다음 행동에 실제로 유용한 노트를 순위 매기는 (ranking) 것입니다.
어떤 노트는 짧은 인덱스 노트입니다. 어떤 것은 일반적인 템플릿을 가지고 있습니다. 어떤 것은 의미는 다르지만 메타데이터(metadata)만 공유하기도 합니다. 어떤 관련 노트들은 정확히 같은 표현을 사용하지 않고도 현재 주제를 언급하기도 합니다.
이로 인해 검색 (retrieval)은 알고리즘적인 문제인 동시에 제품 (product)의 문제이기도 합니다.
피드백을 받고 싶은 부분
저는 특히 Obsidian을 AI 어시스턴트와 함께 사용하는 분들의 피드백에 관심이 많습니다.
유용한 피드백은 다음과 같습니다:
- 수동으로 복사했을 법한 노트들을 제대로 찾아내나요?
- 중요한 컨텍스트 (context)를 놓치고 있나요?
- 관련 없는 노트가 너무 높은 순위로 매겨지나요?
- 추출된 스니펫 (snippets)이 어시스턴트에게 충분히 유용한가요?
- 토큰 (token) 추정치가 이해하기 쉬운가요?
- 검색을 더 쉽게 조정 (tune)하려면 어떤 설정이 필요할까요?
특히 순위 매기기 (ranking) 문제의 경우, 합성 데이터 (synthetic)나 편집된 (redacted) 예시가 있다면 이상적입니다.
링크
커뮤니티 디렉토리: https://community.obsidian.md/plugins/context-prism
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기