Orcafish: 어류 관리를 위한 로컬 AI 및 알림 도우미
요약
Orcafish는 어류 관리를 위해 설계된 100% 로컬 AI 및 알림 도우미입니다. Ollama와 Gemma 모델을 사용하여 모든 추론이 기기 내에서 이루어지므로 개인 정보 보호가 최우선입니다. 이 시스템은 실내/야외 등 다양한 환경에 맞춰 관리 조언을 제공하며, SQLite 기반의 영구적인 일일 알림 기능을 갖추고 있습니다.
핵심 포인트
- Ollama와 Gemma를 활용한 100% 로컬 AI 구동으로 개인 정보 보호 보장
- SQLite 및 Telegram JobQueue 연동으로 시스템 재시작에도 유지되는 영구적 알림 기능 구현
- 다중 사용자 격리 기능을 통해 각 사용자의 데이터와 일정을 독립적으로 관리
제가 만든 것
제 친한 친구가 최근 어항 키우기 취미를 거실의 단일 실내 수조에서 계절별 번식을 위해 파티오에 놓인 더 큰 야외 욕조로 확장했습니다.
그는 두 가지 완전히 다른 수생 생태계를 관리하는 데 어려움을 겪었습니다:
실내 수조: 엄격한 일일 먹이 급여 루틴과 일관된 조명 스케줄이 필요했습니다.
야외 욕조: 환경 변화 추적, 떠다니는 부유물 확인, 그리고 야외 설정에 특별히 맞춘 관리 조언(예: 실내 LED 주기와 햇빛 조류 관리)이 필요했습니다.
일반적인 알림 앱은 투박하게 느껴졌고, 온라인에서 검색하면 종종 실내 및 야외 관리를 혼합한 모순되는 조언을 얻었습니다. 개인 일정 데이터를 제3자 클라우드 서버로 전송하지 않고도 작업을 추적할 수 있는 빠르고 대화형 방식을 원한다는 것을 알고, 저는 Orcafish를 만들었습니다. 이것은 친구의 이중 설정에 엄격하게 맞춰진 100% 로컬, 개인 정보 보호 우선 AI 동반자입니다.
주요 기능
100% 로컬 AI 프라이버시: Ollama (gemma:2b)으로 구동되는 상황 인지 어류 관리 조언. 모든 LLM 추론은 127.0.0.1:11434에서 로컬로 발생하며, 사용자 데이터는 기기를 벗어나지 않습니다.
영구적인 일일 알림: 커스텀 경고가 부팅 시 SQLite에서 Telegram의 JobQueue로 직접 재활성화되어, 시스템 재시작에도 스케줄이 유지되도록 합니다.
다중 사용자 격리: 데이터베이스 스키마는 Telegram chat_id에 따라 사용자 프로필, 위치 설정 및 작업 일정을 엄격하게 분리합니다.
코드 스니펫
1. 비동기 로컬 AI 통합
Telegram의 메인 이벤트 루프를 차단하지 않고 로컬 Ollama 호출:
async def ask_gemma(prompt: str, setup_location: str) -> str:
"""상황 인지 쿼리를 Ollama를 통해 로컬 Gemma 모델에 전송합니다."""
loc_display = setup_location.replace("_", " ").title() if setup_location else "General Setup"
...
2. 시작 스케줄 재활성화
봇 시작 시 활성 사용자 알람을 메모리에 다시 구축합니다:
2. 시작 스케줄 재활성화
봇이 시작될 때 활성 사용자 알람을 메모리에 다시 구축합니다:
def load_all_reminders_on_startup(job_queue):
"""부팅 시 SQLite에 저장된 활성 스케줄을 Telegram JobQueue로 재수화(Rehydrates)합니다."""
reminders = get_all_reminders_db()
...
기술 스택 (Tech Stack)
| 구성 요소 (Component) | 기술 (Technology) |
|---|---|
| 언어 (Language) | Python 3.10+ |
| ... |
데모 (Demo)
- /start: _실내 수조(Indoor Tank)_와 야외 욕조(Outdoor Tub) 사이를 전환하는 대화형 설정 선택기입니다.
- /remind HH:MM [작업 이름]: 영구적인 일일 관리 알림을 예약합니다 (예:
/remind 19:50 수위 확인). - AI 케어 채팅: 로컬 Gemma를 통해 즉시 처리되는 맞춤형 어류 관리 질문에 답변합니다.
Orcafish Telegram bot conversation demo

코드 저장소 (Code Repository)
👉 GitHub 저장소: https://github.com/Iraiva63forem
어려움 및 향후 계획 (Challenges & What's Next)
겪었던 어려움 (Challenges I Faced)
- 로컬 LLM 지연 시간 균형 맞추기: 소비자 하드웨어에서 가벼운 메모리 사용량을 초과하지 않으면서 빠른 응답을 보장하기 위해 Ollama의
gemma:2b에 대한 프롬프트 구조를 최적화했습니다. - 지속적인 작업 상태 동기화 (Persistent Job State Sync): 중복 알람 생성이나 활성 사용자 간격 손실 없이 SQLite 스케줄이 Telegram의 비동기식
JobQueue로 원활하게 재수화되도록 보장하는 것입니다.
Orcafish의 향후 계획 (What's Next for Orcafish)
- 다중 수조 및 욕조 프로필: 사용자가 특정 실내 수조와 야외 욕조 사이를 끊김 없이 전환할 수 있도록 데이터베이스 스키마를 확장하여 여러 개의 이름 지정된 프로필을 지원합니다.
- IoT 센서 통합: ESP32 온도 및 pH 센서를 연결하여 실시간 수질 측정값을 Orcafish에 공급하고, Telegram에서 자동 임계값 알림을 받을 수 있게 합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기