dev.to

Never Stranded Again: How I Built an Edge AI Bus Guardian for My Friend Tejas Using TabPFN & SerpApi

버스카드 잔액 부족으로 발이 묶이지 않도록 — TabPFN·SerpApi로 만든 통근 알림 에이전트

KTCL 교통카드가 야간 배치 동기화 방식으로 운영되는 상황에 맞춰, 통근 일정과 잔액, 도로 정보를 종합해 다음 날 승차 위험을 예측하는 CommuteShield를 만들었습니다. TabPFN이 위험 확률과 부족액을 계산하고, 위험이 기준을 넘을 때만 Telegram으로 충전 금액을 알립니다.

AI 요약

Goa에서 Margao와 Farmagudi 캠퍼스를 오가는 학생은 KTCL 교통카드 잔액이 있어도 충전 시점에 따라 다음 날 버스를 타지 못할 수 있습니다. 본문 설명에 따르면 카드 단말기와 차고지 개찰구는 은행 서버에 계속 연결되지 않고, 잔액을 밤마다 일괄 동기화합니다. 자정 직후 온라인으로 충전하면 다음 날 아침 승차 시점까지 잔액이 반영되지 않을 수 있습니다. 저자는 친구 Tejas가 수업 뒤 축구 경기에 들렀다가 추가 이동 요금을 쓰고, 이 문제로 시험 당일 버스에 타지 못한 일을 계기로 CommuteShield를 만들었습니다.

매일 저녁 실행하는 통근 위험 예측

CommuteShield는 노트북에서 매일 오후 8시에 실행하는 Python 에이전트입니다. KTCL 포털에서 현재 카드 잔액을 확인하고, 다음 날 강의·실험·축구 일정도 읽습니다. SerpApi로 Google 검색 결과를 조회해 Goa의 도로 침수, NH66 공사, Kadamba 노선 우회 공지 같은 교통 정보를 확인합니다. 본문은 도로 장애가 감지되면 예상 요금 배수를 1.0배에서 최대 1.35배로 높인다고 설명합니다.

위험 판단에는 Prior Labs의 TabPFN을 사용합니다. 60일간의 통근 기록과 요일, 현재 잔액, 예정된 이동 횟수, 축구 경기 여부, 마지막 충전 이후 경과 일수, 도로 사정에 따른 요금 배수, 평소 하루 지출을 반영한 7개 입력값을 함께 넣습니다. TabPFN은 작은 표 형식 데이터에 맞춘 사전학습 모델로, 저자는 별도의 학습 반복이나 하이퍼파라미터 조정 없이 위험 확률과 예상 부족액을 계산한다고 설명합니다.

위험할 때만 알림

에이전트는 위험도가 60% 이상이거나 예상 잔액 부족이 있으면 자정 전 Telegram이나 Twilio WhatsApp으로 알림을 보냅니다. 알림에는 권장 충전액과 차고지 동기화 마감 시각인 오후 11시 59분이 포함됩니다. 잔액이 충분하면 알림을 보내지 않아 반복 경고로 사용자가 알림을 꺼버리는 상황을 피하려는 설계입니다.

시연 예시에서 잔액이 ₹321.50인 날은 위험도가 8.1%로 계산돼 알림을 보내지 않습니다. 반면 잔액이 ₹18이고 Wadi turf 축구 일정이 있는 경우 위험도는 82.7%, 예상 부족액은 ₹64.50으로 표시되며 ₹100 충전을 권합니다. 비교 시나리오에는 강의 한 번만 있는 화요일, NH66 우회가 발생하는 몬순 상황도 포함됩니다.

구현 구성과 개인정보 설명

저장소에는 TabPFN 추론 모듈, SerpApi 검색 모듈, KTCL 잔액 수집기, 에이전트 조정 코드, 알림 전송기와 테스트가 포함됩니다. 저자는 학생의 이동 기록을 외부 LLM API로 보내지 않고 TabPFN 추론을 노트북에서 수행한다고 설명합니다. 다만 실시간 도로 정보 조회와 KTCL 포털 잔액 확인에는 외부 서비스가 쓰입니다. 화면 시연에서는 친구의 카드 정보를 노출하지 않도록 저자 본인의 카드를 사용하고, 친구의 일정은 위험도 계산에 반영했다고 밝혔습니다.

dev.to 반응

  • @respect17 — 매일 겪을 수 있는 문제, 정류장을 지나치거나 기다리다 발이 묶이는 일을 해결한다는 점이 좋네요. GitHub와 데모 영상이 함께 있어 말뿐이 아니라 실제로 작동하는지 확인하기 쉽습니다.

원문: dev.to / 번역·요약: Trawling