Files
tw/legacy/websocket_agent_reply_flow.py

54 lines
1.8 KiB
Python

import logging
from utils.observability import build_trace_id
from core.websocket_brain_flow import decide_brain_action, execute_brain_action
logger = logging.getLogger("cs_agent")
async def handle_agent_reply_flow(client, data: dict, *, workflow, shop_type_resolver):
"""处理单条消息:统一走 Brain 决策 + 执行。"""
try:
msg_text = client.to_chinese(data.get("msg", ""))
customer_id = data.get("from_id", "")
trace_id = build_trace_id(data.get("acc_id", ""), customer_id, data.get("msg_id", ""), msg_text[:64])
data["_trace_id"] = trace_id
shop_type = shop_type_resolver(data.get("acc_id", ""), client.to_chinese(data.get("goods_name", "") or ""))
customer_msg = client._build_customer_message(data)
decision = await decide_brain_action(
client,
data,
customer_msg,
trace_id=trace_id,
msg_text=msg_text,
shop_type=shop_type,
)
client._activity_log(
"brain_decision",
trace_id=trace_id,
acc_id=data.get("acc_id", ""),
customer_id=data.get("from_id", ""),
action=decision.action,
source=decision.source,
should_reply=bool(decision.should_reply),
need_transfer=bool(decision.need_transfer),
)
await execute_brain_action(
client,
data,
decision=decision,
trace_id=trace_id,
msg_text=msg_text,
)
except Exception as e:
logger.error("Agent 处理失败: %s", e)
client._activity_log(
"agent_process_error",
trace_id=data.get("_trace_id", ""),
acc_id=data.get("acc_id", ""),
customer_id=data.get("from_id", ""),
error=str(e),
)