diff --git a/frontend/src/components/chat/AssistantMessage.test.tsx b/frontend/src/components/chat/AssistantMessage.test.tsx
index fff4701cb..aa1df0edb 100644
--- a/frontend/src/components/chat/AssistantMessage.test.tsx
+++ b/frontend/src/components/chat/AssistantMessage.test.tsx
@@ -636,6 +636,17 @@ describe('AssistantMessage', () => {
// 测试里的 selector 不订阅 store,换一个 message 引用触发重渲染。
rerender();
expect(screen.getByTestId('suggested-questions')).toBeInTheDocument();
+
+ // ready 事件先于封口到达,流结束前推荐区不能消失。
+ rerender(
+ ,
+ );
+ expect(screen.getByTestId('suggested-questions')).toBeInTheDocument();
streamSlotState.byConversation = {};
});
});
diff --git a/frontend/src/components/chat/AssistantMessage.tsx b/frontend/src/components/chat/AssistantMessage.tsx
index 0c8b35d01..d1b66fc80 100644
--- a/frontend/src/components/chat/AssistantMessage.tsx
+++ b/frontend/src/components/chat/AssistantMessage.tsx
@@ -210,8 +210,9 @@ function AssistantMessageFrame({
const slot = selectStreamSlot(state, conversationId);
return slot.displayedTextLength >= slot.totalTextLength;
});
+ // ready 事件在封口前就会到达,状态从 pending 变 ready 后也要继续显示到流结束,否则会闪一下。
const awaitingSuggestedQuestions = isStreaming
- && message.suggestedQuestionsStatus === 'pending'
+ && (message.suggestedQuestionsStatus === 'pending' || message.suggestedQuestionsStatus === 'ready')
&& streamTextCaughtUp;
const answerEvidenceSidebar = useMemo(