본문으로 건너뛰기

© 2026 Molayo

Zenn헤드라인2026. 06. 22. 21:17

온디바이스 AI 검색의 정밀도를 높이기 위한 비망록: 30자 제한과 타이틀 부스트 구현 | Exa-Vision 일기 #3

요약

Flutter 기반 온디바이스 AI 검색 앱 개발 과정에서 검색 정밀도를 높이기 위해 적용한 세 가지 최적화 기법과 릴리스 빌드 크래시 해결 방법을 다룹니다.

핵심 포인트

  • 30자 미만 텍스트의 벡터화 제외로 검색 노이즈 방지
  • 타이틀 반복 삽입을 통한 검색 가중치(Title Boost) 부여
  • 키워드 일치와 AI 스코어의 60:40 배분으로 균형 확보
  • 난독화로 인한 ObjectBox 크래시를 @pragma으로 해결

서론

안녕하세요, 유스케입니다.

Flutter로 온디바이스 AI 검색 앱을 개발하고 있습니다.

이번에는 AI 검색의 정밀도를 실용적인 수준까지 끌어올리기 위해 제가 진행한 "조정 기록"을 개인적인 비망록으로 남깁니다.

과제: 검색 결과가 "야키니쿠"로 오염됨

개발 중인 실증 테스트에서, "컨로 적합표 (PDF)"를 검색했을 때 AI의 연상 작용이 너무 강하게 작용하여 "어제 먹은 야키니쿠" 메모가 1위로 나오는 현상이 발생했습니다.

AI (MiniLM)는 "불"이라는 개념으로 두 가지를 연결해 버린 것일까요? 실용적인 도구로서는 노이즈에 불과합니다. 이를 해결하기 위해 다음과 같은 로직을 도입했습니다.

구현한 3가지 조율 (비망록)

1. 30자 미만을 벡터화에서 제외하기

너무 짧은 문장은 AI가 그 한마디에 과도하게 반응하기 때문에 검색 결과를 오염시키는 원인이 됩니다.

대책: 30자 미만의 텍스트는 embedding을 생성하지 않고, 키워드 일치로만 처리.

결과: 단편적인 메모가 상위를 독점하는 것을 방지할 수 있었다.

2. 타이틀의 5배 부스트

AI에 전달하는 문장 구조 내에서, 타이틀을 5번 반복하도록 처리를 변경.

목적: AI에게 "이 문장의 주인공은 타이틀 (파일명)이다"라고 강조하기 위해.

구현 이미지: [TITLE]: 이름 \n 을 5번 반복하여 본문과 결합.

3. 스코어 배분의 고정 (60:40)

"키워드의 정확한 일치"와 "AI의 모호한 연상" 사이의 균형을 조정.

결론: 키워드 일치(60%), AI 스코어(40%)의 배분이 가장 "원했던 결과"에 가까워졌다.

【추가】 릴리스 버전에서의 "지능 상실" 에러 대처

운영용 빌드 (AAB)에서만 AI 검색이 Invalid entrypoint (10002)로 인해 크래시(crash)되는 문제에 직면.

원인: 난독화(obfuscation)로 인해 ObjectBox의 HNSW 인덱스용 변수가 변경된 것.

해결책:

Entity의 모든 항목에 @pragma('vm:entry-point')를 부여.

objectbox-model.json을 물리적으로 삭제하고 재구축.

이로써 드디어 릴리스 버전에서도 검색 기능이 복구되었다.

마치며

현재 Version 4를 심사 제출 중입니다.

Drive 상에서의 편집을 감지하여 기억을 자동으로 업데이트하는 기능을 포함했습니다.

Google Play의 공개 요건 (테스터 20명)에 대해서는 아직 갈 길이 멉니다.

혹시 이 프라이버시 특화형 검색 경험에 관심이 있는 분이 계신다면, 아래 사이트를 통해 협력해 주시면 감사하겠습니다.

👉 [소개 사이트: https://gitmame00.github.io/ ]

Discussion

AI 자동 생성 콘텐츠

본 콘텐츠는 Zenn AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0