esdeeekiddoo/BangonPinoy

GitHub: esdeeekiddoo/BangonPinoy

面向菲律宾灾害响应的 Web 应用,集市民报灾、实时调度与 AI 语音热线于一体,实现从事件报告到响应解决的闭环管理。

Stars: 0 | Forks: 0

# BangonPilipinas — 概念图 ## 一句话应用介绍 **BangonPilipinas** 是一款面向菲律宾的灾害响应 Web 应用:市民可以报告事件并发送 SOS,响应人员可以实时调度,管理员可以在实时仪表板上查看全貌。我们的核心差异化在于:**我们自己的 REST API**(不仅仅是现成的 Supabase)以及一个**你不仅能打字还能与其进行语音通话的 AI 机器人**——全部基于免费的 AI 构建。 ## 概念图 ``` CITIZENS (report / SOS / view alerts) │ ▼ ┌─────────────────────────────────────────────┐ │ BANGONPILIPINAS APP │ │ React + TypeScript + MUI (frontend) │ │ Login · Dashboard · Live Map · SOS · │ │ Report Incident · My Reports · Weather · │ │ Earthquake · AI Assistant · Notifications │ │ Responder · Admin │ └──────────────┬──────────────────────────────┘ │ fetch() → JSON (our API) ▼ ┌─────────────────────────────────────────────┐ │ OUR OWN REST API (the USP) │ │ Node/Express (or Supabase Functions) │ │ /auth · /reports · /sos · /missions · │ │ /notifications · /ai/chat · /ai/call │ └───┬─────────────────────────────┬───────────┘ │ │ ▼ ▼ ┌──────────────────────┐ ┌──────────────────────────────┐ │ DATABASE │ │ EXTERNAL DATA │ │ Postgres/Supabase │ │ USGS → earthquakes │ │ users · reports │ │ Open-Meteo → weather │ │ sos · missions │ │ Overpass → hospitals etc │ └──────────────────────┘ │ OSRM → driving routes│ └──────────────────────────────┘ AI LAYER (free, via OpenRouter): OpenRouter API → Ling-flash-2.0 / ling-3.0-flash:free (LLM brain) Voice call = browser speech (Web Speech API) + LLM, no phone needed RESPONDERS ADMIN (claim + update status) (stats, charts, oversight) ``` ## 功能图 | 功能 | 市民 | 响应人员 | 管理员 | 目前状态 | |---|---|---|---|---| | 登录 / 注册 | ✅ | ✅ | ✅ | Mock → 黑客松实现的后端 | | 仪表板(警报、统计、实时地图) | ✅ | | | 已构建(Mock 数据) | | 实时地图(附近的医院/警察局/消防局/避难所) | ✅ | ✅ | | 已构建(真实的 OSM 数据) | | 报告事件(类型、严重程度、地图定位) | ✅ | | | 已构建(Mock 数据) — 描述支持**语音转文字听写** | | SOS(发送警报 + 位置) | ✅ | | | 已构建(Mock 数据) | | 我的报告 / 追踪状态时间线 | ✅ | | | 已构建(Mock 数据) | | 天气 + 地震监控 | ✅ | | | 已构建(真实的 USGS/Open-Meteo) | | 通知(红点提醒、已读/未读) | ✅ | ✅ | ✅ | 已构建(Mock 数据) | | AI 助手(安全提示) | ✅ | | | 已构建(基于规则) → **升级:情境感知聊天 + 语音通话 + 自动升级上报** | | 响应人员调度 + 任务导航 | | ✅ | | 已构建(Mock,真实的 OSM 路线规划) | | 管理员监控 + 图表 | | | ✅ | 已构建(Mock 数据) | ## 我们的 REST API(核心卖点) 我们构建了自己的 REST API,以便团队可以控制业务逻辑——而不仅仅是使用现成的 Supabase。前端通过 `fetch()` 调用我们的 endpoint;底层数据库依然使用 Postgres/Supabase。 | Endpoint | 用途 | |---|---| | `POST /api/auth/login · register` | 身份验证(封装 Supabase auth) | | `GET/POST /api/reports` | 提交 + 列出事件报告 | | `POST /api/sos` | 带有位置的紧急警报 | | `GET/PATCH /api/missions` | 响应人员调度 + 状态更新 | | `GET/PATCH /api/notifications` | 通知,已读/未读 | | `POST /api/ai/chat` | 与 AI 机器人文字聊天(OpenRouter → Ling-flash-2.0) | | `POST /api/ai/call` | 语音通话回合 — 发送情况 + 对话记录,返回机器人回复 | | `PATCH /api/reports/{id}/ai-summary` | 通话结束后:保存对话记录 + 提取的事实 + 严重程度升级上报 | ## AI 热线语音通话 — 流程 ``` SITUATION BUILT → SOS pressed (GPS) OR incident reported (category/severity/desc/GPS) │ ▼ "CALL AI HOTLINE" → full-screen call UI (no real phone, no telecom, no money) │ ▼ 1. CONNECT → bot speaks the situation back: "This is a CRITICAL FIRE report at your location. Are you safe?" (TTS = browser speechSynthesis, free) │ ▼ 2. TALK → citizen holds the mic and speaks (Web Speech API "dictation" turns audio → text, free in Chrome/Edge) │ ▼ 3. THINK → POST /api/ai/call { context, conversation } system prompt = disaster-safety rules + THE SITUATION → OpenRouter → Ling-flash-2.0 / ling-3.0-flash:free (free LLM) │ ▼ 4. REPLY → bot speaks situation-specific guidance (reuses per-category safety tips) + asks checklist questions: "How many people are trapped? Anyone injured?" │ ▼ 5. LOOP steps 2–4 → citizen ends the call │ ▼ 6. ACT → AI does something with what it heard: • extracts facts (trapped=2, 1 injured, gas smell) • PATCH /api/reports/{id}/ai-summary → saved to the report • auto-ESCALATES severity (hears "unconscious" → Critical) • transcript added to the report timeline │ ▼ RESPONDER sees enriched mission: "AI Call Summary — 2 trapped, 1 injured, gas leak" ``` ## 为什么语音系统成本为零 | 任务 | 工具 | 免费的原因 | |---|---|---| | 听(音频 → 文字) | Web Speech API 听写 | 内置于 Chrome/Edge/Safari — 浏览器直接转写,无需 API key | | 想(文字 → 回答) | OpenRouter → `ling-flash-2-0` / `inclusionai/ling-3.0-flash:free` | 只需一个免费 API key;模型为开源 | | 说(文字 → 音频) | `speechSynthesis` | 内置于所有浏览器,无限次,本地运行 | | 记忆 + 行动 | 我们的 REST API + Postgres | 我们自己的代码 | 所谓的“热线”是应用内的语音聊天,而不是真正的电话通话——不需要 Twilio/SMS/电信服务。适用于带有麦克风和网络连接的 Chrome/Edge 浏览器。Firefox → 回退为文字聊天。 ## AI 机器人聊天 + 语音通话(运作方式,全免费) - **大脑:** OpenRouter 免费模型 — `inclusionai/ling-3.0-flash:free`(2026 年 8 月 3 日前免费)或 `ling-flash-2.0`(非常便宜)。只需一个 API key,兼容 OpenAI 的 `POST /v1/chat/completions`。 - **文字聊天:** `POST /api/ai/chat` → OpenRouter → 回复显示在聊天 UI 中(已存在于 AI 助手页面)。 - **语音通话(“与机器人交谈”):** 无需电话服务 — 浏览器 **Web Speech API**(`SpeechRecognition` 负责听你说话,`speechSynthesis` 负责回复语音)→ 音频文本发送至同一个 OpenRouter endpoint。适用于桌面版 Chrome/Edge;这是适合黑客松的稳妥方案。 - **安全防护:** system prompt 将机器人锁定在灾害响应主题内(安全提示、应对措施、最近的求助点、冷静的指导)。 ## 端到端的功能流程(示例:报告 → 响应) 1. 市民在地图上定位并提交报告 → 保存至 `reports` 2. 仪表板和响应人员信息流实时更新(Supabase Realtime) 3. 响应人员接单 → 状态变为 `en_route` → 使用 OSRM 导航前往 4. 标记为 `on_scene` → `resolved` → 市民在“我的报告”中看到状态 5. 每一步都会向相关用户发送通知 ## 团队角色(建议的分工) | 角色 | 负责内容 | |---|---| | **前端 (2)** | 页面、表单、地图集成、调用我们的 REST API | | **后端 (1–2)** | 我们的 REST API(Express 或 Supabase Functions)、DB schema、auth、realtime | | **AI (1)** | OpenRouter key、`/api/ai/chat` + `/api/ai/call`、Web Speech API、prompt 调优 | | **数据 (1)** | USGS / Open-Meteo / Overpass / OSRM endpoint、错误处理 | | **演示(任何人)** | 5 分钟脚本:地震 → 报告 → SOS → **呼叫 AI 机器人** → 响应人员解决事件 | ## 黑客松黄金法则 - **即使后端宕机,前端也绝对不能崩溃** → 保留 mock-data 回退机制 - 演示**实时闭环**(报告 → 调度 → 解决)以及**AI 热线通话** — 这就是我们的故事:报告火灾 → 与机器人交谈 → 机器人将事件升级为“紧急 (Critical)” → 响应人员看到丰富后的任务详情 - 所有使用的外部 API 均为**免费,无需 API key**(USGS、Open-Meteo、Overpass、OSRM);OpenRouter 只需要一个免费的 key 来驱动 AI 机器人 - **没有 OpenRouter key 或麦克风?Mock 回复也能让 AI 演示继续进行** — 绝不让演示中断 - 预埋 10–20 条真实的报告数据,确保演示界面不会显得空洞
标签:AI助手, MITM代理, REST API, 实时地图, 应急调度, 灾害响应, 自动化攻击