展示了 Twilio+n8n+FastAPI+LangChain 的技术栈如何构建出行 AI 助手,包含路线规划、票价计算、自动订票等功能。
我是如何使用 n8n、FastAPI、LangChain 和 GTFS 数据,构建 MetroMind——一个基于 WhatsApp、面向 Kochi Metro 的 Agentic AI 通勤助手,并在 OpenAI Codex Nightline Hackathon 中跻身前十的。
canonical_url: https://midhunpm.in
说实话,Kochi Metro 的 app 非常难用。打开之后要等它加载,再连续点过四个页面,而等你操作完,可能已经错过了那班列车。
于是我开发了 MetroMind——一个 WhatsApp AI Agent,通过聊天就能处理你在 Kochi Metro 的整个通勤过程。不需要来回切换 app,也没有加载页面。只要像给朋友发消息一样跟它交流即可。
它在 OpenAI Codex Nightline Hackathon 中进入了前十。下面来看看它是如何工作的。
路线规划——询问“How do I get from Aluva to MG Road?”,它会准确告诉你该乘坐哪些列车、在哪里换乘以及对应时间
票价计算——从实时 GTFS 数据中获取真实票价,而不是使用硬编码的估算值
车票预订——由于 KMRL 没有公开的预订 API,因此通过 Playwright 实现自动化预订(下文会详细介绍)
自然语言——可以使用普通英语或 Malayalam 询问任何问题,它会自行判断你的需求
所有功能都通过 WhatsApp 完成,无须安装 app。
WhatsApp (Twilio) → n8n → FastAPI → LangChain → GTFS Data
↓
Playwright (booking automation)
n8n 作为编排层——处理来自 Twilio 的 WhatsApp webhook、路由消息并管理对话状态
FastAPI 后端——负责核心业务逻辑、GTFS 解析和路线计算
LangChain——作为 Agent 层,解释用户意图并决定调用哪些工具
GTFS——Kerala 的开放交通数据格式,包含所有车站信息、路线和时刻表
Twilio——提供消息交互界面的 WhatsApp Business API
KMRL 没有公开的预订 API。他们的 app 使用 AES 对所有流量进行加密。
所以,我对它进行了逆向工程。
我反编译了 APK,追踪加密密钥,并弄清楚请求和响应的格式。随后,我构建了一套基于 Playwright 的自动化系统,以无头模式完成预订流程——本质上,这是一个能够以远超人工操作速度填写预订表单的 bot。
这不是最优雅的解决方案,但确实可用,而且比手动操作快得多。
我在自己的 homeserver 上自托管 n8n(Dell i5、Ubuntu 24.04,位于 Cloudflare Tunnel
Traefik 之后)。使用 n8n 意味着我可以:
Traefik 之后)。使用 n8n 意味着我可以:
以可视化方式连接 WhatsApp → Agent → 响应这条 pipeline
以可视化方式连接 WhatsApp → Agent → 响应这条 pipeline
无须修改代码即可添加新的 trigger 和集成
无须修改代码即可添加新的 trigger 和集成
通过完整的执行日志监控每一次 workflow 运行
通过完整的执行日志监控每一次 workflow 运行
对于一个本质上围绕编排展开的项目来说,使用可视化编排工具非常合理。
GTFS 数据时效性——KMRL 更新 GTFS feed 的时间并不稳定,导致我最终不得不手动刷新数据。如果使用带有 diff 检查的正规 cron job,方案会更整洁。
Session 管理——WhatsApp 对话没有原生的 session 概念。我使用 n8n 的 static data 临时绕过了这个问题,但正规的 Redis session store 会是更好的选择。
AES 逆向工程——做起来很有趣,维护起来却是一场噩梦。如果 KMRL 更新了 app,整个预订流程都会失效。显然,如果能与官方合作并获得正规的 API,才是最理想的方案。
这个项目是我在 midhunpm.in 上个人作品集的一部分。
我是 Midhun,Sahrdaya College of Engineering 的计算机科学本科生,目前正在构建 AI Agent 和全栈系统。如果你也在开发类似项目,或者想聊聊公共交通技术、AI Agent 或自托管基础设施,可以在 LinkedIn 或 GitHub 上找到我。
这个项目使用 n8n、FastAPI、LangChain、Twilio 和 Playwright 构建,也源于我对 KMRL app 究竟如何运行的强烈好奇心——可能好奇得有点过头了。
如需采取进一步措施,你可以考虑屏蔽此人和/或举报滥用行为。