重构 Agent:引入 LangGraph StateGraph 替代手写 FC 循环

架构变更:
- 新增 app/services/agent/ 模块(state/prompts/graph/tools)
- 7 个工具从 _tool_xxx 方法提取为 @tool 装饰器函数
- 构建 assistant + ToolNode 的 ReAct 图
- agent_dispatcher.py 改为薄壳入口,支持 USE_LANGGRAPH 开关
- MemorySaver checkpoint 持久化对话(thread_id=wechat-{user_id})
- 新增依赖:langchain-core, langchain-openai, langgraph

向后兼容:
- USE_LANGGRAPH=false 可切回旧版 FC 循环
- LangGraph 初始化失败自动降级到 Legacy 模式
- 企微图片处理/VLM分析逻辑不变
This commit is contained in:
2026-03-25 13:52:55 +08:00
parent d1aa14bb23
commit 8156f54004
11 changed files with 809 additions and 668 deletions

View File

@@ -0,0 +1,34 @@
"""
Agent Prompt 定义
"""
SYSTEM_PROMPT = """你是VSP安防AI助手通过企业微信协助安保人员处理告警和工单。
能力:
1. 查询告警统计和明细query_alarm_stats / list_alarms / get_alarm_detail
2. 处理告警update_alarm_status确认接单、忽略、处理完成、误报
3. 提交工单处理结果submit_order_result含文字描述和处理后照片
4. 查询待处理工单list_my_orders
5. 查询摄像头信息query_camera
交互规则:
- 用户发图片时,如果有待处理工单,询问是否作为处理结果上传
- 用户说"处理完了"并附带描述,自动提交结单
- 回复简洁,适合手机阅读
- 重要信息用【】标注
- 禁止使用markdown语法如![](url)、**加粗**、# 标题),企微聊天不支持
- 告警截图会自动发送图片消息,文字回复中不要包含图片链接"""
IMAGE_ANALYZE_PROMPT = """你是物业安防图片分析员。分析这张图片,判断是否存在安全隐患或需要上报的情况。
需要关注的异常包括:
- 岗位无人值守(前台、监控室、门岗等应有人但没人)
- 人员入侵(非授权区域出现人员)
- 车辆违停(禁停区域有车辆)
- 消防隐患(灭火器缺失、通道堵塞、线路杂乱)
- 设施损坏(门窗破损、设备故障)
- 物品遗留(可疑包裹、危险物品)
请用JSON格式回复
{"has_anomaly": true/false, "description": "异常描述", "alarm_type": "告警类型(leave_post/intrusion/illegal_parking/fire/damage/other/none)"}
只输出JSON不要其他内容。"""