From d2835dd272d9f8dfee6fc6bec964edd7cd04691d Mon Sep 17 00:00:00 2001 From: youpaishidifu <1@ypshidifu.cn> Date: Wed, 28 Oct 2026 17:07:43 +0800 Subject: [PATCH] =?UTF-8?q?=E7=AC=AC58=E6=89=B9=EF=BC=9A=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E4=BA=92=E5=8A=A8=E6=97=A5=E5=BF=97=E9=9D=99=E9=BB=98=EF=BC=8C?= =?UTF-8?q?=E5=8F=AA=E5=9C=A8=E7=8A=B6=E6=80=81=E5=8F=98=E5=8C=96=E6=97=B6?= =?UTF-8?q?=E8=AE=B0=E5=BD=95=20-=20=E7=A7=BB=E9=99=A4=E6=AF=8F=E6=AC=A1?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E7=9A=84=E8=B0=83=E8=AF=95=E5=9D=97=EF=BC=88?= =?UTF-8?q?=E8=AF=B7=E6=B1=82=E4=BD=93/=E5=93=8D=E5=BA=94=E4=BD=93/?= =?UTF-8?q?=E5=93=8D=E5=BA=94=E5=A4=B4=EF=BC=89=20-=20=E6=AD=A3=E5=B8=B8?= =?UTF-8?q?=E8=A7=A6=E5=8F=91=E9=9B=B6=E6=97=A5=E5=BF=97=EF=BC=8C=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E5=8F=AA=E4=B8=80=E8=A1=8C=E7=AE=80=E8=A6=81=EF=BC=88?= =?UTF-8?q?HTTP=E7=A0=81=E6=88=96=E8=B6=85=E6=97=B6=EF=BC=89=20-=20?= =?UTF-8?q?=E6=96=B0=E5=A2=9EprevAutoChatFailed=E7=8A=B6=E6=80=81=E8=BF=BD?= =?UTF-8?q?=E8=B8=AA=EF=BC=8C=E5=A4=B1=E8=B4=A5=E2=86=92=E6=88=90=E5=8A=9F?= =?UTF-8?q?=E6=97=B6=E8=AE=B0=E6=81=A2=E5=A4=8D=20-=20=E6=9C=89=E5=8F=98?= =?UTF-8?q?=E5=8C=96=E5=9C=A8=E5=8F=AB=EF=BC=8C=E6=B2=A1=E5=8F=98=E5=8C=96?= =?UTF-8?q?=E9=97=AD=E5=98=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/Sdf1_login/AIChatManager.java | 58 ++++++++++++--------- 1 file changed, 32 insertions(+), 26 deletions(-) diff --git a/src/main/java/Sdf1_login/AIChatManager.java b/src/main/java/Sdf1_login/AIChatManager.java index fb7e467..972ac3c 100644 --- a/src/main/java/Sdf1_login/AIChatManager.java +++ b/src/main/java/Sdf1_login/AIChatManager.java @@ -40,6 +40,10 @@ public class AIChatManager { // ★ 互动指标跳过日志静默:首次跳过记一条,之后只在状态变化(从≥→<)时再记 private boolean prevOnlineSufficient = true; + // ★ 自动互动日志静默:只在状态变化(成功→失败 或 失败→成功)时记一条 + // 正常触发不打印,失败只一行简要错误,避免日志被刷屏 + private boolean prevAutoChatFailed = false; + // 默认模型 private String defaultModelFull = ""; @@ -801,23 +805,17 @@ public class AIChatManager { String recentChat = compressChatBuffer(endpoint.maxToken); String prompt = "以下是服务器最近的聊天记录:\n" + recentChat + "\n\n请根据聊天内容,自然地抛出一个话题或问题,引导大家参与讨论,带动服务器的活跃气氛。不要直接点名任何玩家,而是抛出一个开放性的话题让大家都能参与。"; - plugin.getLogger().info("[AI聊天] 触发自动互动"); // ★ 死循环防护:触发前先更新时间戳,请求挂起/超时/失败都不会被下一秒重复触发 lastAiReplyTime = System.currentTimeMillis(); + // ★ 日志静默:正常触发不打印"触发自动互动",只在失败时记一条简要错误 + // 状态变化(失败→成功 或 成功→失败)时记一条恢复/告警 + // 异步发送 String systemPrompt = buildSystemPrompt(); String jsonBody = buildChatRequest(defaultModelFull, systemPrompt, prompt, endpoint.maxToken); String requestUrl = buildRequestUrl(endpoint); - // ★ 400调试日志:自动互动请求 - plugin.getLogger().info("[AI聊天-调试] === 自动互动请求开始 ==="); - plugin.getLogger().info("[AI聊天-调试] 模型全名: " + defaultModelFull); - plugin.getLogger().info("[AI聊天-调试] 请求URL: " + requestUrl); - plugin.getLogger().info("[AI聊天-调试] 自定义供应商: " + endpoint.isCustom); - plugin.getLogger().info("[AI聊天-调试] 请求体JSON: " + jsonBody); - plugin.getLogger().info("[AI聊天-调试] === 自动互动请求结束 ==="); - CompletableFuture.supplyAsync(() -> { try { HttpRequest request = HttpRequest.newBuilder() @@ -830,33 +828,41 @@ public class AIChatManager { return httpClient.send(request, HttpResponse.BodyHandlers.ofString(StandardCharsets.UTF_8)); } catch (Exception e) { - plugin.getLogger().warning("[AI聊天] 自动互动请求异常: " + e.getMessage()); return null; } }).thenAccept(response -> { - if (response == null || response.statusCode() != 200) { - // ★ 400调试日志:自动互动失败 - if (response != null) { - plugin.getLogger().warning("[AI聊天-调试] === 自动互动请求失败 ==="); - plugin.getLogger().warning("[AI聊天-调试] HTTP状态码: " + response.statusCode()); - plugin.getLogger().warning("[AI聊天-调试] 模型全名: " + defaultModelFull); - plugin.getLogger().warning("[AI聊天-调试] 请求URL: " + requestUrl); - plugin.getLogger().warning("[AI聊天-调试] 请求体JSON: " + jsonBody); - response.headers().map().forEach((name, values) -> { - plugin.getLogger().warning("[AI聊天-调试] 响应头 " + name + ": " + String.join(", ", values)); - }); - plugin.getLogger().warning("[AI聊天-调试] 响应体: " + response.body()); - plugin.getLogger().warning("[AI聊天-调试] === 自动互动请求失败结束 ==="); - } - handleRequestFailure("[自动] " + prompt.substring(0, Math.min(100, prompt.length())), - "自动互动失败: HTTP " + (response != null ? response.statusCode() : "N/A")); + if (response == null) { + // ★ 日志静默:异常只记一行,不刷屏 + plugin.getLogger().warning("[AI聊天] 自动互动请求异常(网络超时)"); + handleRequestFailure("[自动] " + prompt.substring(0, Math.min(100, prompt.length())), "自动互动失败: 请求异常"); + prevAutoChatFailed = true; return; } + if (response.statusCode() != 200) { + // ★ 日志静默:非200只记一行状态码,不打印完整响应体 + plugin.getLogger().warning("[AI聊天] 自动互动失败: HTTP " + response.statusCode()); + handleRequestFailure("[自动] " + prompt.substring(0, Math.min(100, prompt.length())), + "自动互动失败: HTTP " + response.statusCode()); + prevAutoChatFailed = true; + return; + } + String reply = parseChatResponse(response.body()); if (reply != null) { Bukkit.broadcastMessage("§d§l[AI] §f" + reply); recordIssue("[自动] " + prompt.substring(0, Math.min(100, prompt.length())), reply); lastAiReplyTime = System.currentTimeMillis(); + + // ★ 状态变化:失败→成功,记一条恢复日志 + if (prevAutoChatFailed) { + plugin.getLogger().info("[AI聊天] 自动互动恢复正常"); + prevAutoChatFailed = false; + } + } else { + plugin.getLogger().warning("[AI聊天] 自动互动响应解析失败"); + handleRequestFailure("[自动] " + prompt.substring(0, Math.min(100, prompt.length())), + "自动互动失败: 响应解析失败"); + prevAutoChatFailed = true; } }); } finally {