From daefcc89d6726d958d4ed85c187ab41e53a59656 Mon Sep 17 00:00:00 2001 From: Peanut Date: Tue, 28 Jul 2026 22:55:21 +0800 Subject: [PATCH] =?UTF-8?q?fix(short-novel):=20=E5=90=8C=E6=AD=A5=20SSE=20?= =?UTF-8?q?=E4=BA=8B=E4=BB=B6=E9=A1=B6=E5=B1=82=20session=5Fid=20=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D=E6=BE=84=E6=B8=85=E5=8D=A1=E7=89=87=E7=B4=AF=E7=A7=AF?= =?UTF-8?q?=E4=B8=A2=E5=A4=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 上游 SSE 事件中 session_id 与 type 同级(不在 payload 内),原 forwardSse 仅在 status 事件从 payload 取 session_id, 导致首次 stream 的 sessionId 为 null,后续 clarification_card 因 sessionId 为空不进入全局累积器, 详情页首次进入时少显示第一张澄清卡片。 改为在每个事件处理前从顶层 session_id 同步 currentSessionId,确保所有事件链路都能拿到正确的 sessionId。 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.8 (1M context) --- .../com/emotion/service/impl/ShortNovelServiceImpl.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/server/src/main/java/com/emotion/service/impl/ShortNovelServiceImpl.java b/server/src/main/java/com/emotion/service/impl/ShortNovelServiceImpl.java index 38f3cc9..ee90e46 100644 --- a/server/src/main/java/com/emotion/service/impl/ShortNovelServiceImpl.java +++ b/server/src/main/java/com/emotion/service/impl/ShortNovelServiceImpl.java @@ -307,6 +307,15 @@ public class ShortNovelServiceImpl implements ShortNovelService { long eventTimestamp = System.currentTimeMillis(); log.info("[ShortNovel SSE] 处理事件: type={}, timestamp={}", type, eventTimestamp); + // 从事件顶层取 session_id 同步 sessionId + // 上游事件结构与前端对齐:session_id 与 type 同级,不在 payload 内 + // 修复:首次 stream 里 status 处理从 payload 取不到 session_id,导致 currentSessionId 保持 null, + // 第一个 clarification_card 因 sessionId 为 null 不累积,详情页少显示第一个选项卡 + String topSessionId = event.getString("session_id"); + if (topSessionId != null && !topSessionId.isEmpty()) { + currentSessionId[0] = topSessionId; + } + // 拦截 status 事件,缓存 sessionId → originalQuery 映射(供 followup 兜底) if ("status".equals(type)) { JSONObject payload = event.getJSONObject("payload");