refactor: split websocket flows and add brain action decision pipeline
This commit is contained in:
53
core/websocket_agent_reply_flow.py
Normal file
53
core/websocket_agent_reply_flow.py
Normal file
@@ -0,0 +1,53 @@
|
||||
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),
|
||||
)
|
||||
Reference in New Issue
Block a user