AI PLAY玩法更新持续收录
← 回到更新流

2026-09-26 · 原文发布日

工地事故照片自动分级:先鉴伪再让Gemini出评估

工人经n8n表单提交物业、问题描述和现场照片;系统生成事故编号和证据记录,先把图送Walterwrites检测AI生成概率,可疑的立刻发Slack要求人工复核;随后Gemini(带结构化输出约束)基于照片可见内容输出类目、严重度、紧急度、摘要和下一步建议的JSON;格式化的事故消息连同风险和真伪指标发Slack,并写入或更新Google Sheets事故日志。表单字段和可传文件类型可配置。模板免费。

原文要点

原作者iamvaar在n8n.io发布的免费工作流(workflow 19962,可免费获取模板文件):n8n表单触发器收集物业选项、问题描述和现场照片;提取图片元数据并生成带唯一事故编号的证据记录;把图片发往Walterwrites.ai图片检测API算出AI生成概率与真伪状态;可疑图片触发Slack人工复核提醒;随后照片与问题描述交给Google Gemini(配合structured output parser)只基于画面可见内容输出含类目、严重度、紧急度、摘要、下一步建议的JSON;格式化后的事故消息连同风险与真伪指标发Slack,并追加或更新Google Sheets事故日志。表单的物业选项和可传文件类型可配置。作者另附YouTube演示视频。

这次做成什么

在本站还原一条可照着搭的n8n流水线:表单收事故照片→AI鉴伪分支→Gemini结构化评估→Slack通报+Sheets台账。练习用一条合成测试数据走通全流程,不连接真实工地。

准备什么

  • n8n实例(Cloud或自托管)并能发布表单触发器
  • Walterwrites.ai账号及其HTTP Header Auth凭据
  • Google Gemini(PaLM)API凭据
  • Slack OAuth凭据和一个可发帖频道
  • Google Sheets服务账号凭据及一张已共享的事故日志表
  • 一张本站合成的练习用现场照片,不含真人隐私信息

具体怎么做

  1. 建表单触发器并生成事故编号

    在工作流顶部放n8n Form Trigger节点,字段设为property(下拉:A座/B座/地下车库)、description(多行文本)、photo(文件上传,限制jpg/png,上限10MB)。发布表单拿到URL。后接一个Code节点:取当前时间戳加随机四位生成incidentId如INC-20260926-4831,把表单字段与图片二进制名一起放入evidence对象。

  2. 鉴伪请求与可疑分支

    加HTTP Request节点,方法POST到Walterwrites.ai图片检测端点,认证方式选预先配置的Header Auth,把照片二进制作为请求体上传。解析返回的AI生成概率score。接一个IF节点:score大于等于你设定的阈值(练习用0.6)走true分支,发Slack消息『照片INC-xxxx疑似AI生成,请人工复核』;false分支直接继续。

  3. Gemini结构化评估

    加Google Gemini Chat Model节点,接入带schema约束的Structured Output Parser,schema限定字段category、severity、urgency、summary、nextAction。提示词明确要求只描述照片可见内容、不得推测画面外事实,把description作为申报人陈述一并传入但标注其未经核实。输出为纯JSON。

  4. 汇总发Slack并写Sheets

    用Set或Code节点把incidentId、Gemini评估JSON、鉴伪score和真伪状态拼成Slack消息文本,Slack节点发到事故频道。Google Sheets节点选Append or Update:以incidentId为匹配键,列映射为编号/物业/描述/类目/严重度/紧急度/摘要/建议/AI概率/状态/提交时间,重复编号更新而非追加。

可直接复制的材料

Gemini结构化评估提示词(本站独立撰写)

本站独立编写示例,severity/urgency分级词可换成你司制度用语;需在Gemini节点的output parser中同步定义同名schema。

你是工地事故初评助手。输入包含两部分:一张现场照片,以及申报人填写的问题描述(该描述未经核实,仅作参考)。
请只依据照片中肉眼可见的内容进行判断,不要推测画面之外的原因、责任或损失。若照片无法支持某项判断,在该字段写明"照片无法确认"。
仅输出以下JSON,不要输出任何其他文字:
{"category":"从 高处坠落/机械伤害/用电安全/消防隐患/物料堆放/其他 中选一个","severity":"轻微/一般/严重/危急","urgency":"无需立即处理/24小时内/立即停工处理","summary":"不超过80字的可见情况概述","nextAction":"建议的下一步处置,不超过60字"}
申报人描述:{{$json.description}}

合成测试数据(表单提交模拟)

本站合成的练习输入,照片用任意不含人脸的测试图片即可;不要在练习表里写真实业主或工人信息。

{"property":"地下车库","description":"B2层配电箱附近地面有积水,电缆从水中穿过,担心漏电。","photoFileName":"test-cable-water.jpg","submittedAt":"2026-09-26T10:15:00+08:00"}

Slack事故通报消息模板

本站独立编写的Slack文本示例,字段名需与你Code节点的实际输出对齐。

🚨 事故通报 {{$json.incidentId}}
物业:{{$json.property}}
类目:{{$json.assessment.category}} 严重度:{{$json.assessment.severity}} 紧急度:{{$json.assessment.urgency}}
摘要:{{$json.assessment.summary}}
建议:{{$json.assessment.nextAction}}
照片AI生成概率:{{$json.aiScore}}({{$json.authenticity}})
申报描述:{{$json.description}}

输入与输出示例

本站虚构演示,输入输出字段一一对应,未实际调用任何API,不代表原作者运行结果。

输入

合成表单提交:property=地下车库,description=配电箱旁积水且电缆泡水,附一张测试照片test-cable-water.jpg

对应输出

Sheets新增一行:INC-20260926-4831 | 地下车库 | 用电安全 | 严重 | 立即停工处理 | 照片可见地面积水,电缆从中穿过 | 断电并围蔽该区域,联系电工排查 | AI概率0.04 | 正常 | 2026-09-26 10:15

做完检查这些

  • 表单发布后能用测试数据提交并触发整条流程,Code节点输出含INC-开头的唯一编号
  • 鉴伪score高于阈值时只发复核提醒不中断,低于阈值时流程继续到Gemini节点
  • Gemini返回严格匹配schema的JSON,五个字段齐全且无额外文字
  • Sheets中同一incidentId重复提交时更新原行而不是新增重复行
  • Slack消息中同时出现评估结果和AI生成概率两项信息

容易卡住的地方

  • Walterwrites端点与鉴伪阈值为外部服务行为,0.6只是本站练习设定,正式使用需在原文模板与服务商文档核对
  • Gemini若未接structured output parser约束,可能输出带多余文字的文本导致下游解析失败
  • Google Sheets服务账号必须把事故日志表共享给服务账号邮箱,否则写入报权限错误
  • 表单文件类型与大小限制要在Form Trigger中显式配置,超大图片可能导致鉴伪或Gemini请求超时
  • 作者称流程简便等表述仅归因于作者,本站不设通过时限

原文与作者资料 ↗

本站借助AI整理来源事实,独立编写中文操作指南与示例。示例不代表实际运行结果;来源效果尚未由本站独立复现。付费模板与模型、服务费用分别计算。

原文标题
Triage construction incident photos with Gemini, Slack, and Google Sheets
原作者
iamvaar
原始发布日期
2026-09-26T13:36:13.355Z
来源
https://n8n.io/workflows/19962