likithkumarmv/LIRA
GitHub: likithkumarmv/LIRA
LIRA 是一套基于多 AI Agent 协作的灾害应急响应平台,解决灾难发生时信息碎片化、资源调度滞后和现场离线协作困难的问题。
Stars: 0 | Forks: 1
# LIRA — 自主危机情报网络
## 🏆 黑客松评估指南
本节将 **LIRA 的每一项功能** 直接映射到黑客松的评审标准,以便评委能够在每一轮中快速评估项目。
### ⏱️ 第一轮 — 创意验证与架构审查 *(第 4–6 小时)*
#### ❓ LIRA 解决了什么问题?
**痛点:** 当灾难(洪水、气旋、地震)发生时,救援协调往往会失败,原因在于:
- 信息碎片化地分散在 WhatsApp、无线电和政府门户网站中
- 没有一个系统能够同时知道资源在*哪里*、*谁*有空以及公众正在报告*什么*
- 现场救援人员只能使用纸质清单进行离线工作
- 政府机构和非政府组织(NGO)看到的数据截然不同(且已过时)
**LIRA 的答案:** 一个单一的自主协调层,可摄取实时的卫星和传感器数据,利用 AI 验证市民报告,实时调度资源,并为每个利益相关者提供量身定制的专属视图——所有这一切都在几秒钟内完成,而非几小时。
#### 🏗️ 技术架构(简明描述)
```
[ Disaster Event & Telegram SOS ]
│
▼
┌─────────────────────────────────────────────────────┐
│ SCOUT AGENT — watches live feeds every 60 seconds │
│ (GDACS global alerts, USGS earthquakes, weather) │
└──────────────────┬──────────────────────────────────┘
│ creates incident record
▼
┌─────────────────────────────────────────────────────┐
│ ANALYST AGENT — Gemini AI reads the incident & │
│ Telegram inbound streams + cross-checks sensors │
│ → scores severity 1–10 │
│ → labels: VERIFIED / SUSPECTED_FAKE / UNVERIFIED │
└──────────────────┬──────────────────────────────────┘
│
┌──────────┴──────────┐
▼ ▼
┌──────────────┐ ┌─────────────────────────────────┐
│ COMMANDER │ │ HERALD AGENT │
│ AGENT │ │ Translates alerts into 5 Indian │
│ Calculates │ │ languages & sends Twilio SMS │
│ nearest NDRF,│ │ (Hindi, Tamil, Kannada, Bengali,│
│ ambulances, │ │ English) │
│ shelter camps│ └─────────────────────────────────┘
└──────┬───────┘
│
▼
┌─────────────────────────────────────────────────────┐
│ VOX AGENT — dials emergency coordinators via Vapi │
│ VoIP call, reads live incident data aloud, │
│ waits for verbal authorization, auto-resolves │
└─────────────────────────────────────────────────────┘
│
▼
[ Supabase PostgreSQL + PostGIS + Realtime ]
← All agents read/write here. Dashboard updates live.
```
**为何具有可行性:**
- 每个组件都使用了 **正在运行的 API**(非模拟)
- Supabase 处理实时订阅,无需自定义 WebSocket 逻辑
- Gemini Flash 速度快(<2秒推理),对于黑客松规模而言极具成本效益
- 整个技术栈只需 3 条终端命令即可在本地运行
### ⏱️ 第二轮 — 原型与技术评估 *(第 14–16 小时)*
#### ✅ 功能实现清单
| 功能 | 状态 | 查看位置 |
|---|---|---|
| 5 个协作 AI agent | ✅ 实时 | 触发演示 → 观察 agent 日志流 |
| Gemini NLP Telegram 验证 | ✅ 实时 | Telegram 接入流 / 地图上的 NLP 徽章 |
| MapLibre 3D 严重性塔楼 | ✅ 实时 | 仪表盘地图 |
| 战术遥测标头与实时 GPS 资源 | ✅ 实时 | 简洁的地图标头和动态 GPS 坐标侧边栏 |
| 多语言 SMS 广播 | ✅ 实时 | 通讯枢纽面板 → 启动多链调度 |
| VoIP 授权 (Vapi) | ✅ 实时 | 模态流水线 → 授权 Vox / 与 Vox 对话 |
| Vox 多语言语音调度 | ✅ 实时 | 通讯枢纽 → Vox 语音配置 |
| 志愿者自动分配 | ✅ 实时 | 志愿者面板 → 自动分配 |
| 基于角色的视图(3 种角色) | ✅ 实时 | 标头中的 DEV_MODE 切换器 |
| 机构分析 + CSV 导出 | ✅ 实时 | 切换至 AGENCY_ADMIN 角色 |
| 现场救援人员移动端视图 | ✅ 实时 | `/field` 路由 |
| PWA + 离线功能 | ✅ 实时 | `/field` 上的安装提示 |
| 负载压力测试(100 并发) | ✅ 实时 | 遥测面板 → 运行压力测试 |
| 实时性能遥测条 | ✅ 实时 | 顶部标头栏 |
#### 🤖 AI / ML 集成
| Agent | AI 模型 | 功能描述 |
|---|---|---|
| Analyst | Gemini 1.5 Flash | NLP 灾难验证、严重性评分、误报检测 |
| Herald | Gemini 1.5 Flash | 多语言翻译(5 种印度语言) |
| Commander | 纯数学计算 (Haversine) | 用于资源调度的测地距离计算 |
| Vox | Vapi.ai (语音 AI) | 具备动态、地区语言语音提示的外呼 VoIP 通话 |
| Scout | OpenWeatherMap + GDACS | 真实世界数据摄取,非合成数据 |
#### 🗄️ 数据库设计
```
incidents — core event records (PostGIS geometry, severity, NLP labels)
resources — NDRF units, hospitals, food camps with availability counts
volunteers — 15 seeded responders with skills, coords, language
tasks — assignments linking volunteers ↔ incidents
agent_logs — timestamped trail of every AI agent action
citizen_reports — public SOS submissions with verification status
citizen_feedback — post-response ratings (1–5 stars) and comments
broadcasts — multilingual SMS dispatch logs
user_roles — audit table for role changes (OPERATOR/FIELD_RESPONDER/AGENCY_ADMIN)
```
**核心设计决策:**
- `incidents` 上的 `PostGIS` 几何列支持真正的地理空间查询
- `agent_logs` 提供了每项 AI 决策的完整审计追踪(对于灾难响应中的问责制至关重要)
- `tasks` 表同时使用 FK 指向 `incidents` 和 `volunteers` — 一个任务 = 一个志愿者 = 一个事件,确保不会被重复分配
- 所有表都包含用于分析引擎的 `created_at` 时间戳
#### 📊 代码质量亮点
```
backend/
├── agents/ # Each agent is a single-purpose Python module
│ ├── scout.py # ~80 lines — clean, focused ingestion loop
│ ├── analyst.py # Gemini call + structured JSON parsing
│ ├── commander.py # Haversine dispatch logic
│ ├── herald.py # Twilio + Gemini translation pipeline
│ └── vox.py # Vapi webhook handler
├── routers/ # FastAPI routers, one per domain
│ └── crisis.py # 5-stage SOS crisis management AI pipeline
└── config/ # Singleton Supabase client
frontend/
├── src/
│ ├── app/ # Next.js App Router (dashboard, field routes)
│ ├── components/ # IncidentMap, AgentRoom, RoleSwitcher, etc.
│ └── lib/ # store.ts, api.ts, nasaLayers.ts
└── public/
├── field-sw.js # Dedicated field-responder Service Worker
└── sw.js # next-pwa Workbox SW for main dashboard
```
### ⏱️ 第三轮 — 最终演示与展示 *(第 22–24 小时)*
#### 🎯 推荐的现场演示脚本(7 分钟)
**第 1 步 — 展示问题(30 秒)**
**第 2 步 — 触发 9 级演示(2 分钟)**
- 点击仪表盘标头中的 **💥 触发 9 级气旋演示**
- 观察倒计时 → 事件出现在 3D 地图上 → 中央交互模态框在模糊的背景上打开。
- 左侧面板显示协作 Agent 序列:Scout 摄取 → Analyst 评分 → Commander 调度 → Herald 广播
- 右侧面板显示带有脉冲波形的 **VOX VoIP 交互式实时控制**。点击 `AUTHORIZE DISPATCH` 以自动解决危机。
**第 3 步 — 展示 NASA 卫星叠加层(30 秒)**
- 在右侧的 **NASA / NOAA 图像** 下,点击 **洪水检测**
- 观察 3D MapLibre 地图上红外图层中的水体如何变黑。
- “这是 2 天前的实时 NASA MODIS 数据 — 无需 API key”
**第 4 步 — 展示 Telegram 危机网关(1 分钟)**
- 展示左侧的 **Telegram 接入流** 面板。
- 解释 NLP 虚假检测流程:市民提交恐慌文本 -> Analyst 对照 OpenWeatherMap 进行检查 -> 地图上的已验证徽章变为纯绿色。
**第 5 步 — 压力测试(1 分钟)**
- 点击左侧遥测面板中的 **⚡ 压力测试 (100 个请求)**。
- 展示 100 个并发数据库写入完成,并且*吞吐量*和*数据库延迟*等指标在圆形仪表上实时更新。
- “这证明了该系统能够处理真实的灾难级流量”
**第 6 步 — PWA / 离线(30 秒)**
- 在移动设备或单独的浏览器上打开 `/field` 路由
- 转为离线状态(浏览器开发者工具 → 网络 → 离线)
- “现场救援人员仍然可以查看其任务并将其标记为已完成 — 系统会在重新连接后同步”
#### 🚀 创新深度(LIRA 的与众不同之处)
| 标准黑客松项目 | LIRA |
|---|---|
| 单次 AI 调用生成文本 | 5 个协作 agent,每个都有独立的专业角色 |
| 带有图钉的静态地图 | 实时 3D 挤出的严重性塔楼 + 5 种 NASA 卫星叠加层 |
| 仅限英语的警报 | 实时 Gemini 翻译成 5 种印度地区语言 |
| 手动资源分配 | 基于 Haversine 测地线的自动调度与库存扣减 |
| 基础 Web 应用 | 沉浸式、高性能的暗黑美学,带有动态遥测叠加层和微动画 |
| 无离线支持 | 完整的 PWA,配备专用的现场 Service Worker、IndexedDB 同步队列、后台同步 |
| 无可扩展性证明 | 实时 `/load/stress-test` endpoint — 100 次并发插入,以 ms/record 为单位进行测量 |
#### 📈 未来可扩展性路线图
```
Phase 2 — Production Hardening
├── Multi-tenant auth (Supabase Auth + RLS policies per agency)
├── Replace ngrok with a dedicated cloud deployment (Railway / Render)
└── Vapi WebRTC → WhatsApp Business API integration
Phase 3 — Intelligence Expansion
├── Fine-tuned Gemini model on Indian disaster corpora
├── Computer vision: satellite image change detection (flood extent mapping)
└── Predictive routing: road-network-aware dispatch (OSRM integration)
Phase 4 — Government Integration
├── NDMA API webhook ingestion
├── State disaster management authority data feeds
└── SDMA dashboard embed (white-label support)
```
## 🌟 核心功能摘要
### 1. 🤖 协作式 5-Agent 神经引擎
- **Scout** — 每 60 秒轮询一次 GDACS + USGS + OpenWeatherMap
- **Analyst** — Gemini 1.5 Flash NLP 验证、1–10 级严重性评分、虚假检测
- **Commander** — 基于 Haversine 测地线调度最近的 NDRF/医疗/避难所
- **Herald** — Gemini 多语言 SMS(通过 Twilio 支持 5 种印度语言)
- **Vox** — 通过通讯枢纽仪表盘进行 Vapi.ai 外呼 VoIP,支持口头同意授权及自定义地区语言路由(印地语、卡纳达语、泰米尔语、英语)
### 2. 🗺️ 实时情报地图与真实 GPS 资源
- 使用 MapLibre GL JS,呈现倾斜 45 度的 3D 填充挤出严重性塔楼
- 战术遥测标头 — 简洁、响应式的遥测面板,展示危险级别和实时坐标
- 真实 GPS 资源 — 完全集成的数据库资源卡片,展示精确的纬度/经度访问及容量比例
- 带有实时弹窗的资源、志愿者以及经 NLP 验证的市民报告图钉
### 3. 📱 集成的 Telegram AI 网关
- 实时 **Telegram 接入流** 面板
- NLP 虚假检测及与活跃卫星叠加层的交叉验证
- 实时徽章状态从“未验证”变为“已验证 (Gemini AI)”
### 4. ⚡ 经过验证的可扩展性与遥测
- 通过 `asyncio.gather()` 实现 100 个并发异步数据库插入
- 通过动画圆形仪表和波形图,可视化展示实时的吞吐量、数据库延迟、WebSocket 连接及队列深度指标
## 🚀 快速开始
### 终端 1 — 后端
```
cd backend
python -m venv venv
.\venv\Scripts\Activate # Windows PowerShell
pip install -r requirements.txt
# 使用所有 API 密钥填充 backend/.env(参见 .env.example)
python demo_seed.py # Seed database with realistic data
uvicorn main:app --reload --port 8000
```
### 终端 2 — ngrok(用于 Vapi VoIP Webhook)
```
ngrok http 8000
# 复制 https URL → 粘贴到 Vapi Dashboard 的 Server URL 下:
# https://.ngrok-free.app/vox/webhook
```
### 终端 3 — Telegram 摄取 Agent
```
cd backend
.\venv\Scripts\Activate
python -m agents.telegram_bot
```
*(这将启动轮询机器人,读取 SOS 消息并将其传递给 Gemini Analyst)*
### 终端 4 — 前端
```
cd frontend
npm install
# 使用 Supabase URL + Anon Key 填充 frontend/.env.local
npm run dev
```
- **仪表盘**: http://localhost:3000/dashboard
- **现场救援人员**: http://localhost:3000/field
- **API 文档**: http://localhost:8000/docs
## 📱 如何使用 Telegram 集成
1. **创建机器人:** 在 Telegram 上向 [@BotFather](https://t.me/botfather) 发送消息,输入 `/newbot`,并按照步骤获取 API Token。
2. **添加至 `.env`:** 将您的 token 粘贴到 `backend/.env` 中的 `TELEGRAM_BOT_TOKEN` 下。
3. **启动 Agent:** 确保终端 3(`python -m agents.telegram_bot`)正在运行。
4. **触发工作流:** 在 Telegram 上向您的机器人发送消息。您可以粘贴如下恐慌消息:
5. **观察仪表盘:** 该消息将立即出现在“Telegram 接入流”面板上。Analyst Agent 将对其进行评估,检查卫星上下文,并生成一个活跃的突发事件!
## 🔑 所需的 API 密钥
| 服务 | 用途 | 免费层级 |
|---|---|---|
| Supabase | 数据库 + 实时通信 | ✅ 是 |
| Google Gemini | NLP 分析 + 翻译 | ✅ 是 |
| OpenWeatherMap | 实时天气传感器数据 | ✅ 是 |
| Twilio | SMS + WhatsApp 广播 | ✅ 试用 |
| Vapi.ai | 外呼 VoIP 通话 | ✅ 试用 |
| Telegram | 市民报告摄取 | ✅ 是 |
| NASA GIBS / FIRMS | 卫星图像 | ✅ 永久免费,无需 key |
*LIRA — 专为那些没有时间等待的灾难救援人员打造。*
标签:AI智能体, GIS地理信息系统, PWA应用, 实时数据处理, 测试用例, 灾害应急管理, 空间数据分析, 逆向工具