From 1753f66bd9c47c837a963f1138bb71d88306a00a Mon Sep 17 00:00:00 2001 From: 16337 <1633794139@qq.com> Date: Fri, 20 Mar 2026 11:14:37 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=9F=E8=83=BD=EF=BC=9A=E4=BC=81=E5=BE=AE?= =?UTF-8?q?=E5=9B=9E=E8=B0=83=E6=94=AF=E6=8C=81=E5=9B=BE=E7=89=87=E6=B6=88?= =?UTF-8?q?=E6=81=AF=EF=BC=8C=E8=B7=AF=E7=94=B1=E5=88=B0=20Agent=20?= =?UTF-8?q?=E5=9B=BE=E7=89=87=E5=88=86=E6=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 收到图片先回复"正在分析",异步调 VLM 分析后主动回复结果。 --- app/routers/wechat_callback.py | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/app/routers/wechat_callback.py b/app/routers/wechat_callback.py index 55cf8a6..119f691 100644 --- a/app/routers/wechat_callback.py +++ b/app/routers/wechat_callback.py @@ -70,11 +70,19 @@ async def wechat_agent_message( asyncio.create_task(_process_agent_message(user_id, content)) return PlainTextResponse(content="success") + # ---- 图片消息 → Agent 图片分析 ---- + if msg_type == "image": + user_id = msg.get("FromUserName", "") + media_id = msg.get("MediaId", "") + logger.info(f"收到企微图片: user={user_id}, media_id={media_id}") + asyncio.create_task(_process_agent_image(user_id, media_id)) + return PlainTextResponse(content="success") + return PlainTextResponse(content="success") async def _process_agent_message(user_id: str, content: str): - """异步处理消息并主动回复""" + """异步处理文字消息并主动回复""" try: from app.services.agent_dispatcher import get_agent_dispatcher from app.services.wechat_service import get_wechat_service @@ -88,6 +96,30 @@ async def _process_agent_message(user_id: str, content: str): logger.error(f"Agent消息处理失败: user={user_id}, error={e}", exc_info=True) +async def _process_agent_image(user_id: str, media_id: str): + """异步处理图片消息:先回复"正在分析",再调 VLM 分析""" + try: + from app.services.agent_dispatcher import get_agent_dispatcher + from app.services.wechat_service import get_wechat_service + + wechat = get_wechat_service() + # 先回复提示,避免用户等太久 + await wechat.send_text_message(user_id, "正在分析图片,请稍候...") + + dispatcher = get_agent_dispatcher() + reply = await dispatcher.handle_image(user_id, media_id) + + await wechat.send_text_message(user_id, reply) + except Exception as e: + logger.error(f"Agent图片处理失败: user={user_id}, error={e}", exc_info=True) + try: + from app.services.wechat_service import get_wechat_service + wechat = get_wechat_service() + await wechat.send_text_message(user_id, "图片处理失败,请稍后重试。") + except Exception: + pass + + async def _process_card_button_click(msg: dict): """ 处理模板卡片按钮点击事件(两步状态机)