rasinmuhammed/yaqzan
GitHub: rasinmuhammed/yaqzan
Yaqzan 是一个将确定性灾害模拟引擎与推理大模型结合的实时 AI 应急指挥决策演示系统,旨在解决灾难响应中调度员的认知瓶颈问题。
Stars: 0 | Forks: 0
YAQZAN
AI Incident Commander
2018 年 8 月,喀拉拉邦的库塔纳德地区经历了一个世纪以来最严重的洪灾。应急指挥中心并非因为缺乏数据而瘫痪,而是因为调度员无法足够快地处理涌入的海量求助 WhatsApp 消息、中断的遥测数据以及相互冲突的报告。
仪表盘可以向你展示医院发电机正在发生故障。但它们无法告诉你,在接下来的十分钟内,该如何重新规划五十艘被困救生艇的路线,才能挽救 ICU 患者的生命。
Yaqzan(阿拉伯语意为“警惕者”)解决了灾难响应中的认知瓶颈问题。这是一个实时的指挥室模拟系统,其中 AI 模型不仅负责传输数据,还能主动进行推理分析。
我们构建 Yaqzan 是为了证明,当您将推理模型(K2 Think V2)与确定性模拟引擎相连接时,您将获得一位能够持续进行高速战术分诊的应急指挥官。
## 核心架构
Yaqzan 的架构围绕着一个由三部分组成的闭环设计:
**1. 模拟引擎**
引擎在本地使用 Python 运行,模拟库塔纳德发生的洪灾事件。它基于图数据集对物理现象进行建模。该图由 `Nodes`(城镇、医院、泵站)和 `Edges`(道路)组成。每隔两秒,模拟系统就会推进一个步长。各节点的水位会上升,边缘的通行能力会下降,基站会离线,同时预定义的场景注入事件(如市民报告或大坝决堤)会被触发并注入系统。
**2. K2 AI 指挥官**
我们没有用非结构化文本来冲击模型,而是将整个城市状态编译成一个紧凑的 JSON payload。K2 会摄取该状态,查看传入的市民报告,并生成实时的推理轨迹。您可以在屏幕上观看它的思考过程:识别被困市民、检查水深、核实医院容量,并起草救援行动。
**3. 真值校验器**
安全是不可妥协的。在任何 AI 指令到达地图之前,都会先经过我们的校验器。AI 模型在严格的“封闭世界”假设下运行。如果 AI 幻觉出一个在状态 payload 中不存在的救生艇,或者试图让卡车通过无法通行的道路,校验器将明确拒绝该指令。它会强制 AI 在下一个周期纠正其错误。
## 技术实现细节
### 后端(FastAPI + Asyncio)
后端负责维护模拟状态并处理 WebSocket 流。
* **引擎 (`app.sim.engine`)**:确定性物理模型。它计算水深变化、基础设施故障概率以及单元移动向量。
* **指挥官循环 (`app.commander`)**:与模拟系统并行运行的异步循环。每隔 `N` 个步长,它会序列化 `StateSnapshot`,将其发送给 K2 LLM,并等待 Command Plan 响应。
* **WebSockets (`app.main`)**:以 60Hz 的频率向所有已连接的前端客户端广播 `StateSnapshot` 及任何 AI 推理片段。
### 前端(React + Vite)
前端是一个 React 应用程序,旨在模拟高风险的应急指挥中心。
* **实时 AI 分诊 (`ReportsDash.tsx`)**:当市民通过公共门户提交事故报告时,它会立即显示在报告仪表盘中。AI 会实时输出其战术思考过程,剥离对话填充词,完全专注于单元调度和生存指令。
* **询问指挥官 AI (`ChatPanel.tsx`)**:调度员可以向 AI 提出复杂的战略问题。例如:“我们只剩下一艘船了,但有两起紧急情况。我们该救谁?”AI 会引用实际水深和单元位置来证明其取舍决策的合理性。
* **地图可视化 (`MapPanel.tsx`)**:一个自定义的 SVG 渲染引擎,用于绘制图节点、道路边缘,并根据 WebSocket payload 实时动态显示单元的移动。
### 人机协同操作
Yaqzan 只提供建议,从不直接指挥。AI 生成的每项救援操作都会进入队列等待人工批准。系统会生成一个 `RescueOp` JSON 对象,其中包含目标节点、分配的单元以及优先级。在单元于地图上实际移动之前,操作员必须明确点击“批准”。
## 模组与自定义
### 创建场景
您可以通过修改 `backend/app/sim/scenarios` 中的 JSON 文件来创建全新的灾难场景。场景文件定义了:
* 基础图(节点、边缘、设施)。
* 可用的响应单元(船只、直升机、卡车)。
* `injects` 数组,用于指定要在特定模拟步长触发的准确文本事件和严重程度级别。
### Prompt 工程
系统 prompt 位于 `backend/app/commander/prompts.py` 中。如果您想改变分诊 AI 的行为方式,或者指挥官 AI 对聊天的响应严格程度,您可以编辑这些文件。这些 prompt 非常敏感,需要明确的负面约束(例如,禁止 AI 输出 XML 标签)。
## 安装与部署
您可以在本地运行整个模拟系统。
**1. 启动后端**
后端需要 Python 3.11+。
```
cd backend
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
cp ../.env.example .env
```
如果您拥有 K2 凭证,请将其添加到您的 `.env` 文件中。如果没有,系统将自动回退到确定性的“脚本化”指挥官,这样您仍然可以在没有互联网连接的情况下在本地运行演示。
```
uvicorn app.main:app --port 8000
```
**2. 启动前端**
前端使用 React 和 TailwindCSS 构建。
```
cd frontend
npm install
npm run dev
```
指挥室将可通过 `http://localhost:5173` 访问。
## 演示模式
如果您正在向评审团展示 Yaqzan,请在您的 localhost URL 后附加 `?film=true`。这将启用电影演示模式。它会隐藏开发按钮,并允许您通过按下键盘上的数字键(1、2、3)来按需触发大规模危机注入事件。
## 测试
模拟系统是完全确定性的。您可以运行测试套件来验证洪水蔓延、校验器拒绝机制以及 JSON 往返解析。
```
cd backend
python -m pytest
```
专为 MBZUAI/IFM K2 展示而构建。
标签:AI智能体, DLL 劫持, 决策辅助, 大语言模型, 库, 应急响应, 模拟仿真, 灾害管理, 自动化攻击, 计算机取证, 逆向工具