Kochi Metro를 위한 WhatsApp 기반 AI 에이전트 구축기 — 작동 원리 안내
요약
Kochi Metro 이용자를 위해 WhatsApp 기반의 AI 통근 비서 'MetroMind'를 구축한 사례를 소개합니다. n8n, FastAPI, LangChain을 활용하여 경로 계획, 요금 계산, 티켓 예매 기능을 구현했습니다.
핵심 포인트
- n8n을 오케스트레이션 레이어로 사용하여 대화 상태 및 웹훅 관리
- LangChain을 통해 사용자의 의도를 해석하고 도구 호출 결정
- 공개 API 부재 문제를 Playwright 기반 자동화로 해결
- GTFS 데이터를 활용한 실시간 경로 및 요금 정보 제공
n8n, FastAPI, LangChain, 그리고 GTFS 데이터를 사용하여 Kochi Metro를 위한 WhatsApp 기반 에이전트형 AI 통근 비서인 MetroMind를 구축하고, OpenAI Codex Nightline Hackathon에서 Top 10에 진입한 과정에 대해 설명합니다.
canonical_url: https://midhunpm.in
솔직히 말해서 — Kochi Metro의 앱은 정말 별로입니다. 앱을 열고, 로딩을 기다리고, 네 개의 화면을 탭하는 동안 이미 기차를 놓치고 말죠.
그래서 저는 MetroMind를 만들었습니다. 채팅을 통해 Kochi Metro 통근의 모든 과정을 처리하는 WhatsApp AI 에이전트입니다. 앱을 전환할 필요도, 로딩 화면을 기다릴 필요도 없습니다. 그저 친구에게 메시지를 보내듯 메시지만 보내면 됩니다.
이 프로젝트는 OpenAI Codex Nightline Hackathon에서 Top 10에 올랐습니다. 어떻게 작동하는지 소개하겠습니다.
MetroMind의 기능
- 경로 계획 (Route planning) — "Aluva에서 MG Road까지 어떻게 가나요?"라고 물으면 어떤 열차를 타야 하는지, 환승 지점은 어디인지, 시간표는 어떻게 되는지 정확히 알려줍니다.
- 요금 계산 (Fare calculation) — 하드코딩된 추측값이 아닌, 실시간 GTFS 데이터에서 가져온 실제 요금을 제공합니다.
- 티켓 예매 (Ticket booking) — KMRL이 공개 예약 API를 제공하지 않기 때문에 Playwright를 통해 자동화했습니다 (자세한 내용은 아래 참조).
- 자연어 처리 (Natural language) — 평범한 영어 또는 말라얄람어(Malayalam)로 무엇이든 물어보세요. 사용자가 무엇을 필요로 하는지 파악합니다.
이 모든 것이 WhatsApp을 통해 이루어집니다. 별도의 앱 설치가 필요 없습니다.
기술 스택 (The Stack)
WhatsApp (Twilio) → n8n → FastAPI → LangChain → GTFS Data
↓
Playwright (예약 자동화)
- n8n: 오케스트레이션 레이어 (orchestration layer) — Twilio로부터 오는 WhatsApp 웹훅(webhook)을 처리하고, 메시지를 라우팅하며, 대화 상태(conversation state)를 관리합니다.
- FastAPI: 백엔드 (backend) — 핵심 비즈니스 로직, GTFS 파싱, 경로 계산을 담당합니다.
- LangChain: 에이전트 레이어 (agent layer) — 사용자의 의도(intent)를 해석하고 어떤 도구(tool)를 호출할지 결정합니다.
- GTFS: Kerala의 오픈 대중교통 데이터 형식으로, 모든 역 정보, 경로 및 시간표를 포함하고 있습니다.
- Twilio: 메시징 인터페이스를 위한 WhatsApp Business API입니다.
흥미로운 부분 — KMRL API 역공학 (Reverse Engineering)
KMRL은 공개 예약 API를 제공하지 않습니다. 그들의 앱은 모든 트래픽을 AES로 암호화합니다.
그래서 저는 이를 역공학(reverse engineered)했습니다.
APK를 디컴파일(Decompiled)하고, 암호화 키를 추적하여, 요청/응답(request/response) 형식을 파악했습니다. 그런 다음 예약 흐름을 헤드리스(headless) 방식으로 처리하는 Playwright 기반의 자동화 도구를 구축했습니다. 이는 본질적으로 사람이 예약 양식을 채우는 것보다 더 빠르게 양식을 작성하는 봇(bot)입니다.
가장 깔끔한 해결책은 아니지만, 작동은 합니다. 그리고 수동으로 하는 것보다 훨씬 빠릅니다.
왜 단순히 FastAPI 대신 n8n을 사용했는가
저는 제 홈 서버(Dell i5, Ubuntu 24.04, Cloudflare Tunnel 및 Traefik 뒤에 위치)에 n8n을 셀프 호스팅(self-host)합니다. n8n을 사용함으로써 다음과 같은 이점을 얻을 수 있었습니다:
- WhatsApp → 에이전트(agent) → 응답(response) 파이프라인을 시각적으로 연결
- 코드 수정 없이 새로운 트리거(trigger) 및 통합(integration) 추가
- 전체 실행 로그를 통해 모든 워크플로우(workflow) 실행 모니터링
근본적으로 오케스트레이션(orchestration)에 관한 프로젝트였기에, 시각적 오케스트레이션 도구를 사용하는 것이 매우 합리적이었습니다.
다르게 했을 부분
GTFS 데이터 최신성 — KMRL은 GTFS 피드(feed)를 불규칙하게 업데이트합니다. 결국 저는 이를 수동으로 새로고침해야 했습니다. 차이점 확인(diff check) 기능이 포함된 적절한 크론 잡(cron job)을 사용했다면 더 깔끔했을 것입니다.
세션 관리 (Session management) — WhatsApp 대화에는 네이티브 세션 개념이 없습니다. 저는 n8n의 정적 데이터(static data)를 이용해 임시방편으로 해결했지만, 적절한 Redis 세션 저장소(session store)를 사용하는 것이 더 좋았을 것입니다.
AES 역공학 (reverse engineering) — 하는 과정은 즐거웠지만, 유지보수는 악몽이었습니다. 만약 KMRL이 앱을 업데이트하면 전체 예약 흐름이 깨집니다. 당연히 공식적인 API 파트너십이 가장 이상적일 것입니다.
체험하기 / 소스 코드
이 프로젝트는 저의 포트폴리오인 **midhunpm.in**의 일부입니다.
저는 Sahrdaya College of Engineering의 컴퓨터 과학(CS) 학부생이자, AI 에이전트와 풀스택(full-stack) 시스템을 구축하고 있는 Midhun입니다. 비슷한 작업을 하고 계시거나 교통 기술(transit tech), AI 에이전트, 또는 셀프 호스팅 인프라(self-hosted infrastructure)에 대해 이야기하고 싶다면 LinkedIn 또는 GitHub에서 저를 찾아주세요.
n8n, FastAPI, LangChain, Twilio, Playwright, 그리고 KMRL의 앱이 실제로 어떻게 작동하는지에 대한 과도한 호기심으로 제작되었습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기