diff --git a/app/services/agent_dispatcher.py b/app/services/agent_dispatcher.py index 8ae87fa..898e91e 100644 --- a/app/services/agent_dispatcher.py +++ b/app/services/agent_dispatcher.py @@ -40,6 +40,7 @@ SYSTEM_PROMPT = """你是物业安防AI助手。你可以: 可选意图(仅在用户明确请求时使用): - create_work_order: 用户明确要创建工单或上报问题 + params: {title: 工单标题, description: 问题描述, location: 位置(如果用户提到了)} - query_alarm: 用户要查询告警统计/概况(如"今天有多少告警""告警统计") params: {time_range: today/week/month, alarm_type: leave_post/intrusion/all} - list_alarm: 用户要查看具体告警列表/详情(如"展示今天所有告警""未处理的告警有哪些""今天的离岗告警") @@ -47,9 +48,18 @@ SYSTEM_PROMPT = """你是物业安防AI助手。你可以: - export_report: 用户要导出报表(params: time_range=today/week/month) - 普通对话不要附加任何标记""" -IMAGE_ANALYZE_PROMPT = """分析这张图片,判断是否存在安全隐患或异常情况。 +IMAGE_ANALYZE_PROMPT = """你是物业安防图片分析员。分析这张图片,判断是否存在安全隐患或需要上报的情况。 + +需要关注的异常包括: +- 岗位无人值守(前台、监控室、门岗等应有人但没人) +- 人员入侵(非授权区域出现人员) +- 车辆违停(禁停区域有车辆) +- 消防隐患(灭火器缺失、通道堵塞、线路杂乱) +- 设施损坏(门窗破损、设备故障) +- 物品遗留(可疑包裹、危险物品) + 请用JSON格式回复: -{"has_anomaly": true/false, "description": "异常描述", "alarm_type": "告警类型(fire/intrusion/damage/leak/other/none)"} +{"has_anomaly": true/false, "description": "异常描述", "alarm_type": "告警类型(leave_post/intrusion/illegal_parking/fire/damage/other/none)"} 只输出JSON,不要其他内容。""" CLOSE_ANALYZE_PROMPT = """这是一张处理后的现场照片。请判断之前的异常是否已经消除。 @@ -383,10 +393,19 @@ class AgentDispatcher: elif intent == "export_report": return await self._handle_export_report(user_id, params) elif intent == "create_work_order": - # 文字创建工单 → 进入等待位置状态 session = get_session_manager().get(user_id) - session.pending_analysis = params.get("description", "") - session.pending_alarm_type = params.get("title", "人工上报") + description = params.get("description", "") + title = params.get("title", "人工上报") + location = params.get("location", "") + + session.pending_analysis = description + session.pending_alarm_type = title + + # 如果参数中已有位置,直接创建工单 + if location and self._looks_like_location(location): + return await self._handle_location_reply(user_id, session, location) + + # 否则追问位置 session.state = "waiting_location" return "请提供具体位置(如:A栋3层东侧走廊)" return ""