goprocker/ResponseSync

GitHub: goprocker/ResponseSync

结合多智能体 AI 编排、卫星情报与实时地理空间数据的城市灾害响应数字孪生平台,解决应急指挥中多源数据融合与可解释决策的难题。

Stars: 0 | Forks: 1

ResponSync ⚡

AI 驱动的预测性灾害响应数字孪生

结合多智能体 AI 编排、卫星情报和实时市民报告的实时城市模拟 —— 专为 Chennai 洪水走廊构建。

React TypeScript Vite Express Tailwind Supabase PostGIS Gemini Leaflet


## 📖 项目概述 ResponSync 是一个全栈 **AI 决策数字孪生** —— 一个实时虚拟城市呈现平台,将实时天气、IoT 传感器遥测、卫星雷达、市民报告和可解释 AI 融合到一个预测性洪水响应的指挥平台中。 该平台专为南印度最易发生洪水的城市区域 **Chennai Velachery–Adyar 洪水走廊** 构建。它将 12 智能体 AI 编排 pipeline(由 Google Gemini 驱动)与实时地理空间情报相结合,以自主评估威胁、模拟连锁影响、优化疏散路线并调度资源 —— 同时为应急协调员提供透明、可解释的推理过程。 ## ✨ 核心功能 ### 🗺️ 数字孪生地图 交互式 Leaflet 地图呈现实时城市状态 —— 具有动态严重程度阴影的风险区、IoT 传感器节点(水位计、雨量计、流量传感器)、应急资源、避难所、医院以及市民报告标记。基于 Sentinel-1 SAR 卫星数据的实时洪水多边形叠加层。 ### 🤖 12 智能体 AI 编排 Pipeline 十二个专门的 Gemini 智能体在一个协调的 pipeline 中协同工作: | 智能体 | 职责 | |-------|------| | Hydro-Risk Ingestion | 摄入水位和降雨数据 | | Weather Agent | 实时天气情报与预报 | | Flood Prediction Agent | 水动力淹没建模 | | Traffic Agent | 道路网络与拥堵分析 | | Infrastructure Agent | 电网、排水系统、桥梁状态 | | Satellite Agent | Sentinel-1 SAR 与 NASA FIRMS 数据源 | | Citizen Intelligence Agent | 报告验证与趋势分析 | | Resource Planner Agent | 最优资源分配 | | Evacuation Agent | 安全路线计算 | | Simulation Agent | 假设场景建模 | | Decision & Resource Agent | 战略响应规划 | | Explainability Agent | 人类可读的 AI 推理 | 该 pipeline 最后由 **Coordinator Agent** 总结,将所有智能体的输出综合为带有置信度分数的统一指挥建议。 ### 🌊 假设灾害模拟工作室 跨多种灾害类型(洪水、气旋、地震、野火、山体滑坡、海啸)运行预测性模拟,支持配置多种参数 —— 降雨强度、大坝排放量、运河堵塞百分比、桥梁关闭情况以及与高潮位的重叠。输出内容包括风险时间轴、受影响人口估计和资源部署计划。 ### 🔍 历史场景匹配 (RAG) 检索增强生成引擎,可将当前条件与 Chennai 历史灾害知识库(2015 年大暴雨、2021 年气旋 Nivar、2023 年气旋 Michaung)进行匹配。返回相似度得分、提取的策略以及 AI 优化的建议。 ### 💬 可解释 AI (XAI) 深度剖析 每项 AI 建议都包含完整的推理链 —— 核心逻辑、支持性证据数据点、置信度百分比、风险解释以及替代性风险评估。协调员可以深入查看任何建议,以了解 AI 做出特定决策的 *原因*。 ### 🚨 市民灾害报告门户 市民可提交带有地理标记的紧急报告(积水、被困市民、道路堵塞、医疗急救、停电、基础设施损坏),系统将通过 Gemini 进行基于 AI 的验证评分和自动分类。 ### 📡 卫星情报数据源 - **ESA Sentinel-1 SAR** —— 用于洪水范围测绘的 C 波段合成孔径雷达,支持后向散射强度分析 - **NASA FIRMS** —— 用于洪水水体反射和结构淹没的近实时热异常检测 ### ⚡ 实时 SSE 广播引擎 用于实时更新的 Server-Sent Events 推送引擎 —— 新的市民报告、智能体活动日志、自动警报、FCM 推送通知和 SMS 网关广播会瞬间传播给所有连接的仪表盘客户端。 ### 🔐 JWT 身份验证与 RBAC 具有五种机构配置的基于角色的访问控制:TNSDMA 当局、消防与救援、交警、医疗急救和市民。每个角色在调度、广播和报告管理方面都有明确的权限范围。 ### 🛣️ 洪水感知疏散路线规划 通过 OSRM 进行动态路线规划,具备实时危险规避功能 —— 自动绕开被淹没的地下通道、决堤的泄洪区以及积水的大厅。返回折线航点、安全分数以及详细的转弯指示。 ### 📲 推送通知与 SMS 网关 针对设备定向警报的 FCM 推送通知服务,以及集成了 C-DOT 政府 SMS 网关的大规模紧急广播,并带有送达追踪功能。 ## 🏗️ 系统架构 ResponSync 是一个 **TypeScript 单体应用** —— 一个统一的 Express 服务器在中间件模式下同时托管 API 后端和基于 Vite 的 React SPA。在开发环境中无需独立的前端/后端进程。 ### 高层架构 ``` flowchart TD User(["👤 Citizen / Authority"]) subgraph Client ["🖥️ Frontend SPA"] Landing["Landing Page
Portal Router"] Dashboard["Dashboard App
Tab Navigation"] TwinMap["Digital Twin Map
Leaflet + Risk Zones"] MultiAgent["Authority Dashboard
12-Agent Pipeline"] SimStudio["Simulation Studio
What-If Engine"] CitizenPortal["Citizen Portal
Report Submission"] Analytics["Analytics Hub
Fusion Dashboard"] end subgraph Server ["⚡ Express Backend (TypeScript)"] SSE["SSE Broadcast
Engine"] Auth["JWT Auth
RBAC Middleware"] API["REST API
Routes"] end subgraph AI ["🤖 AI Agent Layer"] Pipeline["12-Agent
Orchestration Pipeline"] Simulation["What-If
Simulation Engine"] ScenarioMatch["Historical
Scenario Matcher"] XAI["Explainability
Engine"] Validation["Citizen Report
AI Validator"] end subgraph External ["🌐 External Services"] Gemini["Google Gemini
2.5 Flash"] OSRM["OSRM
Route Engine"] OpenWeather["OpenWeather
API"] Sentinel["ESA Sentinel-1
SAR"] FIRMS["NASA FIRMS
Hotspots"] end subgraph Data ["🗄️ Data Layer"] Supabase[("Supabase
PostgreSQL + PostGIS")] InMemory["In-Memory
Fallback Cache"] end User --> Landing & Dashboard Landing --> Dashboard Dashboard --> TwinMap & MultiAgent & SimStudio & CitizenPortal & Analytics Dashboard -->|SSE| SSE Dashboard -->|REST| API API --> Auth API --> Pipeline & Simulation & ScenarioMatch & XAI & Validation Pipeline --> Gemini Simulation --> Gemini ScenarioMatch --> Gemini XAI --> Gemini Validation --> Gemini API --> OSRM & OpenWeather & Sentinel & FIRMS API --> Supabase & InMemory ``` ### 12 智能体 AI Pipeline 流程 ``` sequenceDiagram participant UI as 🖥️ Dashboard participant API as ⚡ Express Server participant G as 🤖 Gemini 2.5 Flash UI->>API: POST /api/ai/multiagent-run (zones, sensors, weather) Note over API: Phase 1: Data Ingestion API->>G: Hydro-Risk Ingestion Agent API->>G: Weather Intelligence Agent API->>G: Satellite Reconnaissance Agent G-->>API: Sensor + weather + SAR analysis Note over API: Phase 2: Prediction & Analysis API->>G: Flood Prediction Agent API->>G: Traffic & Infrastructure Agents API->>G: Citizen Intelligence Agent G-->>API: Inundation forecasts, road status, report trends Note over API: Phase 3: Decision & Optimization API->>G: Resource Planner + Evacuation Agents API->>G: Decision & Resource Agent API->>G: Simulation Agent G-->>API: Resource plans, routes, scenario models Note over API: Phase 4: Synthesis & Explanation API->>G: Explainability Agent API->>G: Coordinator Agent (Final Synthesis) G-->>API: Unified command recommendation API-->>UI: Full pipeline result (12 agents + coordinator) ``` ## 🗄️ 数据库 Schema 数据模型运行在 **带有 PostGIS 扩展的 Supabase PostgreSQL** 上。Schema 定义在 [`supabase_schema.sql`](file:///x:/downloads/responsesync/supabase_schema.sql) 中。当未配置 Supabase 凭证时,应用程序会回退到内存缓存。 ``` erDiagram USER ||--o{ REPORT : "submits" REPORT }o--|| RISK_ZONE : "located in" RISK_ZONE ||--o{ EVACUATION_ROUTE : "evacuates from" EVACUATION_ROUTE }o--|| SHELTER : "routes to" RESOURCE }o--o| RISK_ZONE : "assigned to" DECISION_KNOWLEDGE ||--|| SIMULATION : "informs" REPORT { text id PK text reporter_name text hazard_type "waterlogging | road_submerged | trapped_citizens | medical | power_outage" text severity "critical | high | medium | low" text status "pending | verified | in_progress | resolved" geometry geom "PostGIS POINT(4326)" int ai_validation_score text ai_summary } RISK_ZONE { text id PK text name float risk_score "0–100" text priority_level "CRITICAL | HIGH | MEDIUM | LOW" int population_at_risk float predicted_water_level_30m text status "safe | monitoring | warning | evacuating | submerged" geometry boundary_geom "PostGIS POLYGON(4326)" } RESOURCE { text id PK text name text type "boat | pump | ambulance | ndrf | bus | fire_truck" text status "available | en_route | deployed | maintenance" text assigned_zone_id FK } SHELTER { text id PK text name int capacity int current_occupancy text status "open | filling_fast | full | closed" boolean has_medical_unit } HOSPITAL { text id PK text name int total_beds int available_icu_beds text status "operational | strained | diverting | flooded" boolean trauma_center_active } SIMULATION { text id PK text title float rainfall_mm_hr float dam_discharge_m3s int effectiveness_score text outcome text lessons_learned } DECISION_KNOWLEDGE { text id PK text historical_event int similarity_pct text retrieved_strategy text ai_refinement } EVACUATION_ROUTE { text id PK text origin_name text destination_shelter_name int safety_score_pct text[] hazards_avoided } ``` ## 📁 项目结构 ``` responsesync/ ├── 📦 package.json # Dependencies & scripts (dev/build/start) ├── 🔧 vite.config.ts # Vite + React + Tailwind CSS v4 plugin ├── 📝 tsconfig.json # TypeScript configuration (ES2022, bundler) ├── 🌐 index.html # SPA entry — Leaflet CSS, Google Fonts ├── 📋 supabase_schema.sql # Full PostgreSQL/PostGIS schema + seed data ├── 🔑 .env.example # Environment variables template ├── 📖 metadata.json # Project metadata & capabilities │ ├── src/ │ ├── main.tsx # React DOM mount point │ ├── App.tsx # Root component — URL-based routing │ ├── index.css # Global styles (Tailwind v4 + CSS vars) │ │ │ ├── landing/ # ── LANDING PAGE ── │ │ └── LandingPage.tsx # Public landing with portal routing │ │ │ ├── dashboard/ # ── DASHBOARD APP ── │ │ ├── DashboardApp.tsx # Tab-based layout (5 views) │ │ └── components/ │ │ ├── Header.tsx # Navigation header + role switcher │ │ ├── DigitalTwinMap.tsx # Leaflet map — zones, sensors, resources │ │ ├── AuthorityDashboard.tsx # 12-agent AI pipeline control │ │ ├── SimulationStudio.tsx # What-if disaster simulator │ │ ├── CascadingImpactView.tsx # Multi-disaster cascading analysis │ │ ├── CitizenPortal.tsx # Report submission & tracking │ │ ├── DashboardOverview.tsx # KPI overview panel │ │ ├── AnalyticsHub.tsx # Analytics fusion dashboard │ │ ├── IncidentsPanel.tsx # Incident list & status tracker │ │ ├── ResourcesPanel.tsx # Resource fleet status │ │ ├── SheltersPanel.tsx # Shelter capacity tracker │ │ ├── HospitalsPanel.tsx # Hospital bed availability │ │ ├── SettingsPanel.tsx # App settings │ │ ├── ExplainabilityModal.tsx # XAI reasoning deep-dive modal │ │ ├── ResourceDispatchModal.tsx # Resource dispatch action modal │ │ └── AlertNotificationBanner.tsx # Real-time alert banner │ │ │ ├── hooks/ # ── REACT HOOKS ── │ │ ├── useSSEStream.ts # SSE EventSource consumer │ │ └── useEvacuationRoute.ts # OSRM-powered route calculator │ │ │ ├── shared/ # ── SHARED TYPES & DATA ── │ │ ├── types.ts # TypeScript interfaces (18 domain types) │ │ ├── cascadingTypes.ts # Multi-disaster cascading impact types │ │ ├── cascadingData.ts # Cascading impact mock data │ │ └── mockDigitalTwinData.ts # Digital twin seed data │ │ │ └── backend/ # ── EXPRESS BACKEND (TypeScript) ── │ ├── server.ts # Express server — all API routes + Vite middleware │ ├── authMiddleware.ts # JWT auth, RBAC, role permissions │ ├── notificationsService.ts # FCM push + SMS gateway service │ └── satelliteService.ts # Sentinel-1 SAR + NASA FIRMS data service │ ├── scripts/ # ── UTILITY SCRIPTS ── │ ├── populate_db.ts # Supabase database seeder │ └── check_supabase.ts # Supabase connection health check │ └── docs/features/ # ── FEATURE DOCUMENTATION ── ├── 01_digital_twin_map.md ├── 02_multi_agent_system.md ├── 03_simulation_studio.md ├── 04_scenario_matching.md ├── 05_explainable_ai.md ├── 06_citizen_portal.md ├── 07_supabase_persistence.md └── 08_realtime_sse_broadcasts.md ``` ## 🚀 快速开始 ### 前置条件 | 需求 | 版本 | |-------------|---------| | Node.js | 20+ | | npm | 10+ | ### 1. 克隆并安装 ``` git clone https://github.com/NINJA981/ResponseSync.git cd ResponseSync npm install ``` ### 2. 配置环境变量(可选) ``` cp .env.example .env ``` 填入你可用的任何凭证: | 变量 | 描述 | 必需 | |----------|-------------|----------| | `GEMINI_API_KEY` | 用于 AI 智能体 pipeline 的 Google Gemini API 密钥 | 可选 — 缺失时 AI 功能将优雅降级 | | `SUPABASE_URL` | Supabase 项目 URL | 可选 — 回退到内存存储 | | `SUPABASE_ANON_KEY` | Supabase 匿名密钥 | 可选 | | `OPENWEATHER_API_KEY` | 用于获取实时天气的 OpenWeather API 密钥 | 可选 — 使用模拟天气数据 | | `MAPBOX_API_KEY` | Mapbox API 密钥 | 可选 | | `JWT_SECRET` | 用于 JWT token 签名的密钥 | 可选 — 使用内置默认值 | ### 3. 启动开发服务器 ``` npm run dev ``` 此单一命令将启动统一的 Express + Vite 服务器。API 后端和 React 前端均由同一进程提供服务。 ### 4. 访问平台 | 服务 | URL | |---------|-----| | 着陆页 | [http://localhost:3000](http://localhost:3000) | | 数字孪生地图 | [http://localhost:3000/dashboard](http://localhost:3000/dashboard) | | 指挥中心 | [http://localhost:3000/authority](http://localhost:3000/authority) | | 市民门户 | [http://localhost:3000/citizen](http://localhost:3000/citizen) | | 模拟工作室 | [http://localhost:3000/simulation](http://localhost:3000/simulation) | | 分析中心 | [http://localhost:3000/analytics](http://localhost:3000/analytics) | | 健康检查 API | [http://localhost:3000/api/health](http://localhost:3000/api/health) | ## 📡 API 参考 ### 身份验证与 RBAC | 方法 | Endpoint | 描述 | |--------|----------|-------------| | `POST` | `/api/auth/login` | 带有角色选择的 JWT 登录 | | `GET` | `/api/auth/me` | 获取当前已认证的用户 | | `POST` | `/api/auth/switch-role` | 切换当前的机构角色 | ### 核心数据 | 方法 | Endpoint | 描述 | |--------|----------|-------------| | `GET` | `/api/health` | 服务器健康状态 + 服务状态 | | `GET` | `/api/weather` | 实时天气(OpenWeather 或模拟数据) | | `GET` | `/api/risk` | 汇总的风险区域摘要 | | `GET` | `/api/resources` | 资源车队状态 | | `GET` | `/api/recommendations` | 活跃的 AI 建议 | | `GET` | `/api/events` | SSE 流(实时推送) | ### 市民报告 | 方法 | Endpoint | 描述 | |--------|----------|-------------| | `GET` | `/api/reports` | 列出所有市民报告 | | `POST` | `/api/reports` | 提交新的灾害报告 | ### AI Endpoint | 方法 | Endpoint | 描述 | |--------|----------|-------------| | `POST` | `/api/ai/multiagent-run` | 运行完整的 12 智能体 pipeline | | `POST` | `/api/ai/simulation` | 假设性灾害模拟 | | `POST` | `/api/ai/validate-report` | AI 报告验证与评分 | | `POST` | `/api/ai/explainability` | XAI 深度剖析推理 | | `POST` | `/api/ai/scenario-match` | 历史场景 RAG 匹配 | | `POST` | `/api/ai/cascading-impact` | 多灾害连锁影响预测 | | `POST` | `/api/ai/evacuation-route` | 具备洪水感知的 OSRM 路线规划 | ### 通知 | 方法 | Endpoint | 描述 | |--------|----------|-------------| | `POST` | `/api/notifications/fcm/register` | 注册 FCM 推送 token | | `POST` | `/api/notifications/fcm/send` | 广播 FCM 推送警报 | | `POST` | `/api/notifications/sms/send` | 紧急 SMS 网关调度 | | `GET` | `/api/notifications/history` | 通知广播历史记录 | ### 卫星情报 | 方法 | Endpoint | 描述 | |--------|----------|-------------| | `GET` | `/api/gis/satellite/sentinel-sar` | Sentinel-1 SAR 洪水多边形 | | `GET` | `/api/gis/satellite/nasa-firms` | NASA FIRMS 热点 | | `GET` | `/api/gis/satellite/metadata` | 活跃卫星星座状态 | ### 基础设施数据 | 方法 | Endpoint | 描述 | |--------|----------|-------------| | `GET` | `/api/shelters` | 应急避难所列表 + 容量 | | `GET` | `/api/evacuation` | 默认疏散路线摘要 | | `GET` | `/api/decision-knowledge` | 历史决策知识库 | | `GET` | `/api/simulations` | 过往模拟历史 | ## ⚙️ 技术栈 ### 前端 | 技术 | 用途 | |-----------|---------| | React 19 | 具有并发渲染的 UI 组件库 | | TypeScript ~5.8 | 类型安全的开发环境 | | Vite 6 | 带有 HMR 的开发服务器(以 Express 中间件模式嵌入) | | Tailwind CSS 4 | 通过 Vite 插件实现的原生实用工具样式 | | Leaflet 1.9 | 用于数字孪生的交互式地图渲染 | | Lucide React | 图标库 | | Motion (Framer) | 动画库 | ### 后端 | 技术 | 用途 | |-----------|---------| | Express 4 | HTTP 服务器与 API 路由 | | tsx | 用于开发的 TypeScript 执行环境 | | JSON Web Token | 带有基于角色访问控制的 JWT 身份验证 | | Google GenAI SDK | 用于 12 智能体 pipeline 的 Gemini 2.5 Flash 集成 | | Supabase JS | PostgreSQL + PostGIS 客户端 | ### 基础设施 | 技术 | 用途 | |-----------|---------| | Supabase (PostgreSQL) | 具有 PostGIS 空间扩展的托管数据库 | | PostGIS | 地理空间索引与空间查询 | | OSRM | 用于疏散路线的开源路径规划引擎 | | OpenWeather API | 实时天气数据 | | ESA Sentinel-1 | SAR 卫星洪水检测 | | NASA FIRMS | 近实时热异常数据源 | ## 🔧 脚本命令 | 命令 | 描述 | |---------|-------------| | `npm run dev` | 在端口 3000 上启动统一的开发服务器(Express + Vite) | | `npm run build` | 生产环境构建(Vite 前端 + esbuild 后端 | | `npm start` | 运行生产环境构建 | | `npm run preview` | Vite 前端构建预览 | | `npm run lint` | TypeScript 类型检查 (`tsc --noEmit`) | | `npm run clean` | 移除构建产物 | ## 📄 许可证 MIT

ResponSync — 用于预测性灾害响应的 AI 数字孪生 © 2026

NINJA981 使用 ⚡ 构建

标签:PyRIT, 地理空间分析, 多智能体系统, 应急管理, 数字孪生, 测试用例, 灾害响应, 自动化攻击