- Python 60.6%
- JavaScript 14.7%
- TypeScript 14.5%
- CSS 5.1%
- HTML 4.8%
- Other 0.3%
| artifacts | ||
| data/simulated | ||
| docs | ||
| functions | ||
| migrations | ||
| scripts | ||
| src/fatigue_demo | ||
| tests | ||
| web | ||
| .dockerignore | ||
| .env.example | ||
| .gitattributes | ||
| .gitignore | ||
| compose.yaml | ||
| Dockerfile | ||
| package-lock.json | ||
| package.json | ||
| pyproject.toml | ||
| README.md | ||
| requirements-runtime.txt | ||
| requirements.txt | ||
| tsconfig.json | ||
| worker-configuration.d.ts | ||
| wrangler.jsonc | ||
| 工人疲劳监测与智能调度多智能体系统_实施方案.md | ||
SafeOpera
面向工程现场的生理状态模拟、疲劳评估与安全调度研究原型
v0.2.1 · 生理机制约束模拟数据 · DeepSeek 结构化复核与解释 · 模拟调度 · 人工复核
RESEARCH PROTOTYPE / MOCK DATA:当前版本未实现真实传感器到平台的端到端采集,使用可复现的模拟分钟流验证监测、复核和报告流程;调度仅生成模拟候选并记录采纳,不会真实执行。
SafeOpera 将工程安全的目光从“环境中有什么危险”,进一步转向“人的状态如何影响安全决策”。当前研究原型通过生理机制约束的合成 HR、HRV-RMSSD、EDA、SKT、活动与环境分钟特征,验证数据质量守卫、疲劳评估、调度候选、人工复核、反思、助手和报告闭环;真实设备/IoT 仅保留适配接口,尚未形成真实采集端到端。
运行模式与能力边界
SafeOpera 页面顶部会永久显示当前运行模式,运行事实也可通过 GET /api/runtime 获取,并随单条 trace、报告 JSON 和 Markdown 报告返回。
| 运行入口 | 数据来源 | 疲劳评估 | LLM 助手 | 执行边界 |
|---|---|---|---|---|
| Cloudflare 在线 Demo | rebase 到当前会话演示时钟的 mock seed | 保留确定性安全基线;“模拟即时复测”的目标窗口由 DeepSeek 输出结构化第二意见,失败时 fail-open 回退 | 配置 API Key 后可用于只读解释 | 仅允许模拟采纳,不代表真实执行 |
| 本地 Python 服务 | 生理机制约束 mock;或通过校验的 IoT 适配指标 | PocketFlow 编排;可使用本地确定性评估器或配置的 LLM | 配置 DeepSeek API Key 后可用 | 所有路径仅记录采纳/复核;外部执行适配器尚未提供,real_dispatch_performed=false |
统一元数据包含服务状态、演示监测状态、data_mode(mock/live/fallback/stale)、服务/演示/采集/评估/报告时间、新鲜度、评估引擎与执行模式。在线 Demo 会分别公开 assistant_llm_enabled、llm_assessment_enabled、llm_review_mode 和 fallback_used;页面把确定性安全基线与 DeepSeek 第二意见分开显示,LLM 结果不会绕过信号质量守卫、调度门禁或主管确认。模型置信度、信号质量、证据一致性和调度可信度仍分开显示。
mock:完整演示与模拟采纳;live:仅指 HR/HRV/EDA/SKT/ACC/信号质量/环境温度七项决策字段齐全,并通过时间、范围、有限值、重复记录、新鲜度和质量校验的设备适配指标;fallback:置信度上限 0.55,候选被门禁阻止,必须复测/复核;stale:拒绝自动分级,不生成调度候选。
固定传感器脱落回放
本地评测提供不调用外部模型的固定回放,覆盖正常、轻度、中度、重度、单通道尖峰、低质量数值、完全掉线、重复/倒退时间戳,并额外回放“连续两个低质量窗口后恢复”的路径。IoT 接口解析失败、批次漏人、时间戳超过 300 秒或超出允许的未来时钟偏差时保留并显式标记本地兜底样本,不把陈旧、未来或字段不全的设备值覆盖进当前分钟;多来源短窗整体降级并阻止调度采纳:
python scripts/run_resilience_replay.py
python scripts/run_resilience_replay.py --output artifacts/resilience-replay.json
输出包含灵敏度、特异度、漏报率、误报率、掉线安全拒判率、掉线被错误归为正常的比例、陈旧时间戳拒绝率,以及恢复后的告警延迟。相同结果也可从本地 GET /api/evaluation/resilience 获取;Cloudflare 在线 Demo 会明确返回“未执行”,不会把预置演示冒充为实时评测。
SafeOpera 助手与在线 LLM 复核
页面右下角的 SafeOpera 助手会结合当前演示时钟下的模拟生理指标、疲劳评估与决策追溯回答问题,并给出可点击的证据索引。助手仅提供只读辅助分析,不会自动执行调度,也不构成医疗诊断。
Cloudflare 在线 Demo 同时把 DeepSeek 接入“模拟即时复测”路径:服务端只发送经过筛选的窗口级结构化特征,不发送原始波形;强偏离或中重度基线窗口路由到 Pro,其余窗口路由到 Flash。LLM 返回疲劳等级、Borg RPE、置信度、证据指标和限制条件,经过服务端范围、Borg 分区、证据数量、信号质量和置信度上限校验后,作为可追溯的第二意见保存到 assessment、trace 和报告中;不合格输出进入 fail-open 回退。确定性评估仍作为安全基线,LLM 调用失败时不会中断演示,也不会自动改变调度或执行状态。
在线 LLM 路径同时启用服务端成本与并发保护:评估复核同一会话默认 30 秒冷却、助手请求采用更短交互冷却,二者共享全局每小时 60 次调用额度和默认 4 个在途请求上限;评估状态通过 D1 乐观并发版本避免等待外部模型期间覆盖反馈、调度复核或重置操作。额度、冷却和在途槽位均在远程模型调用前原子预留,浏览器按钮状态不是安全边界。
配置与启动
安装依赖后,复制环境变量模板:
# Windows PowerShell
Copy-Item .env.example .env
# Linux / macOS
cp .env.example .env
FATIGUE_LLM_ENABLED=true
FATIGUE_LLM_PROVIDER=deepseek
DEEPSEEK_API_KEY=your_api_key
DEEPSEEK_BASE_URL=https://api.deepseek.com
FATIGUE_LLM_FAIL_OPEN=true
python -m pip install -r requirements.txt
python scripts/run_demo.py
本地运行时,API Key 只应保存在 .env,不要提交到 Git。Cloudflare Pages 使用服务端 Secret:
npx wrangler pages secret put DEEPSEEK_API_KEY --project-name shift-safe-demo
npm run cf:deploy
npm run cf:deploy 会先执行 wrangler d1 migrations apply shift-safe-demo --remote,确认 demo_sessions.version、LLM 预约/额度表和并发状态字段已经就绪,再发布 Pages Functions。不要绕过迁移直接运行 wrangler pages deploy。
浏览器端不会接触或保存 API Key。Cloudflare 配置还可通过 FATIGUE_LLM_HOURLY_LIMIT、FATIGUE_LLM_SESSION_COOLDOWN_SECONDS 和 FATIGUE_LLM_RATE_LIMIT_ENABLED 调整服务端额度保护;生产环境不应关闭限流。
Docker 部署
完成上述 .env 配置后执行:
docker compose up --build -d
项目介绍
从“识别环境危险”转向“理解人的状态”
传统工程智能化通常把重点放在生产环境:用视觉模型识别安全帽、临边洞口、机械冲突等危险源,再由 LLM 整理隐患或安排培训。这些能力重要,但它们很难回答另一个直接影响事故概率的问题:执行任务的人此刻是否仍适合继续作业?
SafeOpera 以人为中心,将 HR、HRV、EDA、SKT、ACC、信号质量和环境温度等数据接入同一条决策链。系统不是等到班后汇总报表,而是持续读取分钟级数据,以 5 分钟窗口评估当前变化、以 30 分钟窗口判断累积趋势。当风险达到阈值时,智能体进入评估并生成待人工复核的模拟调度候选。
LLM 不只生成文字,而是参与受约束决策
LLM 接收的是经过质量控制和个体基线校准的结构化特征,而不是未经处理的原始波形。模型需要在固定输出契约内给出疲劳等级、Borg RPE 估计、置信度、关键证据和限制条件;高风险或强偏离窗口会自动路由到能力更强的模型层级。
模型结论不会直接执行换岗。调度智能体继续检查候选人的:
- 岗位技能是否匹配;
- 当前是否空闲、工时是否合理;
- 自身疲劳风险是否可接受;
- 近期是否被频繁调度;
- 是否满足现场公平性与安全约束。
系统最后给出可解释的接替候选,交由现场主管确认、驳回或修正。这种 Human-in-the-Loop 设计保留了现场管理责任,也让每次决策可以追溯。
模拟实时流与未来 live 接入
疲劳不是静态标签,因此 Demo 以 1 分钟演示步长推进、5 分钟窗口评估、30 分钟窗口计算趋势。页面中的“模拟即时复测”和“演示指标”只更新会话内模拟状态;即使选择“模拟采纳”,也不会发生真实调度。当前实际链路是:
生理机制约束模拟器 → 滚动窗口 → 确定性安全基线 → DeepSeek 结构化第二意见(复测目标)
→ 模拟调度候选 → 主管确认 → 报告与审计
未来真实设备入口将位于同一质量守卫之前,但只有通过时间戳、设备值、新鲜度、信号质量和一致性校验后才会标记为 live;即使通过,当前版本仍只记录人工采纳,直到外部执行适配器存在。外部 LLM 不可用时可回退本地评估器;设备数据不可用时的 fallback 只作降级参考,不冒充 live。
其他优势
- 个体化:当前窗口与个人参考范围比较,避免所有人共用一个固定阈值。
- 多模态:联合分析多类生理和环境信号,降低单指标误判风险。
- 可解释:每个等级都保留关键指标、偏离程度、参考依据和局限性。
- 闭环调度候选:告警后生成带约束的模拟接替候选,记录人工复核与采纳,不声称已经执行。
- 反向核查:对被判定为正常的样本进行抽查,并结合事件和自报信息检查漏报。
- 全链追溯:统一
trace_id串联数据窗口、模型判断、候选方案、人工复核和报告。 - 可降级运行:LLM、IoT 接口短暂不可用时仍保留本地评估与演示能力。
科学依据
从 v0.1.0 到 v0.2.0
本项目并非从零开始的界面演示。v0.1.0 以 “化倦为安——AI 驱动多模态生理感知的工程疲劳预警与智能调度系统” 参加 2025 年第四届中国研究生工程管理案例大赛,并获得创新创业赛道全国三等奖。
竞赛阶段围绕 10 名志愿者开展挖掘机模拟作业实验,同步采集 HRV、EDA 与 SKT,并结合 Borg 20 量表建立疲劳标签。案例报告记录的阶段性结果包括:XGBoost 多模态疲劳分类准确率 98%,资源调度二进制准确率 95.2%、AUC 0.96,自动报告生成效率提升 42%。这些数字来自小样本、特定实验、特定划分和案例条件,存在过拟合与外部效度限制;未经过真实工地、多中心或独立外部验证,不能作为当前 Demo 或普遍人群的性能承诺。
v0.2.0 在此基础上将研究原型重构为可运行系统,新增了滚动时间窗口、个体基线、信号质量守卫、分层 LLM 路由、受约束调度、主管复核、假阴性抽查、事件回溯、报告导出和统一审计链。
疲劳监测装置技术积累
项目材料中的《一种人体疲劳监测装置》描述了集成微处理器、皮肤电活动传感器、汗液乳酸传感器、报警、显示、电源与可选无线传输模块的手套式方案。随附受理通知书记录申请号 2025205280267、申请日 2025-03-25
该装置是未来真实采集路径的技术积累,当前 Demo 未接入该装置。当前模拟主链仍是 HRV-RMSSD、EDA、SKT 等特征;乳酸可作为未来可选通道,HRV/SKT 实装仍需相应传感器或适配设备。详见硬件接入路径说明。
论文支撑
项目参与者田成博为第一作者的论文:
Tian, C., You, J., & Cao, Y. A hybrid SEM-FCM approach for data-driven fatigue risk management in construction. Proceedings of the Institution of Civil Engineers - Management, Procurement and Law, 2026. DOI: 10.1680/jmapl.26.00024
该研究以 301 名挖掘机操作员为样本,使用结构方程模型(SEM)分析视觉、肌肉和认知疲劳与不安全行为之间的关系,并使用模糊 C 均值(FCM)识别风险群体。主要发现包括:
- 三类疲劳均与不安全行为存在显著关联;
- 肌肉疲劳的直接关联最强,认知疲劳的总关联最大;
- 安全态度在疲劳影响不安全行为的路径中发挥部分中介作用;
- 高风险组表现出更高的肌肉与认知疲劳,其不安全行为水平比低风险组高 72.12%。
这些结果支持本项目采用多维疲劳评估,而不是依赖单一指标;也说明干预不能止于“识别疲劳”,还需要把人员状态、岗位安排和安全管理行动连接起来。
生理指标与决策边界
- HR / HRV:用于观察心率变化、自主神经调节和恢复状态,但会受到运动、体位和个体差异影响。
- EDA:反映交感神经唤醒变化,对精神负荷较敏感,同时也会受到温度、出汗和电极接触影响。
- SKT:提供体表温度及热负荷相关信息,需要结合环境温度解释。
- ACC:用于识别活动强度,帮助区分作业负荷造成的生理变化与静息状态异常。
- Borg RPE:补充个人主观用力与疲劳感受,用于交叉验证而不是单独决定结果。
因此,系统在模型前设置数据质量检查,在模型后保留证据解释、限制条件和人工复核。SafeOpera 是工程安全辅助决策系统,不构成医学诊断,也不替代职业健康检查、法定工时制度和现场主管责任。
系统架构
flowchart LR
A[生理机制约束模拟器<br/>当前实际数据源] --> B[数据接入与质量守卫]
A2[未来可穿戴设备 / IoT<br/>HR · HRV · EDA · SKT · ACC] -. 未来适配入口 .-> B
B --> C[个体基线与特征窗口<br/>5 min 即时 + 30 min 趋势]
C --> D[疲劳评估智能体<br/>本地规则 + 分层 LLM]
D --> E{是否需要干预}
E -->|否| F[持续监测与正常样本抽查]
E -->|是| G[调度智能体]
G --> H[技能 · 忙闲 · 工时<br/>风险 · 公平性约束]
H --> I[接替候选与处置建议]
F --> J[报告与审计智能体]
I --> J
J --> K[现场主管复核]
K --> L[反馈 / 事件 / 自报]
L --> M[反思智能体]
M --> C
D -. trace_id .-> N[(SQLite / D1<br/>全链路记录)]
G -. trace_id .-> N
J -. trace_id .-> N
K -. trace_id .-> N
智能体职责
- 感知与窗口层:当前接收生理机制约束模拟数据;未来可接设备适配器,校验信号质量并计算个体化即时与趋势特征。
- 疲劳评估智能体:根据风险强度选择本地评估器或 LLM 层级,输出结构化判断和证据。
- 调度智能体:在技能、工时、忙闲、风险和公平性约束下排序接替候选。
- 报告智能体:当前生成模拟告警、事件回溯、周期快照和班次报告;未来 live 适配通过门禁后可复用同一报告链。
- 人工复核节点:主管决定是否采纳建议,并记录修正原因。
- 反思智能体:汇总误报、漏报、自报和事件反馈,为后续校准提供证据。
代码结构
src/fatigue_demo/ 评估、LLM、调度、报告、反思、数据库与工作流
web/ 监测控制台和报告页面
docs/ 模拟数据模型、数据治理和专利硬件路径说明
data/simulated/ 分钟级演示数据、特征窗口与个体基线
functions/ Cloudflare Pages Functions API
migrations/ Cloudflare D1 数据库迁移
scripts/ 本地启动与数据生成脚本
tests/ 单元、API、并发与端到端测试
本地 Python 服务使用 PocketFlow 编排智能体工作流,SQLite 保存运行状态;在线演示使用 Cloudflare Pages Functions 与 D1。无论部署在哪种运行时,系统都以结构化事实优先、人工最终决策和全链路可追溯为基本原则。





