diff --git a/routes/chat.py b/routes/chat.py index b165631..16e9619 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 # 发送结束标记