Flask如何實現類似ChatGPT的實時流式響應?

Flask如何實現類似ChatGPT的實時流式響應?

使用flask模擬chatgpt的實時流式響應

許多開發者希望在Flask應用中實現類似ChatGPT的實時響應效果:內容生成過程中持續傳輸給客戶端。然而,簡單的Flask response 對象無法滿足此需求,它會等待生成器函數完全執行后才發送結果。本文探討如何利用Flask框架實現真正的流式傳輸。

問題根源在于原始代碼直接使用response 對象包裹生成器函數,導致瀏覽器必須等待生成器完全執行才能顯示內容,與預期實時響應效果相悖。

改進方案的核心在于stream_with_context 裝飾器。 以下代碼片段展示了改進后的方法:

from flask import stream_with_context, request  @app.route('/stream') def streamed_response():     def generate():         yield 'Hello '         yield request.args['name']         yield '!'     return app.response_class(stream_with_context(generate()))

stream_with_context(generate()) 將生成器函數進行包裝。 stream_with_context 的作用至關重要,它確保生成器在每次 yield 后立即將數據返回客戶端,而非等待整個生成器執行完畢。 此例中,程序先返回“Hello ”,然后根據請求參數 name 返回相應名稱,最后返回“!”,實現了邊生成邊傳輸的效果。

與原始代碼相比,改進后的代碼利用 stream_with_context 避免了等待整個生成器函數執行完畢才返回數據的問題,實現了真正的流式傳輸,客戶端可以實時接收數據,從而模擬ChatGPT的實時響應效果。 需要注意的是,request.args[‘name’] 展示了參數傳遞方式,實際應用中可根據需要替換為其他數據獲取方式,例如從數據庫或其他API獲取數據。 通過這種方法,可以構建更動態和交互式的Web應用。

? 版權聲明
THE END
喜歡就支持一下吧
點贊12 分享