diff --git a/core/websocket_client.py b/core/websocket_client.py index e1f707e..2b8177f 100755 --- a/core/websocket_client.py +++ b/core/websocket_client.py @@ -39,6 +39,7 @@ class _AnsiColorFormatter(logging.Formatter): ("[THINK/RAW_OUTPUT]", "[AI思考-原始输出]"), ("[REPLY->CUSTOMER]", "[AI回复客户]"), ("[ACTIVITY]", "[活动日志]"), + ("[AI质检]", "[AI质检]"), ) # 业务消息类型颜色(优先于 level) MESSAGE_COLOR_RULES = ( @@ -47,6 +48,7 @@ class _AnsiColorFormatter(logging.Formatter): ("[REPLY->CUSTOMER]", "\033[92m"), # bright green ("Agent 回复", "\033[92m"), # bright green ("[ACTIVITY]", "\033[95m"), # bright magenta + ("[AI质检]", "\033[93m"), # bright yellow ("收到新消息", "\033[36m"), # cyan ("发送成功", "\033[32m"), # green ("防抖等待", "\033[93m"), # bright yellow @@ -174,6 +176,7 @@ class QingjianAPIClient: ) self._tianwang_agent_name = os.getenv("TIANWANG_AGENT_NAME", "终结者").strip() or "终结者" self._reply_guard_enabled = os.getenv("AI_REPLY_GUARD_ENABLED", "true").lower() in ("1", "true", "yes") + self._reply_guard_verbose = os.getenv("AI_REPLY_GUARD_VERBOSE", "false").lower() in ("1", "true", "yes") # 延迟加载任务模块(避免循环导入) self.task_scheduler = None @@ -2034,6 +2037,14 @@ class QingjianAPIClient: if msg: context_lines.append(f"{role}:{msg}") context_text = "\n".join(context_lines) if context_lines else "无历史" + if self._reply_guard_verbose: + logger.info( + "[AI质检] 启动 | customer=%s | acc=%s | context_rows=%s | candidate=%s", + customer_id, + acc_id, + len(shop_rows), + text[:120], + ) deps = AgentDeps( msg_id=str(original_msg.get("msg_id", "") or "reply_guard"), @@ -2068,12 +2079,20 @@ class QingjianAPIClient: allow = bool(obj.get("allow", True)) rewrite = str(obj.get("rewrite", "") or "").strip() reason = str(obj.get("reason", "") or "").strip() or "guard_decision" + if self._reply_guard_verbose: + logger.info( + "[AI质检] 结果 | allow=%s | reason=%s | rewrite=%s", + allow, + reason, + (rewrite or "")[:160], + ) if allow: return True, (rewrite or text), reason if rewrite: return True, rewrite, reason return False, "", reason except Exception as e: + logger.warning("[AI质检] 异常,降级放行: %s", e) return True, text, f"guard_error:{e}" async def send_text(self, cy_id, acc_type, content):