- Team : Chainers
- Korea IT Academy (KDT, Ministry of Employment and Labor)
- Independent Researchers, Republic of Korea
본 프로젝트의 핵심 알고리즘은 다음 논문으로 공개되어 있습니다 (Zenodo, CC BY 4.0).
- 제목 : Tri-CHEF: Complex-Hermitian Embedding Fusion for Korean Multimodal Retrieval
- 저자 : Young-Sang Song*, Hwon Lee, Ju Yeon Jang, Young Jin Hwang, Tae Yoon Lee, Jeong Hye Gim.
- 소속 : Team Chainers, Korea IT Academy (KDT, Ministry of Employment and Labor), Independent Researchers.
- 저널 : Zenodo, May 2026. https://doi.org/10.5281/zenodo.20034370
| 항목 | 값 |
|---|---|
| Concept DOI (인용 권장, 항상 최신 버전) | 10.5281/zenodo.20034370 |
| Latest Record URL | https://zenodo.org/records/20046344 |
| 현재 라이선스 | CC BY 4.0 (논문) |
| 항목 | v1.1 (latest) | v1.0 |
|---|---|---|
| Version DOI | 10.5281/zenodo.20046344 |
10.5281/zenodo.20034371 |
| Record URL | https://zenodo.org/records/20046344 | https://zenodo.org/records/20034371 |
| PDF (영문) | Tri-CHEF_paper_v1.1.pdf (12 pp) |
Tri-CHEF_paper.pdf (12 pp) |
| PDF (국문) | Tri-CHEF_paper_Korean_v1.1.pdf (13 pp) |
Tri-CHEF_paper_Korean.pdf (13 pp) |
| 게재일 | 2026-05-06 | 2026-05-06 |
| 비고 | 모든 페이지 푸터에 DOI/라이선스 표시 | 최초 게재 |
본문 콘텐츠와 그림/표 레이아웃, 페이지 분할은 v1.0 = v1.1 바이트 단위로 동일합니다 (v1.1은 v1.0 PDF에 페이지 푸터만 오버레이).
@misc{trichef2026,
title = {Tri-CHEF: Complex-Hermitian Embedding Fusion for Korean Multimodal Retrieval},
author = {Song, Young-Sang and Lee, Hwon and Jang, Ju Yeon and Hwang, Young Jin and Lee, Tae Yoon and Gim, Jeong Hye},
year = {2026},
month = may,
publisher = {Zenodo},
version = {1.1},
doi = {10.5281/zenodo.20034370},
url = {https://zenodo.org/records/20046344},
note = {Preprint, CC BY 4.0. Concept DOI resolves to the latest version.}
}Song, Y.-S., Lee, H., Jang, J. Y., Hwang, Y. J., Lee, T. Y., & Gim, J. H. (2026). Tri-CHEF: Complex-Hermitian Embedding Fusion for Korean Multimodal Retrieval (Version 1.1) [Preprint]. Zenodo. https://doi.org/10.5281/zenodo.20034370
인용 권장: 위 BibTeX/APA 모두 Concept DOI (
10.5281/zenodo.20034370) 를 사용합니다. 이 DOI는 항상 최신 버전으로 자동 리졸브되므로 향후 v1.2, v2.0 등 추가 게재 시에도 별도 수정이 필요 없습니다. 특정 버전을 못박을 때만 Version DOI(10.5281/zenodo.20046344등)를 사용하세요.
GitHub은 저장소 루트의 CITATION.cff 를 자동 인식하여 우측 상단에 "Cite this repository" 버튼을 표시합니다.
로컬 파일을 내용으로 찾는 AI 데스크탑 검색 앱
DB_insight는 PC에 저장된 문서·이미지·영상·음성·음악 파일을 자연어 의미 검색으로 찾아주는 로컬 AI 데스크탑 앱입니다.
파일을 저장할 당시 이름이나 위치를 정확히 기억하지 못해도, 파일 내용에 대한 설명만으로 원하는 파일을 찾을 수 있도록 하는 것이 목표입니다.
| 한계 | 설명 |
|---|---|
| 파일명 의존 | "계약서최종진짜최종.docx" 같은 이름을 정확히 알아야 검색 가능 |
| 내용 검색 불가 | 문서 내부 텍스트만 일부 지원, 이미지·영상·음악은 전혀 검색 안 됨 |
| 의미 이해 없음 | "작년 여름 워크샵 발표자료" 같은 문장으로 검색 불가 |
| 멀티미디어 한계 | 영상·오디오는 파일 이름이나 메타데이터로만 구분 가능 |
| 비정형 파일 | 스캔 PDF, 이미지 속 텍스트는 완전히 사각지대 |
| 장점 | 설명 |
|---|---|
| 5개 도메인 통합 검색 | 문서(Doc) / 이미지(Img) / 영상(Movie) / 녹음(Rec) / 음악(BGM) 을 하나의 검색창에서 |
| 의미 기반 검색 | "파란 하늘 사진", "회의에서 예산 얘기 나온 영상" 같은 자연어로 검색 |
| Tri-CHEF 멀티모달 퓨전 | SigLIP2(시각) + BGE-M3(텍스트) + DINOv2(구조)를 복소 공간에서 결합, 어느 한 모델이 점수를 독점하지 않도록 설계 |
| 완전 로컬 동작 | 인터넷 연결 불필요. 파일이 외부 서버로 전송되지 않음 |
| Obsidian AI 모드 | 파일 내용을 기반으로 로컬 LLM(Ollama)과 대화하며 질문·요약·분석 가능 |
| 단일 EXE 배포 | 설치 없이 포터블 exe 하나로 실행 |
기대 효과:
- 파일 정리를 안 해도 → 내용으로 찾을 수 있음
- 회의록·계약서·발표자료를 메모 없이 → 기억나는 내용만으로 검색
- 대용량 로컬 파일 아카이브를 → AI와 대화하며 탐색
"작년 3분기 매출 보고서 어디 있더라?"
"파란 하늘 나온 사진 있었는데..."
"회의 녹음에서 예산 얘기 나온 부분 찾아줘"
위처럼 기억나는 내용만 입력하면, DB_insight가 PC에 저장된 파일 중 가장 관련 있는 것들을 찾아줍니다.
파일 이름? 몰라도 됩니다. 저장 위치? 몰라도 됩니다.
임베딩이란 파일의 내용을 AI가 이해할 수 있는 숫자 벡터로 변환하는 과정입니다. 한 번만 인덱싱하면 이후 검색은 즉시 처리됩니다.
| 도메인 | 파일 형식 | 처리 방식 |
|---|---|---|
| Doc | PDF, DOCX, TXT, HWP 등 | 텍스트 청크 분할 → BGE-M3 임베딩 + 스파스 인덱스 |
| Img | JPG, PNG, WEBP 등 | SigLIP2 비주얼 임베딩 + BLIP/Qwen 캡션 생성 → BGE-M3 |
| Movie | MP4, MKV, AVI 등 | 장면 분할 프레임 → SigLIP2 + Whisper STT → BGE-M3 |
| Rec | MP3, WAV, M4A 등 (음성) | Whisper STT → BGE-M3 텍스트 임베딩 |
| BGM | MP3, FLAC, WAV 등 (음악) | Chromaprint 핑거프린트 + CLAP 오디오 임베딩 + librosa 특징 |
세 인코더(SigLIP2 · BGE-M3 · DINOv2)를 복소(Complex) 임베딩의 직교 축에 배정하고, 에르미트(Hermitian) 절대값으로 결합합니다. 이를 통해 어느 한 인코더가 결과를 독점하는 문제를 방지합니다.
Query ──► SigLIP2 (시각축) ─┐
──► BGE-M3 (언어축) ─┼─► Complex Hermitian Fusion ──► 유사도 점수
──► DINOv2 (구조축) ─┘
/search 페이지에서 자연어 쿼리를 입력하면 5개 도메인을 동시에 검색합니다.
주요 기능:
- 도메인 필터: Doc / Img / Movie / Rec / BGM 선택 검색
- 점수 상세 보기: 시각·언어·구조 축별 기여도 확인 (
ScoreBreakdown) - 위치 정보: 파일 경로 및 저장 위치 표시
- 파일 미리보기: 이미지 썸네일, 문서 청크 텍스트, 영상 구간 정보
- 검색 기록: 최근 검색어 자동 저장
- 음성 입력: 마이크로 말하면 검색어 자동 입력 (Web Speech API)
/ai 페이지. 로컬 LLM(Ollama)과 대화하듯 파일을 탐색·분석합니다.
동작 흐름 (LangGraph 파이프라인):
사용자 질문
│
▼
① Intent 분석 — 질문 의도 파악, 파일명 키워드 / 내용 키워드 추출
│
▼
② Candidate 검색 — ChromaDB에서 관련 파일 후보 Top-K 추출
│
▼
③ 파일 스캔 — 각 파일 내용을 실제로 읽어 키워드 매칭 확인
│
▼
④ 소스 선택 — 실제로 관련 있는 파일만 필터링
│
▼
⑤ 답변 생성 — 파일 전체 내용을 컨텍스트로 Ollama LLM 스트리밍 응답
주요 특징:
- 멀티턴 대화: 이전 대화 내용을 기억하며 추가 질문 가능 (LangGraph MemorySaver + thread_id)
- 실시간 스트리밍: 답변이 토큰 단위로 실시간 출력
- 파일 카드: 우측 패널에 후보 파일과 스캔 상태를 카드 형태로 표시
- 출처 표시: 답변에 사용된 파일 명시 (
[출처1],[출처2]형식) - 완전 로컬: Ollama 기반, 인터넷 불필요
| 항목 | 버전 | 비고 |
|---|---|---|
| Node.js | 18+ | https://nodejs.org |
| Python | 3.10+ | PATH 등록 필수 |
| Git | 최신 | https://git-scm.com |
| Ollama | 최신 | https://ollama.com — AI 모드 사용 시 필요 |
| CUDA | 12.4 (선택) | GPU 가속 (RTX 30/40 권장) |
Ollama 모델 설치 (AI 모드 사용 시):
ollama pull gemma3:12b (8.1GB)- 기존의 3b 모델 제거 방법 : 윈도우 cmd 창에서 'ollama rm qwen2.5:3b' 실행
- 새로운 7b 모델 다운 방법 : 윈도우 cmd 창에서 'ollama pull qwen2.5:7b' 실행
Python 패키지 설치:
# GPU (NVIDIA CUDA 12.4)
pip install torch==2.6.0+cu124 torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124
# CPU only
pip install torch torchvision torchaudio
# 나머지 패키지
pip install -r App/backend/requirements.txt빌드 전 DB_insight 앱이 실행 중이라면 반드시 먼저 종료하세요. 앱이 켜진 채로 빌드하면
out/폴더가 잠겨 실패합니다.
git clone <repo-url>
cd DB_insight/App/frontend
npm install
npm run dist빌드 결과물: App/frontend/out/DB_insight 0.1.0.exe
| 오류 | 원인 | 해결 |
|---|---|---|
EBUSY: resource busy or locked |
앱 실행 중 / Windows Defender 스캔 중 | 앱 종료 후 재시도. 반복 시 out/ 폴더를 Defender 제외 목록에 추가 |
클라이언트가 필요한 권한을 가지고 있지 않습니다 |
Windows 개발자 모드 비활성화 | 설정 → 개인 정보 및 보안 → 개발자용 →개발자 모드 ON 후 재시도 |
App/frontend/out/DB_insight 0.1.0.exe 더블클릭
- Flask 백엔드 자동 시작 (포트 5001)
- React UI 자동 로드
- 별도 터미널 실행 불필요
개발 모드 실행 (소스 수정 시):
# 가상환경 git
source .venv/Scripts/activate
# 터미널 1 — Flask 백엔드
cd App/backend
python app.py
# → http://127.0.0.1:5001
# 터미널 2 — React + Electron
cd App/frontend
npm run electron:devDB_insight/
├── App/
│ ├── frontend/ ← React + Vite + Electron 앱
│ │ ├── electron/
│ │ │ ├── main.cjs ← Electron 메인 프로세스 (백엔드 자동 실행 포함)
│ │ │ └── preload.cjs ← contextBridge API 노출 (zoom, 폴더 선택 등)
│ │ ├── src/
│ │ │ ├── pages/
│ │ │ │ ├── LandingLogin.jsx ← 로그인 화면
│ │ │ │ ├── InitialSetup.jsx ← 최초 비밀번호 설정
│ │ │ │ ├── MainSearch.jsx ← 메인 검색 페이지
│ │ │ │ ├── MainAI.jsx ← AI 모드 (Obsidian AI)
│ │ │ │ ├── DataIndexing.jsx ← 파일 인덱싱 관리
│ │ │ │ ├── Settings.jsx ← 설정 페이지
│ │ │ │ └── TriChefSearch.jsx ← Tri-CHEF 전용 검색
│ │ │ ├── components/
│ │ │ │ ├── AnimatedOrb.jsx ← WebGL 파티클 오브 (Three.js)
│ │ │ │ ├── SearchSidebar.jsx ← 좌측 네비게이션 사이드바
│ │ │ │ ├── PageSidebar.jsx ← 페이지별 보조 사이드바
│ │ │ │ └── search/
│ │ │ │ ├── DomainFilter.jsx ← 도메인 필터 UI
│ │ │ │ ├── ScoreBreakdown.jsx ← 점수 상세 표시
│ │ │ │ └── LocationBadge.jsx ← 파일 위치 표시
│ │ │ ├── hooks/
│ │ │ │ ├── useSpeechRecognition.js ← 음성 입력 훅
│ │ │ │ └── useMicLevelRef.js ← 마이크 레벨 측정 훅
│ │ │ ├── context/
│ │ │ │ ├── SidebarContext.jsx ← 사이드바 열림 상태 전역 관리
│ │ │ │ └── ScaleContext.jsx ← UI 스케일(줌) 전역 관리
│ │ │ └── api.js ← API_BASE URL 설정
│ │ ├── package.json
│ │ └── out/ ← 빌드 결과물 (DB_insight 0.1.0.exe)
│ │
│ └── backend/ ← Flask 백엔드 (Python)
│ ├── app.py ← Flask 앱 진입점, 라우트 등록
│ ├── config.py ← 포트·경로·모델 설정
│ ├── routes/
│ │ ├── search.py ← GET /api/search (자연어 검색)
│ │ ├── aimode.py ← POST /api/aimode/chat (LangGraph AI 모드)
│ │ ├── index.py ← POST /api/index/scan, start, stop
│ │ ├── files.py ← GET /api/files/indexed, detail, open
│ │ ├── auth.py ← POST /api/auth/setup, verify, reset
│ │ ├── history.py ← GET/DELETE /api/history
│ │ ├── trichef.py ← Tri-CHEF 검색 API
│ │ ├── bgm.py ← BGM 도메인 검색 API
│ │ └── registry.py ← 파일 레지스트리 관리
│ ├── embedders/
│ │ ├── doc.py ← 문서 임베딩 (PDF, DOCX 등)
│ │ ├── image.py ← 이미지 임베딩
│ │ ├── video.py ← 영상 임베딩 + STT
│ │ ├── audio.py ← 음성 임베딩 + STT
│ │ └── trichef/ ← Tri-CHEF 멀티모달 임베딩 모듈
│ │ ├── siglip2_re.py ← SigLIP2 시각 인코더
│ │ ├── bgem3_sparse.py ← BGE-M3 언어 인코더 + 스파스
│ │ ├── dinov2_z.py ← DINOv2 구조 인코더
│ │ ├── doc_ingest.py ← 문서 청크 분할 및 인제스트
│ │ └── incremental_runner.py ← 증분 인덱싱 실행기
│ ├── services/
│ │ ├── trichef/
│ │ │ ├── unified_engine.py ← Tri-CHEF 통합 검색 엔진
│ │ │ ├── calibration.py ← 도메인별 임계값 캘리브레이션
│ │ │ └── asf_filter.py ← 적응형 유사도 필터
│ │ ├── bgm/
│ │ │ ├── search_engine.py ← BGM 하이브리드 검색
│ │ │ ├── clap_encoder.py ← CLAP 오디오 임베딩
│ │ │ ├── chromaprint.py ← 음악 핑거프린트
│ │ │ └── nlp_query.py ← BGM 자연어 쿼리 처리
│ │ ├── query_expand.py ← 쿼리 확장 (동의어·한영 변환)
│ │ └── job_control.py ← 임베딩 작업 큐 관리
│ ├── db/
│ │ ├── init_db.py ← SQLite 스키마 초기화
│ │ └── vector_store.py ← ChromaDB 인터페이스
│ └── requirements.txt ← Python 패키지 목록
│
└── Data/
├── extracted_DB/ ← 텍스트 캐시 (STT, OCR, 캡션)
└── embedded_DB/ ← 벡터 캐시 (.npy) + ChromaDB + 캘리브레이션
┌─────────────────────────────────────────────────────────────────┐
│ DB_insight Desktop App │
│ │
│ ┌─────────────────────┐ ┌──────────────────────────────┐ │
│ │ Electron (Node) │ │ Flask Backend (Python) │ │
│ │ │ HTTP │ │ │
│ │ React + Vite UI │◄────►│ /api/search │ │
│ │ ├─ MainSearch │ │ /api/aimode/chat (SSE) │ │
│ │ ├─ MainAI │ │ /api/index/* │ │
│ │ ├─ DataIndexing │ │ /api/files/* │ │
│ │ └─ Settings │ │ /api/auth/* │ │
│ │ │ │ │ │
│ │ Three.js AnimatedOrb │ ┌────────────────────────┐ │ │
│ │ Web Speech API │ │ │ Tri-CHEF Engine │ │ │
│ └─────────────────────┘ │ │ SigLIP2 + BGE-M3 │ │ │
│ │ │ + DINOv2 → Hermitian │ │ │
│ │ └────────────────────────┘ │ │
│ │ │ │
│ │ ┌────────────────────────┐ │ │
│ │ │ LangGraph AI Mode │ │ │
│ │ │ Intent → Search → │ │ │
│ │ │ Scan → Select → │ │ │
│ │ │ Generate (Ollama) │ │ │
│ │ └────────────────────────┘ │ │
│ │ │ │
│ │ ┌────────────────────────┐ │ │
│ │ │ BGM Engine │ │ │
│ │ │ Chromaprint + CLAP │ │ │
│ │ │ + librosa │ │ │
│ │ └────────────────────────┘ │ │
│ │ │ │
│ │ SQLite ◄─► ChromaDB │ │
│ └──────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
로컬 파일 시스템 (인터넷 연결 불필요)
데이터 흐름:
파일 추가
│
▼
[임베딩 파이프라인]
├─ Doc → 텍스트 청크 → BGE-M3 → ChromaDB
├─ Img → SigLIP2 + BLIP 캡션 → ChromaDB
├─ Movie→ 장면 프레임 + Whisper STT → ChromaDB
├─ Rec → Whisper STT → BGE-M3 → ChromaDB
└─ BGM → Chromaprint + CLAP → BGM Index
│
▼
[검색 시]
자연어 쿼리 → 쿼리 확장 → Tri-CHEF 유사도 계산
→ 캘리브레이션 필터링 → 결과 반환
본 저장소에 포함된 코드 및 모든 출력·이미지 결과물은 저작권법에 의해 보호됩니다. 저작권자(Team Chainers)의 명시적 허가 없이 본 자료의 전부 또는 일부를 복제, 배포, 수정, 상업적으로 이용하는 행위를 금합니다.
© 2026. All rights reserved.
Please contact team leader, e-mail : sjowun@gmail.com.
| 역할 | 이름 | 연락처 |
|---|---|---|
| Team Leader | 송영상 (Young-Sang SONG) | Project Manager |
| Team Member | 이훤 (Hwon LEE) | Technical Master |
| Team Member | 장주연 (Ju Yeon JANG) | Technical Support & Security |
| Team Member | 황영진 (Young Jin HWANG) | Technical Support |
| Team Member | 이태윤 (Tae Yoon LEE) | Technical Support |
| Team Member | 김정혜 (Jeong Hye GIM) | Technical Support |