No description
  • Python 60.6%
  • JavaScript 14.7%
  • TypeScript 14.5%
  • CSS 5.1%
  • HTML 4.8%
  • Other 0.3%
Find a file
2026-08-11 18:19:28 +08:00
artifacts Update README with project overview 2026-07-31 22:38:54 +08:00
data/simulated feat: harden synthetic safety and Cloudflare demo parity 2026-08-07 20:36:22 +08:00
docs revert: remove ECS GitHub Actions deployment 2026-08-11 18:19:28 +08:00
functions fix: keep next assessment minute ahead of demo clock 2026-08-11 18:03:36 +08:00
migrations feat: add guarded DeepSeek assessment review 2026-08-11 11:17:04 +08:00
scripts fix: preserve review state and current safety semantics 2026-08-07 21:56:42 +08:00
src/fatigue_demo fix: preserve review state and current safety semantics 2026-08-07 21:56:42 +08:00
tests fix: keep next assessment minute ahead of demo clock 2026-08-11 18:03:36 +08:00
web fix: simplify runtime readiness status 2026-08-11 17:08:19 +08:00
.dockerignore feat: release SafeOpera v0.2.0 2026-08-03 15:25:34 +08:00
.env.example feat: add SafeOpera realtime assistant 2026-08-04 11:23:31 +08:00
.gitattributes Initial commit 2026-07-29 18:06:31 +08:00
.gitignore feat: harden synthetic safety and Cloudflare demo parity 2026-08-07 20:36:22 +08:00
compose.yaml docs: add Docker deployment instructions 2026-08-03 15:38:57 +08:00
Dockerfile feat: release SafeOpera v0.2.0 2026-08-03 15:25:34 +08:00
package-lock.json feat: add guarded DeepSeek assessment review 2026-08-11 11:17:04 +08:00
package.json feat: add guarded DeepSeek assessment review 2026-08-11 11:17:04 +08:00
pyproject.toml feat: release SafeOpera v0.2.0 2026-08-03 15:25:34 +08:00
README.md revert: remove ECS GitHub Actions deployment 2026-08-11 18:19:28 +08:00
requirements-runtime.txt feat: release SafeOpera v0.2.0 2026-08-03 15:25:34 +08:00
requirements.txt init 2026-07-31 16:29:22 +08:00
tsconfig.json Add Cloudflare Pages deployment 2026-07-31 22:28:30 +08:00
worker-configuration.d.ts feat: add guarded DeepSeek assessment review 2026-08-11 11:17:04 +08:00
wrangler.jsonc feat: add guarded DeepSeek assessment review 2026-08-11 11:17:04 +08:00
工人疲劳监测与智能调度多智能体系统_实施方案.md feat: harden synthetic safety and Cloudflare demo parity 2026-08-07 20:36:22 +08:00

SafeOpera

面向工程现场的生理状态模拟、疲劳评估与安全调度研究原型

v0.2.1 · 生理机制约束模拟数据 · DeepSeek 结构化复核与解释 · 模拟调度 · 人工复核

RESEARCH PROTOTYPE / MOCK DATA:当前版本未实现真实传感器到平台的端到端采集,使用可复现的模拟分钟流验证监测、复核和报告流程;调度仅生成模拟候选并记录采纳,不会真实执行。

在线体验 · 项目主页 · 配置与启动 · 项目介绍 · 科学依据 · 系统架构

SafeOpera 控制台

SafeOpera 将工程安全的目光从“环境中有什么危险”,进一步转向“人的状态如何影响安全决策”。当前研究原型通过生理机制约束的合成 HR、HRV-RMSSD、EDA、SKT、活动与环境分钟特征,验证数据质量守卫、疲劳评估、调度候选、人工复核、反思、助手和报告闭环;真实设备/IoT 仅保留适配接口,尚未形成真实采集端到端。

在线体验:https://shift-safe-demo.pages.dev/

运行模式与能力边界

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_modemock/live/fallback/stale、服务/演示/采集/评估/报告时间、新鲜度、评估引擎与执行模式。在线 Demo 会分别公开 assistant_llm_enabledllm_assessment_enabledllm_review_modefallback_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 乐观并发版本避免等待外部模型期间覆盖反馈、调度复核或重置操作。额度、冷却和在途槽位均在远程模型调用前原子预留,浏览器按钮状态不是安全边界。

SafeOpera 智能分析助手

配置与启动

安装依赖后,复制环境变量模板:

# 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

访问:http://127.0.0.1:8000

本地运行时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_LIMITFATIGUE_LLM_SESSION_COOLDOWN_SECONDSFATIGUE_LLM_RATE_LIMIT_ENABLED 调整服务端额度保护;生产环境不应关闭限流。

Docker 部署

完成上述 .env 配置后执行:

docker compose up --build -d

访问:http://127.0.0.1:8000

项目介绍

从“识别环境危险”转向“理解人的状态”

传统工程智能化通常把重点放在生产环境:用视觉模型识别安全帽、临边洞口、机械冲突等危险源,再由 LLM 整理隐患或安排培训。这些能力重要,但它们很难回答另一个直接影响事故概率的问题:执行任务的人此刻是否仍适合继续作业?

SafeOpera 以人为中心,将 HR、HRV、EDA、SKT、ACC、信号质量和环境温度等数据接入同一条决策链。系统不是等到班后汇总报表而是持续读取分钟级数据以 5 分钟窗口评估当前变化、以 30 分钟窗口判断累积趋势。当风险达到阈值时,智能体进入评估并生成待人工复核的模拟调度候选。

LLM 不只生成文字,而是参与受约束决策

LLM 接收的是经过质量控制和个体基线校准的结构化特征而不是未经处理的原始波形。模型需要在固定输出契约内给出疲劳等级、Borg RPE 估计、置信度、关键证据和限制条件;高风险或强偏离窗口会自动路由到能力更强的模型层级。

模型结论不会直接执行换岗。调度智能体继续检查候选人的:

  • 岗位技能是否匹配;
  • 当前是否空闲、工时是否合理;
  • 自身疲劳风险是否可接受;
  • 近期是否被频繁调度;
  • 是否满足现场公平性与安全约束。

系统最后给出可解释的接替候选,交由现场主管确认、驳回或修正。这种 Human-in-the-Loop 设计保留了现场管理责任,也让每次决策可以追溯。

SafeOpera 模拟疲劳复测报告

模拟实时流与未来 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

智能体职责

  1. 感知与窗口层:当前接收生理机制约束模拟数据;未来可接设备适配器,校验信号质量并计算个体化即时与趋势特征。
  2. 疲劳评估智能体:根据风险强度选择本地评估器或 LLM 层级,输出结构化判断和证据。
  3. 调度智能体:在技能、工时、忙闲、风险和公平性约束下排序接替候选。
  4. 报告智能体:当前生成模拟告警、事件回溯、周期快照和班次报告;未来 live 适配通过门禁后可复用同一报告链。
  5. 人工复核节点:主管决定是否采纳建议,并记录修正原因。
  6. 反思智能体:汇总误报、漏报、自报和事件反馈,为后续校准提供证据。

代码结构

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。无论部署在哪种运行时系统都以结构化事实优先、人工最终决策和全链路可追溯为基本原则。