Outside, briefly: 화면에서 벗어나기 위한 작고 오프라인인 AI 코치
요약
이 글은 사용자의 감정 상태와 가용 시간을 기반으로 야외 활동 미션을 제공하는 'Outside, briefly'라는 오프라인 AI 코치 앱을 소개합니다. 이 앱의 핵심은 복잡한 언어 모델 대신 로컬에서 작동하는 다항분할 나이브 베이즈 분류기를 사용하여 투명하고 간결하게 외출 유형을 결정한다는 점입니다.
핵심 포인트
- 로컬 Naive Bayes 분류기 사용으로 개인 정보 보호 및 오프라인 구동 가능
- 사용자의 감정 기반 미션을 제공하여 '화면에서 벗어나게' 하는 것이 목표
- 미션 카드 인쇄/저장 기능으로 앱 의존도를 낮추고 실제 경험에 집중 유도
- 모델, 학습 예제, 규칙 전체를 공개하여 오픈 혁신을 추구함
내가 만든 것
나는 Outside, briefly라는 작은 야외 활동 계획 앱을 만들었다. 사용자가 자신의 기분을 문장으로 설명하고, 가용 시간을 선택하면, 밖에 나가게 하는 짧은 미션을 받는다. 목표는 화면이 경험의 가장 짧은 부분이 되도록 하는 것이다.
많은 웰니스(wellness) 앱에서 발견한 문제점이 있다: 산책을 권유하더라도 계속해서 휴대폰을 확인하도록 요구한다. 나는 계획 단계가 빠르게 끝나기를 원했다. 결과는 몇 가지 구체적인 단계와 돌아왔을 때 생각할 질문을 제공한다. 사용자는 미션 카드를 인쇄하거나 저장하고 브라우저를 떠날 수 있다.
이 앱은 네 가지 종류의 미션을 제공한다: 자연 관찰, 움직임(moving), 장소 돌보기(caring for a place), 그리고 사람과의 연결(connecting with someone). 접근성이 좋은 옵션이나 앉아서 할 수 있는 옵션도 있다.
데모
실시간 데모를 사용해 보세요. “새와 나무가 있는 평화로운 산책을 하고 싶어”라고 입력하여 관찰 미션을 확인해 보세요.
또 다른 예시로, “정원에 있는 식물에 물을 주고 싶어”는 돌봄(care) 미션을 생성한다. 결과는 어떤 단어가 모델에 영향을 주었는지 보여주므로 추천이 신비한 지침이 아니다.
코드
MIT 라이선스가 적용된 소스 코드를 확인해 보세요.
만드는 과정
AI 핵심은 투명하고 로컬에서 학습된 다항분할 나이브 베이즈 분류기(multinomial Naive Bayes classifier)이다. model.js에는 40개의 레이블링된 예시 구문이 모델되어 있다. 이 구문들은 앱에게 네 가지 외출 유형을 가르친다. 모델은 입력을 단어 토큰으로 변환하고, 각 토큰이 예시 구문에 얼마나 자주 나타나는지 계산하며, 라플라스 평활화(Laplace smoothing)를 적용하여 어떤 외출 유형이 문장에 가장 적합한지 추정한다. 인터페이스는 일치하는 단어를 보여주므로 결정 과정을 검사할 수 있다. 결과는 시간과 접근성에 맞춰 조정된 짧은 미션 단계들로 구성된다. 이것은 의도적으로 작은 분류기이며, 언어 모델(language model)이 아니다.
예를 들어, “새(birds),” “나무(trees),” 그리고 “듣다(listen)”와 같은 단어는 관찰을 가리키고; “물주다(water),” “식물(plants),” 그리고 “정원(garden)”은 돌봄을 가리킨다. 모델이 핵심 결정권자이다. 미션 단계들은 사람이 작성했기 때문에 짧고, 실용적이며, 범위가 제한되어 있다. 만약 문장이 모호하면, 앱은 여전히 최선의 추측을 하고 다시 시도할 수 있도록 한다.
당신의 문장
로컬 단어 토크나이저
Open Naive Bayes 모델
미션 유형
시간 및 접근성 조정
짧은 미션 카드
이 앱은 빌드 단계나 API 키가 없는 순수한 HTML, CSS, JavaScript로 만들어졌습니다. 서비스 워커(Service Worker)가 첫 방문 후 파일을 캐시하여 오프라인에서도 동일한 흐름을 작동할 수 있게 합니다. 지리 위치 정보 요청, 분석 호출 또는 계정 기능이 없습니다. 초기 방문 시에는 브라우저가 파일을 다운로드해야 하므로 연결이 필요합니다. 저는 달리 그렇게 암시하고 싶지 않았습니다.
오픈 혁신(Open Innovation)은 왜 중요한가?
모델, 학습 예제 및 미션 규칙 전체가 공개 코드에 포함되어 있습니다. 누구나 무엇을 배웠는지 볼 수 있고, 자신의 커뮤니티를 위해 예제를 개선하거나 호스팅되는 AI 서비스에 의존하지 않고 분류기(classifier)를 교체할 수 있습니다. 이 작은 로컬 모델은 개인 텍스트나 위치 정보를 서버로 보내지 않고도 사람들이 외출 계획을 세울 수 있게 합니다. 첫 방문 후에는 신호가 없어도 작동합니다.
물론 트레이드오프(tradeoff)가 있습니다. 40개의 예제 문구로는 누군가가 기분을 설명하는 모든 방식을 포괄할 수 없으며, 모델은 현지 날씨, 경로 안전성 또는 특정 경로의 접근성을 알 수 없습니다. 저는 앱을 작고 그러한 한계에 대해 정직하게 유지하기로 했습니다. 기여자들은 동일한 간단한 인터페이스를 유지하면서 문구를 추가하거나, 예제를 번역하거나, 분류기를 교체할 수 있습니다. 여기서 중요한 것은 화려하지만 불투명한 추천을 만드는 것보다 이러한 개방성입니다.
야외에서 무슨 일이 일어났는가
저는 네 가지 모델 의도(model intents)와 10분짜리 접근 가능한 미션을 자동화된 테스트로 모두 진행했습니다. 또한 가드닝 프롬프트(gardening prompt)를 사용하여 크롬(Chrome)의 라이브 사이트에서도 care 미션이 생성되는 것을 확인했습니다. 아직 실제로 야외에서 미션을 수행해 본 적은 없기 때문에, 야외 현장 테스트라고 주장할 수는 없습니다. 그것이 다음으로 의미 있는 테스트입니다: 화면을 벗어난 후에도 지침이 유용한지 여부입니다.
상(Prize) 카테고리
전체 챌린지만 진행했습니다. 파트너 기술은 언급하지 않았습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기