Construction Safety Risk Analysis System Based on RAG + LLM
基于检索增强生成与大语言模型的施工安全风险智能决策平台
展开 / 收起
本系统是一个面向 建筑工程施工安全 领域的智能风险分析平台,以 53,000+ 条 OSHA 真实事故记录 为知识库,结合 检索增强生成(RAG) 与 大语言模型(DeepSeek),为施工现场提供智能化的安全决策支持。
系统核心能力:
- 🎯 事故预评估 — 输入施工计划、工种、环境参数,自动输出结构化风险报告
- 🔍 语义案例检索 — 基于 FAISS 向量索引的毫秒级相似事故检索
- 📈 可视化仪表盘 — 实时环境风险监测与事故趋势分析
- 📊 因果推断分析 — 基于 PSM(倾向得分匹配)的环境因素影响量化
- 🖥️ 一键部署 — PyInstaller 打包,无需 Python 环境即可运行
RAG(检索增强生成):将大规模事故知识库与 LLM 推理能力结合,让模型基于真实案例给出有据可依的安全建议,而非凭空生成。
传统方式: 人工查阅规范 → 经验判断 → 主观评估
↓
本系统: 语义检索历史案例 → LLM 结构化分析 → 量化风险评估
| 传统模式 | 本系统 |
|---|---|
| 人工查阅事故报告 | FAISS 毫秒级语义检索 |
| 经验主观判断 | LLM 结构化推理 |
| 单一因素分析 | 多维环境因素关联 |
| 事后总结 | 事前预评估 |
| 静态报表 | 实时可视化仪表盘 |
┌─────────────────────────────────────────────────────────────────────┐
│ 施工安全风险智能分析系统 │
├──────────────────┬──────────────────┬───────────────────────────────┤
│ 数据层 │ 分析层 │ 展示层 │
│ │ │ │
│ OSHA 事故数据 │ RAG 语义检索 │ Streamlit Web UI │
│ 53,000+ 记录 │ DeepSeek LLM │ Plotly 可视化 │
│ FAISS 向量索引 │ PSM 因果推断 │ 风险仪表盘 │
│ 环境参数数据 │ 本地兜底评估 │ 结构化报告 │
│ │ │ │
│ 📦 存储 │ 🧠 推理 │ 📊 交互 │
└──────────────────┴──────────────────┴───────────────────────────────┘
数据流向:
用户输入(工种/环境/计划)
↓
语义向量化(sentence-transformers)
↓
FAISS 相似案例检索 + 关键词混合打分
↓
构建 Prompt(检索结果 + 用户输入)
↓
DeepSeek LLM 结构化推理
↓
输出:风险等级 / 危险源 / 预防措施 / PPE / 引用案例
输入施工计划、工种、环境参数(温度/风速/湿度),系统自动输出结构化风险报告
| 输出项 | 说明 |
|---|---|
| 1-4 级量化评估 | |
| 💥 潜在危险源 | 基于历史案例识别 |
| 📋 管理薄弱点 | 制度与流程缺陷 |
| 🛡️ 预防措施 | 针对性安全建议 |
| ⛑️ 必备 PPE | 个人防护装备清单 |
| 📚 引用案例 | 相似历史事故参考 |
混合检索策略:语义相似度 + 关键词匹配,双重打分确保召回质量
- ⚡ 向量化:
sentence-transformers/all-MiniLM-L6-v2生成 384 维语义向量 - 🔎 索引:FAISS 向量索引,支持毫秒级 Top-K 检索
- 🎯 混合打分:
hybrid_score = α × semantic + β × keyword - 🌐 多语言扩展:中英关键词提示扩展(高处/坠落/触电 ↔ fall/electrocution)
实时环境监测 + 事故画像 + 趋势分析
- 🌡️ 环境风险仪表 — 温度、风速、湿度三维监测
- 📈 事故月度趋势 — 时间序列分析
- 🗺️ 事故热力图 — 地理分布可视化
- 👥 事故画像 — 工种、危害类型、季节分布
- 🔗 环境关联 — 温度/风速与事故率相关性
基于倾向得分匹配(Propensity Score Matching)量化环境因素对事故严重程度的因果效应
- 控制混杂变量(工种、季节、地区)
- 估计处理效应(ATE / ATT)
- 输出匹配样本与效应报告
Construction-Safety-Risk-Analysis-System/
├── app.py # 🖥️ Streamlit 主应用(Web UI)
├── launcher.py # 🚀 打包后启动入口
├── main.py # 📋 批量结构化抽取脚本
├── requirements.txt # 📦 Python 依赖清单
├── ConstructionSafetyAssistant.spec # 🔧 PyInstaller 打包规格
├── settings.example.json # ⚙️ 配置模板(不含密钥)
├── run_app.bat # ▶️ Windows 一键启动
├── stop_app.bat # ⏹️ 停止服务
├── .gitignore # 🔒 Git 忽略规则
├── LICENSE # 📄 MIT 许可证
│
├── rag/ # 🔍 RAG 检索模块
│ ├── config.py # ├── 数据与索引路径配置
│ ├── index_builder.py # ├── FAISS 索引构建
│ ├── retrieval.py # ├── 检索与混合打分
│ ├── prompting.py # ├── 提示词构建
│ ├── extraction_schema.py # ├── 结构化输出校验
│ └── local_pre_assessment.py # └── 本地兜底预评估
│
├── llm/ # 🧠 LLM 调用模块
│ └── client.py # └── DeepSeek 配置解析与调用
│
├── analysis/ # 📊 因果分析模块
│ └── causal_psm.py # └── 倾向得分匹配(PSM)
│
├── sensors/ # 📡 传感器模块
│ └── api.py # └── 传感器读取接口(当前 mock)
│
├── scripts/ # 🛠️ 工具脚本
│ ├── start_app.py # ├── 开发态启动逻辑
│ ├── stop_app.ps1 # ├── 停止服务
│ ├── build_windows_installer.py # ├── 一键生成安装器
│ └── installer_bootstrap.py # └── 安装器引导脚本
│
├── tests/ # ✅ 测试用例(12 项)
├── indexes/ # 🗂️ FAISS 索引与元数据
├── results/ # 📈 分析结果输出
├── release/ # 📦 发布产物(安装器)
├── docs/screenshots/ # 📸 系统截图
├── 文档信息归档/ # 📚 项目文档归档
└── Injury Severity.CSV # 🗃️ OSHA 事故数据集(53,000+)
| 类别 | 技术 | 说明 |
|---|---|---|
| 🌐 Web 框架 | Streamlit | 快速构建数据应用 |
| 🧠 大语言模型 | DeepSeek Chat | OpenAI 兼容接口 |
| 🔍 向量检索 | FAISS | Meta 开源向量数据库 |
| 🔤 文本嵌入 | sentence-transformers | all-MiniLM-L6-v2 |
| 📈 可视化 | Plotly | 交互式图表 |
| 📊 数据处理 | Pandas / NumPy | 数据分析与处理 |
| 🧪 因果推断 | statsmodels / scipy | PSM 倾向得分匹配 |
| 📦 打包分发 | PyInstaller | Windows 安装器生成 |
| 🐍 运行环境 | Python 3.12+ | 主语言 |
git clone https://github.com/jensenzhong/Construction-Safety-Risk-Analysis-System-Based-on-RAG-LLM.git
cd Construction-Safety-Risk-Analysis-System-Based-on-RAG-LLMpython -m venv .venv
# Windows PowerShell
.venv\Scripts\Activate.ps1
# Windows CMD
.venv\Scripts\activate.batpip install -r requirements.txt复制示例配置文件并填入你的 DeepSeek API Key:
cp settings.example.json settings.json编辑 settings.json:
{
"deepseek": {
"api_key": "your_api_key_here",
"base_url": "https://api.deepseek.com/v1",
"model": "deepseek-chat"
}
}或使用环境变量:
# Windows PowerShell
$env:DEEPSEEK_API_KEY="your_api_key"
# Linux / macOS
export DEEPSEEK_API_KEY="your_api_key"# 方式 A:使用项目脚本(推荐)
run_app.bat
# 方式 B:直接运行
streamlit run app.py --server.address 127.0.0.1 --server.port 8501💡 提示:浏览器访问
http://127.0.0.1:8501
默认使用 Injury Severity.CSV,包含 53,000+ 条 OSHA 真实事故记录。
| 字段 | 说明 |
|---|---|
abstract |
事故描述文本(用于检索与分析) |
event_keyword |
事故关键词分类 |
degree_of_inj_x |
伤害严重程度 |
date |
事故发生日期 |
temp / wind_speed / wind_deg |
环境参数 |
python -m rag.index_builder --device cpu生成文件:
indexes/faiss.index— FAISS 向量索引indexes/metadata.parquet— 结构化元数据
pytest -q测试覆盖(12 项):
| 模块 | 测试内容 |
|---|---|
| RAG | 引用过滤与约束验证 |
| 预评估 | 输出结构完整性 |
| LLM | DeepSeek 配置解析 |
| 启动器 | 配置播种逻辑 |
| PSM | 因果分析健全性 |
python scripts/build_windows_installer.py产物:release/ConstructionSafetyAssistant-Installer.exe
- 运行安装器,按提示完成安装
- 桌面 / 开始菜单启动 Construction Safety Assistant
- 浏览器自动打开
http://127.0.0.1:8501
💡 打包版本已内置 Python 运行时和所有依赖,无需额外安装。
| 问题 | 解决方案 |
|---|---|
| 启动后浏览器没打开 | 手动访问 http://127.0.0.1:8501 |
| 提示缺少索引文件 | 运行 python -m rag.index_builder --device cpu |
| DeepSeek 报 API Key 缺失 | 检查 settings.json 或环境变量 DEEPSEEK_API_KEY |
| 查看启动日志 | %LOCALAPPDATA%\ConstructionSafetyAssistant\launcher.log |
| 如何停止服务 | 运行 stop_app.bat 或关闭终端窗口 |
本项目已配置 .gitignore 保护敏感文件:
- ✅
settings.json(含 API Key)不会被提交 - ✅
.env文件不会被提交 - ✅
settings.example.json提供安全配置模板
🚨 请勿将真实 API Key 提交到公开仓库。
- 接入真实传感器(MQTT / HTTP / 串口)
- 增加多工种风险模板库
- 引入用户权限与审计日志
- 支持多项目 / 多工地数据隔离
- 增强检索评估指标与可解释性
- 支持更多 LLM 后端(GPT-4、Claude、通义千问)
- 移动端适配与小程序版本
本项目采用 CC BY-NC 4.0 许可证。
| 允许 | 禁止 |
|---|---|
| ✅ 学习与研究使用 | ❌ 商业用途 |
| ✅ 修改与二次创作 | ❌ 未署名使用 |
| ✅ 非商业分享与传播 | ❌ 去除版权声明 |
⚠️ 商业使用须获得作者书面授权。 如需商业合作请联系作者。
ℹ️ 本项目基于公开的 OSHA 事故数据集进行研究开发。系统中的传感器数据为模拟数据,仅用于展示系统设计理念和核心功能。
施工安全风险智能分析系统 · 2025
Copyright © 2025 Jensen Zhong. All commercial rights reserved.
Made with ❤️ by Jensen Zhong


