introfini/ZotSeek
요약
ZotSeek은 키워드가 아닌 의미 기반으로 유사 논문을 검색하는 로컬 환경 연구 도구입니다. AI 에이전트 접근을 위한 MCP 서버가 추가되었으며, 인용 출처 감사(citefact) 기능과 같은 학술 연구 워크플로우를 강화했습니다. 모든 데이터 처리가 기기 내에서 이루어져 보안성이 높습니다.
핵심 포인트
- 키워드 대신 논문의 의미로 유사 논문 검색 가능
- AI 에이전트 연동을 위한 MCP 서버 탑재 (Claude Code, Codex 등)
- 인용 출처의 정확성 및 근거를 감사하는 citefact 기능 제공
- 모든 데이터 처리가 100% 로컬 환경에서 이루어져 보안성이 높음
키워드가 아닌 **의미(meaning)**로 유사 논문을 찾으세요. 데이터가 기기를 벗어나지 않는 100% 로컬 환경입니다. 이제 AI 에이전트를 위한 내장 MCP server가 추가되었습니다.
상태:✅ 안정화된 릴리스 · Zotero 8, 9 & 10 · Transformers.js를 로컬에서 실행
새로운 기능:🤖 MCP 서버 빌드 탑재— Claude Code, Codex 및 모든 MCP 클라이언트는 라이브러리를 검색하고 매칭된 PDF 페이지로 바로 연결되는 링크와 함께 논문을 인용할 수 있습니다. 완전히 로컬이며, 읽기 전용(read-only)이고 선택적입니다. 한 줄로 설정하세요 →
같은 작성자의 새로운 기능:🔎citefact— Zotero 라이브러리를 기반으로 원고를 감사(audit)합니다: 인용된 출처가 존재하는지, 따온 구절이 정확한지, 주장이 근거가 되는지를 확인합니다.
- 🔒
100% 로컬 환경- 클라우드로 데이터 전송 없음, 완전히 오프라인에서 작동 - 🧠
진정한 의미 기반 검색(True Semantic Search)- 키워드가 아닌 논문의 의미로 찾기 - 🤖
AI 에이전트 접근 (MCP)- Claude Code 및 기타 MCP 클라이언트가 라이브러리를 검색할 수 있도록 합니다. 완전히 로컬이며 선택적입니다 (문서 참조) - 🔍
유사 문서 찾기(Find Similar Documents)- 모든 논문을 마우스 오른쪽 버튼으로 클릭 → 관련 연구를 발견하세요 - 📖
PDF 선택 영역에서 검색(Search from PDF Selection)- 읽는 동안 텍스트를 선택 → 마우스 오른쪽 버튼 클릭 → 해당 개념에 대한 문서를 찾으세요 - 🔎
자연어 검색(Natural Language Search)-
매치된 구절 미리보기(Matched-Passage Preview) - 결과에 마우스를 올리면 검색어 용어가 강조 표시된 정확한 구절을 읽을 수 있습니다. - 📍
구절 수준 위치(Passage-Level Location) - 전체 문서 모드에서 정확한 페이지 및 단락으로 이동할 수 있습니다. - ✅
결과 다중 선택(Multi-Select in Results) - 여러 검색 결과를 선택하고 마우스 오른쪽 버튼을 클릭하여 컬렉션에 추가할 수 있습니다. - 📁
결과를 컬렉션으로 저장(Save Results as Collection) - 한 번의 클릭으로 전체 결과 세트를 새로운 Zotero 컬렉션에 저장하여, 나중에 검색을 다시 실행하지 않고도 목록을 다시 확인할 수 있습니다. - 🧩
선택 가능한 임베딩 모델(Selectable Embedding Models) - 다국어 옵션을 포함한 4가지 엄선된 로컬 모델 중에서 선택할 수 있으며, 번들링되지 않은 모델은 Hugging Face에서 기기에 한 번 다운로드합니다. - 🖥️
로컬 추론 서버 (Local Inference Server) (선택 사항) - 동일한 장치에서 LM Studio, Ollama, llama.cpp 또는 vLLM을 사용하여 임베딩 모델을 서비스하여 네이티브 GPU 속도를 얻을 수 있습니다: OpenAI 호환 API, localhost 전용입니다. - 🔄
자동 인덱싱(Auto-Index) - 라이브러리에 새로운 논문을 추가할 때 자동으로 인덱싱합니다. - 👥
그룹 라이브러리 그룹화 (Group Libraries) (선택 사항) - Index 범위 설정을 통해 Zotero 그룹 라이브러리로 인덱싱 및 검색을 확장할 수 있습니다. - 🗑️
자동 정리(Auto-Cleanup) - 항목이 삭제되거나 휴지통에 버려질 때 임베딩이 자동으로 제거됩니다. - 🚫
태그 기반 제외(Tag-Based Exclusion) - zotseek-exclude 태그가 지정된 항목은 인덱싱 중에 건너뛸 수 있습니다. - 📊
인덱싱 상태 열(Indexing Status Column) - 항목 목록의
| 측면 | 보장 사항 |
|---|---|
| AI 모델 | 기본 번들 모델 (~130MB); 선택적 모델은 필요할 때 Hugging Face에서 다운로드 — API 키, 구독 불필요 |
| 처리 과정 | 모든 AI 추론(inference)은 로컬 CPU/GPU에서 실행됨 |
| 사용자 논문 | 사용자 로컬 Zotero 라이브러리 항목만 인덱싱함 |
| 네트워크 | 로컬 추론 서버를 선택하지 않는 한 검색 또는 인덱싱에 대한 네트워크 요청 없음 |
| 저장 공간 | 임베딩(Embeddings)은 Zotero 데이터 폴더의 zotseek.sqlite에 로컬로 저장됨 |
| 오프라인 | 설치 후 (또는 선택적 추론 서버가 시작된 후) 완전히 오프라인으로 작동함 |
이것이 의미하는 바:
- 사용자의 연구 자료는 절대 기기를 벗어나지 않음
- 클라우드 서비스, API 키, 구독 불필요
- 원격 측정(telemetry) 또는 사용량 추적 없음
- 플러그인을 제거하면 모든 ZotSeek 데이터가 삭제됨
선택적 로컬 추론 서버: 기본 설정은 위에서 설명한 완전히 인프로세스(in-process) 엔진이며, 이 엔진은 네트워크 요청을 전혀 수행하지 않습니다. 만약 로컬 추론 서버(LM Studio, Ollama, llama.cpp 또는 vLLM)를 추가하기로 선택한다면, 보장 사항이 “네트워크 코드가 존재하지 않음”에서 “네트워크 코드가 기기를 벗어날 수 없음을 증명함”으로 바뀝니다: 모든 요청은 요청 시점에 127.0.0.1, localhost 및 [::1]에 대한 허용 목록(allow-list)과 비교하여 검증됩니다. 이를 재정의할 선호도가 없으며, 루프백 주소(loopback address)가 아닌 주소로 리디렉션되는 것은 따라가지 않고 거부되며, 클라우드 또는 원격 엔드포인트는 설계상 지원되지 않습니다. 이는 선택 사항이며 기본적으로 비활성화되어 있습니다.
클릭하여 확장
노트(Notes)는 초록(abstracts) 및 PDF 텍스트와 함께 검색됩니다. '섹션' 열은 각 일치 항목이 어디에서 왔는지 보여주며, 노트에는 특정 페이지가 지정되지 않습니다.
빈 검색 상자를 클릭하면 이전에 실행했던 쿼리(query)를 다시 불러올 수 있습니다.
flowchart TD
subgraph INDEX["1️⃣ 인덱싱"]
A[📄 논문] --> B[🤖 AI 모델] --> C[768개의 숫자]
...
작동 방식: 각 논문은 그 의미를 포착하는 768개의 숫자로 변환됩니다. 검색하려면, 사용자의 쿼리를 숫자로 변환하고 유사한 숫자를 가진 논문을 찾습니다.
"현재 컬렉션 인덱싱(Index Current Collection)" 또는 "전체 라이브러리 업데이트(Update Entire Library)\
각 논문별로:
- 제목 + 초록 추출 (Abstract 모드)
— 또는 —
...
소요 시간: 청크당 약 3초
마우스 오른쪽 버튼을 클릭 → "유사 문서 찾기(Find Similar Documents)":
1. 선택된 논문의 임베딩 로드
2. 인덱싱된 모든 논문과 비교 (메모리에 캐시됨)
3. 의미적 유사도에 따라 순위 지정
...
소요 시간: (캐시 사용 시) 약 70ms
이 플러그인은 의미 검색(semantic search) (AI 임베딩)과 Zotero의 키워드 검색을 **Reciprocal Rank Fusion (RRF)**을 사용하여 결합하여 최적의 결과를 제공합니다.
| 모드 | 가장 적합한 용도 | 작동 방식 |
|---|---|
🔗 하이브리드(Hybrid) (권장) | 대부분의 검색 | 의미적 결과 + 키워드 결과를 결합 |
🧠 의미 기반(Semantic Only) | 개념적 질의 | 의미에 따라 관련 논문을 찾음 |
🔤 키워드 전용(Keyword Only) | 저자/연도 검색, 정확한 구문 | 제목, 저자, 연도, 태그, PDF 텍스트 및 노트에 대한 Zotero 자체 검색; PDF 또는 노트 내의 일치 항목은 해당 논문에 기여된 것으로 간주함 |
| 질의 유형 | 순수 의미 기반(Pure Semantic) | 순수 키워드(Pure Keyword) | 하이브리드(Hybrid) |
|---|---|
| "AI에 대한 신뢰" | ✅ 좋음 | ❌ 미흡 | ✅ 좋음 |
| ... |
| 아이콘 | 의미 |
|---|---|
| 🔗 | 의미적 검색과 키워드 검색 모두에서 발견됨 (높은 확신도) |
| ... |
출처(Source) 열은 일치 항목이 어디서 왔는지 보여줍니다:
| 출처 | 의미 |
|---|---|
| 초록(Abstract) | 제목 + 초록 |
| ... |
노트는 페이지가 없으므로, 노트 결과는 위치(Location) 열을 비워두고 PDF 내부로 이동하는 대신 노트 자체를 엽니다.
결과 행에 마우스를 올리면 질의와 일치한 정확한 구절, 그 위치(페이지 및 단락), 섹션 유형 및 일치 점수가 담긴 툴팁이 표시됩니다. 이를 통해 논문을 열어보지 않고도 결과가 관련성이 있는지 판단할 수 있습니다. 키워드 및 하이브리드 검색에서는 질의어가 구절 내에 강조 표시되며, 미리보기는 첫 번째 일치 항목을 중심으로 중앙에 배치되어 관련 텍스트가 항상 보이게 합니다. (순수 의미 기반 검색은 강조할 문자 그대로의 용어가 없으므로, 하이라이팅 없이 구절이 표시됩니다.)
전체 문서(Full Document) 인덱싱 모드를 사용할 때, 두 가지 결과 보기 사이를 전환할 수 있습니다:
| 모드 | 결과 | 최적 사용처 |
|---|---|---|
| By Section (기본값) | 논문당 1개의 결과, 가장 잘 일치하는 섹션 및 해당 위치 표시 | 일치하는 논문 개요 |
| By Location | 정확한 페이지 및 단락과 함께 모든 일치하는 단락 | 특정 구절 찾기 |
By Section - 논문별로 모든 청크를 통합하여 최고 점수의 일치를 보여줍니다. Location 열은 해당 최적의 일치가 어디에서 발견되었는지(페이지 및 단락)를 보여주므로, 정확한 위치를 잃지 않으면서 논문당 다양한 결과를 얻을 수 있습니다:
By Location - 자체 점수와 함께 모든 일치하는 단락을 개별적으로 반환합니다:
By Location 모드에서 결과를 클릭하면 해당 일치가 발견된 정확한 페이지의 PDF가 열립니다.
최대 4개의 검색 쿼리를 결합하여 여러 주제의 교차점에 있는 논문을 찾으세요:
- 검색 필드 옆의 "+" 버튼을 클릭하여 더 많은 쿼리 추가 - 결과를 결합하기 위해 AND 또는 OR 선택 - AND 모드의 경우, 조합 공식을 선택하세요.
| 연산자 | 동작 방식 | 최적 사용처 |
|---|---|---|
| AND | 모든 쿼리에 일치하는 논문만 표시 | 주제 교차점 찾기 |
| OR | 어떤 쿼리든 일치할 수 있는 논문 표시 | 동의어 검색으로 검색 범위 넓히기 |
| AND 공식 | 작동 방식 | 사용 시점 |
|---|---|---|
| Minimum (기본값) | 쿼리 전반에 걸쳐 가장 낮은 점수 사용 | 엄격한 교차점이 필요할 때 |
| Product | 점수의 기하 평균 | 모든 쿼리에 걸친 균형 잡힌 관련성 |
| Average | 점수의 산술 평균 | 좀 더 관대한 일치도 매칭 |
예시:
- 검색 필드를 클릭하거나(비어 있는 상태에서 아래쪽 화살표를 누름) 빈 항목을 보려면 다음을 수행하세요.
- 목록에서 하나를 선택하여 상자에 다시 넣고 다시 실행합니다.
- 선택
검색 기록 지우기는 같은 드롭다운 메뉴에서 모든 기록을 잊게 합니다.
선호도에 따라 메인 검색 상자의 텍스트만 유지되므로, 이 목록은 재시작 후에도 남아 있습니다. 이전에 실행했던 쿼리를 다시 실행하면 두 번 나열되는 대신 맨 위로 이동하며, 한 번도 실행하지 않은 검색(입력했다가 삭제한 텍스트)은 목록에 절대 추가되지 않습니다.
| 모드 | 색인화되는 내용 | 가장 적합한 용도 |
|---|---|---|
| 초록 (Abstract) | 제목 + 초록 | 빠른 색인화, 간편한 설정 |
| 전문 문서 (Full Document) (기본값) | 섹션별로 분할된 PDF 콘텐츠 | 깊은 콘텐츠 검색, 더 나은 결과 보기 |
Zotero → 설정(Settings) → ZotSeek에서 구성하세요.
기본적으로 ZotSeek은 **내 라이브러리(My Library)**만 색인화합니다. Zotero 그룹 라이브러리를 사용하는 경우, 색인 범위(Index scope) 설정(자동 색인화 아래)을 통해 이를 포함할 수 있습니다:
| 범위 (Scope) | 색인화되는 내용 |
|---|---|
| 내 라이브러리 (My Library) (기본값) | 사용자 개인 라이브러리만 |
| 모든 라이브러리 | 개인 라이브러리 + 모든 그룹 라이브러리 |
이 범위는 대량 색인 업데이트(Update Index) 작업과 백그라운드 자동 색인화 모두에 적용됩니다. 한 번 색인화되면, 그룹 항목은 다른 논문처럼 검색 결과에 나타나며, 해당 라이브러리에서 열리는 링크가 제공됩니다. MCP/REST를 통한 검색도 library_key 매개변리를 사용하여 단일 라이브러리로 제한할 수 있습니다(docs/MCP.md 참조).
PDF가 포함된 논문의 경우, 청커는 다음과 같은 작업을 수행합니다:
- 정확한 페이지 번호와 함께 페이지별 텍스트 추출
- 각 페이지를 문단으로 분할
- 컨텍스트를 위해 각 청크에 제목을 접두사로 추가
참고문헌/서지 목록 섹션은 자동으로 필터링됩니다
검색 시, 어떤 청크라도 쿼리와 일치하면 해당 논문의 순위가 높게 책정됩니다(
, DOI 링크 - 참고문헌 섹션이 감지되면 인덱싱 중단
이는 검색 결과를 논문의 실제 내용에 집중하도록 유지합니다.
maxTokens 설정은 임베딩을 위해 텍스트가 어떻게 분할되는지를 제어합니다. 이는 목표치가 아니라 상한선이며, 청크는 단락 경계에서 분할되므로 더 작을 수 있습니다.
| 청크 크기 | 속도 | 검색 동작 |
|---|---|---|
| 500-800 | 빠름 (~0.5초/청크) | 높은 정밀도, 특정 구절 발견 |
| 2000 | 보통 (~3초/청크) | 균형 잡힘 (기본값) |
| 4000+ | 느림 | 높은 재현율, 광범위한 주제 발견 |
기본값: 2000 토큰. Firefox 140 이상은 더 큰 청크를 효율적으로 처리합니다.
권장 사항:
AI 자동 생성 콘텐츠
본 콘텐츠는 GitHub AI Coding Assistants의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기