54 lines
1.8 KiB
Python
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),
|
|
)
|