From b8368068ae6244380c1e412f751d53f7ce535891 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9C=B1=E6=BD=AE?= Date: Sun, 15 Mar 2026 16:53:18 +0800 Subject: [PATCH] =?UTF-8?q?=20=E5=BF=83=E8=B7=B3=E5=8F=91=E9=80=81?= =?UTF-8?q?=E5=A2=9E=E5=8A=A0=2015=20=E7=A7=92=E9=97=B4=E9=9A=94=E5=88=A4?= =?UTF-8?q?=E6=96=AD=EF=BC=8C=E5=8F=91=E9=80=81=E5=90=8E=E4=B9=9F=E6=9B=B4?= =?UTF-8?q?=E6=96=B0=20last=5Fyield=5Ftime?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- routes/chat.py | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/routes/chat.py b/routes/chat.py index 6ecb5e5..cc52310 100644 --- a/routes/chat.py +++ b/routes/chat.py @@ -155,6 +155,7 @@ async def enhanced_generate_stream_response( # 输出控制器:确保 preamble 先输出,然后是 agent stream preamble_output_done = False + last_yield_time = time.time() while True: try: @@ -165,6 +166,7 @@ async def enhanced_generate_stream_response( # 立即输出 preamble 内容 if item_data: yield item_data + last_yield_time = time.time() preamble_output_done = True elif item_type == "preamble_done": @@ -175,6 +177,7 @@ async def enhanced_generate_stream_response( # Agent stream 内容,需要等待 preamble 输出完成 if preamble_output_done: yield item_data + last_yield_time = time.time() else: # preamble 还没输出,先放回队列 await output_queue.put((item_type, item_data)) @@ -191,9 +194,11 @@ async def enhanced_generate_stream_response( if all(task.done() for task in [preamble_task_handle, agent_task_handle]): # 所有任务都完成了,退出循环 break - # 发送空内容心跳包保持连接活跃,防止 nginx/客户端超时断开 - heartbeat_chunk = create_stream_chunk(f"chatcmpl-heartbeat", config.model_name, "") - yield f"data: {json.dumps(heartbeat_chunk, ensure_ascii=False)}\n\n" + # 15秒无消息输出时才发送心跳包保持连接活跃 + if time.time() - last_yield_time >= 15: + heartbeat_chunk = create_stream_chunk(f"chatcmpl-heartbeat", config.model_name, "") + yield f"data: {json.dumps(heartbeat_chunk, ensure_ascii=False)}\n\n" + last_yield_time = time.time() continue # 发送结束标记