GrassRoots: 개발자에게 야외 활동을 권유하는 로컬 Gemma 에이전트
요약
GrassRoots는 개발자가 장시간 코딩에 몰두하는 문제를 해결하기 위해 설계된 경량 Windows 데스크톱 어시스턴트입니다. 이 앱은 로컬 오픈 웨이트 모델인 Gemma 2B와 Ollama를 사용하여, 사용자의 위치나 시간에 따라 야외 활동을 권유하는 짧고 창의적인 마이크로 과제를 제안합니다.
핵심 포인트
- 개발자에게 강제적으로 화면에서 벗어나게 유도함.
- Gemma 2B 모델을 로컬(localhost)에서 구동하여 프라이버시를 보호함.
- Tkinter, Ollama 등 표준 라이브러리로 구현되어 접근성이 높음.
- 사용자가 직접 체크인을 트리거하므로 통제권을 유지할 수 있음.
본 글은 Hacktoberfest Open-Source AI Challenge Week 1: Touch Grass에 제출하는 내용입니다.
문제점: 우리의 최고의 아이디어는 실내에서 탄생한다
개발자는 하루 종일 코드 에디터 안에 머물며, 알림, 대시보드, 그리고 '딱 하나의 작업만 더'라는 생각에 둘러싸여 지낼 수 있습니다. 저는 대부분의 생산성 소프트웨어와 반대되는 작은 개입(intervention)을 만들고 싶었습니다. 즉, 화면 보는 시간을 짧게 만들고 그 사람을 화면에서 멀어지게 하는 것입니다.
그 결과물이 바로 GrassRoots입니다. GrassRoots는 로컬 오픈 웨이트 모델을 사용하여 다음의 작고 간단한 행동을 제안하는 경량 Windows 데스크톱 어시스턴트이며, 이 행동은 가급적 야외에서 할 수 있는 것이어야 합니다.
제작 내용
GrassRoots는 의도적으로 단순한 루프를 가진 Tkinter 앱입니다:
- Run AI Check-In Now 버튼을 클릭합니다.
- 앱이 현재 시간을 확인합니다.
- 야외 휴식 시간대에는 Gemma에게 짧고 창의적인 야외 마이크로 과제를 요청하고 경고 알림을 재생합니다.
- 작업 공간 시간대에는 빠른 인체공학 또는 수분 섭취 알림을 요청합니다.
- 조용한 시간에는 비활성 상태를 유지합니다.
중요한 점은 생성된 제안이 즉시 실행할 수 있을 만큼 짧다는 것입니다. 20단계의 건강 관리 계획 같은 것이 아니라, 단순히 짧게 산책하기, 다른 종류의 나뭇잎 세 개 찾기, 또는 신선한 공기를 마시러 밖에 나가기 같은 것들입니다.
Gemma가 로컬에서 실행되는 이유
이 앱은 Gemma 2B에 대해 Ollama를 통해 localhost로 프롬프트를 전송합니다. 루프 과정에 호스팅된 AI API는 없으며, 계정 토큰이나 서버로 전송되는 일상 습관 데이터도 없습니다.
이 선택은 이 프로젝트에서 중요합니다. 화면 시간 및 웰빙 어시스턴트는 문장 하나를 생성하기 위해 사용자의 일정이나 일일 루틴을 업로드할 필요가 없어야 합니다. 로컬 추론(Local inference)은 또한 실험을 경제적이고, 검사 가능하며, 수정하기 쉽게 만듭니다. 모델을 교체하거나, 프롬프트를 변경하거나, 작은 Python 파일에서 시간 창을 조정하는 것이 가능합니다.
이것은 Best Use of Gemma 카테고리에 제출하는 저의 작품입니다.
작동 방식
핵심 요청은 의도적으로 평범한 Python 코드입니다:
OLLAMA_URL = "http://localhost:11434/api/generate"
MODEL_NAME = "gemma:2b"
...
이 인터페이스는 Python의 표준 라이브러리만을 사용합니다: 창(window)을 위한 Tkinter, 로컬 HTTP 요청을 위한 urllib, 시간 인식 동작을 위한 datetime, 그리고 Windows 알림을 위한 winsound를 사용합니다. Ollama를 사용할 수 없는 경우, 앱은 조용히 실패하는 대신 안전한 대체 리마인더를 사용합니다.
현재 버전은 의도적으로 작고 투명하게 설계되었습니다. 체크인(check-in)은 사용자가 직접 트리거하므로, 사용자는 공격적인 알림 루프에 갇히기보다 통제권을 유지할 수 있습니다.
직접 사용해보기
요구 사항:
- Python 3이 설치된 Windows
- Ollama 설치
- 로컬에서 사용할 수 있는 Gemma 모델:
ollama run gemma:2b
그런 다음 프로젝트를 클론하고 실행합니다:
python touch_grass.py
전체 소스, README 및 스크린샷은 GitHub의 GrassRoots 폴더에서 확인할 수 있습니다.
여기서 오픈 혁신이 중요한 이유
폐쇄적인 API도 같은 문장을 생성할 수는 있지만, 신뢰 모델을 바꿉니다. 로컬에서 실행되는 오픈 가중치(open-weight) 모델을 사용하면, 사용자는 프롬프트를 검사하고 추론(inference)이 정확히 어디서 발생하는지 확인할 수 있으며, 클라우드 구독 없이 프로젝트를 실행하고 다른 루틴이나 모델에 맞게 조정할 수 있습니다.
웰빙 도구의 경우, 이것은 단순한 기술적 선호도가 아닙니다. 개인 정보 보호(Privacy)는 사용자 경험의 일부입니다. 가장 도움이 되는 AI 개입은 노트북에서 조용히 실행된 다음 자리를 비켜주는 것일 수 있습니다.
다음에 만들고 싶은 것들
다음 반복 버전에서는 실제 백그라운드 스케줄러, 구성 가능한 로컬 루틴, 접근성 옵션, 선택적 오프라인 활동 로그를 추가할 수 있을 것입니다. 또한 더 짧은 프롬프트와 다른 휴식 간격이 앱을 쳐다보는 시간을 늘리는 것이 아니라 실제로 실생활의 지속적인 행동 변화로 이어지는지 테스트하고 싶습니다.
현재로서는 GrassRoots는 하나의 임무만 가지고 있습니다: 다음 휴식을 더 쉽게 갖도록 만드는 것입니다.
화면에서 벗어날 수 있는 가장 손쉬운 방법은 무엇이며, 이번 Hacktoberfest에는 어떤 오픈 모델을 실험하고 계신가요?
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기