外观
照片判定与行为复核
智悟有两处把画面交给蓝精灵:一处是对外开放的照片判定接口,随手拍调它;另一处在响应循环内部,边缘节点上行的行为候选经它复核。两条路各自独立,判定结果都带版本留痕。
照片判定接口
POST /api/mind/photo/judge也接受 /app/api/mind/photo/judge。鉴权用请求头 x-mind-key,值为给调用方分配的机器密钥;值守台会话也能调。
请求
| 字段 | 必填 | 说明 |
|---|---|---|
imageUrls | 是 | 图片地址数组,接受 http(s) 地址或 data: 内联图。当前只取第一张 |
hazardTypes | 否 | 企业检查项字典,每项 {id, label, remark, parentId}。不传用内置标准字典 |
tenant | 视密钥而定 | 租户码。密钥只代表一个租户时可不写,代表多个时必填 |
requestId | 否 | 调用方的请求编号,原样带回,不给则自动生成 |
http(s) 图片下载后等比缩到 800 像素内再送模型,与随手拍自己的预处理一致;data: 内联图不再二次处理。原图超过 20MB 拒绝。
响应
json
{
"code": 200,
"message": "success",
"data": {
"scene": "…",
"verdict": "违规",
"typeId": 112,
"level": 2,
"description": "…",
"suggestions": ["…"],
"promptKey": "prompt.photo_hazard_judge",
"promptVersion": "v1#…",
"model": "…", "modelKey": "…", "modelVersion": "…", "artifactSha256": "…",
"modelMs": 4800, "fetchMs": 300, "totalMs": 5200,
"traceId": "pj-…",
"tenant": "<租户码>"
}
}业务字段原样平铺:verdict 取"违规"或"合规",level 取 1、2、3(一般、较大、重大),typeId 从传入的字典里选。类型编号校验、等级强制、父子对调这些后处理不在智悟做,属于随手拍的业务规则。
promptVersion 的格式是"版本号加指纹",没登记口径的租户显示 builtin#指纹。traceId 贯穿智悟与虹元,排障时拿它查。
错误
| HTTP | 场景 |
|---|---|
| 400 | imageUrls 为空;密钥代表多个租户但没写 tenant |
| 403 | 写的 tenant 不在密钥名单内;密钥未绑定任何租户 |
| 502 | 取图失败、模型调用失败、模型返回非法 JSON |
| 503 | 未配置模型端点 |
错误响应都带 traceId。单次调用不重试,空回答按失败记,让调用方退回自己的兜底。
内置字典
不传 hazardTypes 时用十类标准字典:安全生产类、职业健康类、消防安全类、机械设备隐患、电气安全隐患、高处作业隐患、粉尘危害、噪声危害、消防通道隐患、灭火器材隐患。正式接入请传企业自己的字典,字典有父子关系时,大类一行、细分缩进,模型优先给细分。
随手拍怎么接
随手拍的 AI 识别服务开启"经智悟"开关后,每张照片先调上面的接口,响应里 _provider 为 mind。智悟不可用时退回直连蓝精灵,再退回云端通用模型,上报不中断。三路的主备关系见蓝精灵接入方式。
接入清单:
- 智悟侧配
MIND_API_KEY,并用MIND_API_KEY_TENANTS写明它能代表哪些租户。一个随手拍实例服务多个租户时要列全,调用时必须带tenant。 - 智悟侧配
PHOTO_LLM_URL、PHOTO_LLM_MODEL,指向蓝精灵推理服务。 - 随手拍侧配开关与密钥。
- 用几张历史照片验证,看
_provider、promptVersion与typeId是否符合预期。
判定口径
照片判定的提示词作为口径对象登记在虹元,类型 prompt,名 prompt.photo_hazard_judge,正文用 {types} 占位企业类目表。每次登记追加新版本,智悟 60 秒内生效。没登记的租户用内置版,与登记文件是同一份,指纹一致。
改口径的纪律:改文本,先拿一批历史照片回归,再登记新版。值守台"判定口径"页可以看每版正文与生效时间,只读。
行为复核
边缘节点对打架、倒地、攀爬这类复杂行为不做独立承诺,只组装证据上行:8 格时序蒙太奇、逐帧时间线、人体姿态点,事件类型是"行为待判定"。智悟收到后:
- 取证据里的蒙太奇图,按事件所属租户取判定口径(类型
prompt,名prompt.montage_judge),没登记用内置版。 - 交蓝精灵判定,得到
{abnormal, confidence, action, reason},另带一两句给值守人看的摘要。 - 无异常,或置信低于门槛(默认 0.6):直接写误报裁定回流边缘节点,不建任务。
- 判为打架、倒地或攀爬:事件类型换成对应的真实类型,置信 0.8 以上记高严重度,否则记中,然后套响应规则建任务、发通知。
- 判定结论与处置决定一起写回虹元:判定类型、置信、判定方、模型键与版本、制品指纹、口径版本、提示词版本、追踪编号、处置摘要。边缘节点上的候选告警随之改成真实科目,备注里写"判定 打架斗殴 0.95 | 处置: 已通知, 时限 …"。
判定失败重试 3 次,仍失败退回人工复核任务,候选不会悄悄消失。每 60 秒另有一轮兜底扫描,捡回虹元里仍未裁定的候选。
配置
| 配置项 | 说明 | 默认 |
|---|---|---|
JUDGE_LLM_URL / JUDGE_LLM_MODEL | 判定端点与模型名,两项同时设才生效 | 沿用摘要端点 |
JUDGE_MIN_CONF | 置信门槛,虹元登记了阈值规则时以虹元为准 | 0.6 |
LLM_TIMEOUT_S | 模型超时,秒 | 180 |
SNAPSHOT_REWRITE | 证据图地址改写,服务端拉图用。格式 旧前缀=>新前缀,分号隔开可写多条,每个地址用第一条前缀对得上的 | 无 |
判定用的提示词与边缘节点的默认提示词逐字一致,真值集就是拿它评的,改一个字都要重评。
语境摘要
通知类任务建好后,另有一个串行队列调一次大模型,看本条事件、同一摄像头最近 30 分钟的其他事件与第一张证据图,写一段"画面里发生了什么、要不要升级、像不像误报"到任务体。只是建议,不改事件、不做裁定、不改规则给的严重度。判定过的任务不再补摘要。摘要端点用 LLM_URL、LLM_MODEL 配置,不配就不做。