HomeMemory: 가족들이 잊기 쉬운 사소한 것들을 위한 개인 메모장
요약
HomeMemory는 가족들이 일상에서 잊기 쉬운 사소한 물건의 위치나 문서의 만료일을 기록하고 추적하는 개인 메모리 어시스턴트입니다. 사진과 짧은 메모를 저장하면, 오픈 모델을 활용해 정보를 구조화하고 영어, 우르두어 등으로 질문하여 답변을 얻을 수 있습니다. Gemma 4와 EmbeddingGemma를 사용하여 로컬에서 작동하며, MongoDB Atlas Vector Search로 기억들을 관리합니다.
핵심 포인트
- 일상의 사소한 물건 위치 및 만료일 추적 기능 제공
- 사진 분석 및 정보 추출에 오픈 모델(Open Model) 활용
- Gemma 4와 EmbeddingGemma를 이용해 로컬 환경에서 구동
- MongoDB Atlas Vector Search로 기억 데이터를 벡터화하여 저장
이 글은 Hacktoberfest Weekend Challenge: Build for a Friend에 제출하는 내용입니다.
제가 만든 것
HomeMemory는 가족들이 자꾸 잊어버리는 사소한 순간들을 위한 개인 메모리 공간입니다. 어머니, 누나(또는 언니), 아버지와 저는 항상 이런 질문을 합니다: 여분의 열쇠는 어디에 있나요? 와이파이 비밀번호가 뭐였죠? 지갑은 어디로 갔지? 저 영수증은 어느 병원의 건이었지? 이 약은 언제 만료되나요?
사진을 찍고 짧은 메모("내 침실 사이드 테이블 위의 지갑")를 추가하면, 'Memo'라는 마스코트가 이를 기억해 줍니다. 나중에 일반 영어(plain English), 우르두어(Urdu) 또는 로마자 우르두어(Roman Urdu)로 질문하면, 출처 사진과 함께 답변을 얻을 수 있습니다. "곧 만료" 탭은 약품이나 문서의 만료일을 알려줍니다.
저는 모든 것을 기억할 나이가 아닌 어머니를 위해 이 앱을 만들었습니다. 한 번은 어머니께서 가게에 신용카드를 두고 오시는 바람에 저희 모두가 매우 걱정했기 때문입니다. 그래서 어머님께서 편안하게 사용하실 수 있도록 만들어 드렸습니다.
데모
코드
GitHub logo laiba-Ashfaq / Home-Memory
가족들이 잊기 쉬운 사소한 것들을 위한 개인 메모리 어시스턴트.
HomeMemory
가족들이 잊기 쉬운 사소한 것들을 위한 개인 메모리 어시스턴트.
소개 (About)
HomeMemory는 가족들이 중요한 일상용품의 위치를 기억하고, 문서나 약품 만료일 같은 날짜를 추적하는 데 도움을 주기 위해 설계된 개인 메모리 어시스턴트입니다.
이 아이디어는 단순한 경험에서 시작되었습니다. 어머니께서 한 번 가게에 신용카드를 두고 오신 적이 있었기 때문입니다. 이를 계기로 우리는 집안에서 지갑, 열쇠, 영수증, 문서 또는 기타 소지품처럼 작지만 중요한 것들을 얼마나 자주 잊어버리는지에 대해 생각하게 되었습니다.
모두가 모든 것을 기억하기를 기대하는 대신, HomeMemory는 그저 질문할 수 있게 합니다.
기능 (What It Does)
HomeMemory를 사용하면 다음을 할 수 있습니다:
- 항목의 사진을 찍거나 업로드합니다.
- 어디에 있는지에 대한 짧은 메모를 추가합니다.
- 오픈 모델(open model)을 사용하여 사진을 분석하고 유용한 세부 정보를 추출합니다.
- 저장하기 전에 정보를 검토하고 편집합니다.
- 영어, 우르두어 등으로 저장된 항목에 대해 질문합니다.
Live Deploy :
http://home-memorygit-an9izpjmre3yesgikuoybq.streamlit.app/
구축 과정 (How I Built It)
Gemma 4가 Ollama를 통해 로컬에서 실행됩니다. 이 모델은 각 사진을 읽고 구조화된 JSON(카테고리, 항목, 설명, 읽기 가능한 텍스트, 만료일)을 반환하며 최종 답변을 작성합니다.
EmbeddingGemma는 각 기억을 벡터로 변환하여 "extra chabi"가 여전히 "spare keys"를 찾을 수 있게 합니다.
MongoDB Atlas Vector Search는 기억들을 저장하고 질문에 가장 가까운 일치를 찾아냅니다.
Streamlit이 다크 모드와 애니메이션 마스코트 Memo를 포함한 인터페이스를 구동합니다.
답변의 신뢰성을 유지하기 위해 제가 한 작업들:
-
고정된 JSON 스키마(fixed JSON schema)와 온도 0을 강제하여 모델이 임의로 카테고리를 만들지 못하게 했습니다.
-
어딘지에 대한 정보는 사용자가 직접 작성한 메모를 진실의 원천(source of truth)으로 삼았습니다.
-
무언가를 저장하기 전에 확인 및 편집 단계를 추가했습니다.
-
일치 임계값(match threshold)을 추가하여, 추측하는 대신 Memo가 "찾을 수 없었습니다"라고 말하게 했습니다.
-
간단한 테스트 스크립트를 작성했습니다: 10개의 실제 항목에 대한 top-1 검색 정확도는 [X/Y = 78%]였습니다.
무엇이 잘못되었나: 실제로 지갑 안의 카드를 이유로 첫 번째 레이블이 "문서(document)"로 지정되는 실패 사례가 있었습니다. 이후 편집 버튼과 드롭다운 메뉴를 추가하고, 소지품을 위한 '추가(add also)' 버튼으로 변경했습니다.
결과: 이 챗봇 이전에는 이런 물건들을 찾는 데 1015분이 걸렸지만, 이제는 최대 23분밖에 걸리지 않습니다.
오픈 혁신이 중요한 이유? (Why Does Open Innovation Matter?)
이 챗봇은 와이파이 비밀번호, 신분증 문서, 의료 영수증, 그리고 보석이 어디에 보관되어 있는지 등의 정보를 담고 있습니다. 저는 이러한 사진들을 폐쇄형 API(closed API)로 보내고 싶지 않았습니다.
Gemma는 오픈 웨이트(open-weight) 모델이기 때문에 사진 읽기 및 답변 처리를 제 개인 노트북에서 실행합니다. 이미지는 절대 외부로 전송되지 않으며, 요청당 비용이 발생하지 않고, 프롬프트, 스키마, 모델 크기를 자유롭게 변경할 수 있습니다.
솔직히 말씀드리자면 한 가지 제한 사항이 있습니다. 텍스트 기록과 그 임베딩(embeddings)은 로컬이 아닌 MongoDB Atlas에 저장됩니다. 동일한 코드는 로컬 MongoDB와도 작동합니다.
나의 에이전트 세션 (My Agent Session)
저는 Claude를 채팅 창에서 사용하며 HomeMemory를 만들었고, 이후 제 개인 노트북에서 모든 것을 실행하고 테스트했습니다. 저는 코딩 에이전트 도구를 사용하지 않았기 때문에 공유할 수 있는 에이전트 세션 파일은 없습니다. 이 과정에서 제가 진행한 주요 수정 사항들은 다음과 같습니다:
- 지갑(wallet) 항목을 처음에는 '문서(document)'로 분류했으나, 새로운 카테고리와 더 엄격한 프롬프트를 사용하여 수정했습니다.
- 검색 임계값(search threshold)을 조정하여 메모가 추측하는 대신 '찾을 수 없음'이라고 표시하도록 했습니다.
- 다크 모드 및 업로드 버튼에 대한 UI를 수정했습니다.
수상 부문 (Prize Categories)
- Gemma 활용 최우수: Gemma 4는 Ollama를 통해 로컬에서 실행됩니다. 각 사진을 읽고 구조화된 JSON을 반환하며, 답변을 작성합니다. EmbeddingGemma는 검색에 사용되는 임베딩을 생성합니다.
- MongoDB Atlas 활용 최우수: Atlas는 모든 메모를 저장하며, Atlas Vector Search가 질문과 가장 가까운 일치 항목을 찾아줍니다.
- ElevenLabs 활용 최우수: 데모 비디오의 내레이션을 생성하기 위해 ElevenLabs를 사용했습니다.
- GitHub Copilot 활용 최우수: VS Code에서 Copilot을 사용하여 토글 버튼이 작동하지 않는 것과 같은 오류를 수정했습니다. 이 문제를 해결하는 과정에서, Copilot은 Ollama가 너무 많은 시간을 소요한다는 문제도 발견했고, 이를 수정하여 이제 이미지를 더 빠르고 좋은 점수로 읽어낼 수 있게 되었습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기