聊聊大模型"打字機"效果的背後技術——SSE

轉載請註明出處:https://www.cnblogs.com/zhiyong-ITNote

SSE:Server Sent Event;服務器發送事件。
Server-Sent Events(SSE)是一種由服務器向客戶端推送實時數據的技術。它是構建基於事件的、服務器到客戶端的通信的一種方法,特別適用於需要實時更新和推送信息的應用場景,如實時通知、股票交易、實時遊戲狀態更新等。
SSE的工作原理是,一旦客戶端(通常是瀏覽器)與服務器建立連接,該連接會保持開放狀態,服務器就可以推送事件給客戶端,直到客戶端或服務器決定關閉它,而無需客戶端不斷地詢問服務器是否有新消息。這大大減少了網絡通信量,提高了應用程序的性能和響應速度。

從技術原理來看,其實就是事件的發佈訂閱。客戶端訂閱服務器端的事件數據;一旦服務器端數據就緒,封裝成事件推送到客戶端。
但從底層來分析,其實現依賴於底層協議與瀏覽器的支持。SSE的底層協議還是HTTP協議,以ChatGLM的請求爲例,請求頭中設置Accept:
image.png
返回的響應只有響應頭:
image.png
此時只是建立了連接;一旦服務端數據準備好了,將會推送事件消息給客戶端,基本的消息由以下幾部分組成:

  • data:實際的消息數據;
  • id:可選,消息的唯一標識符,用於在連接重新建立時同步消息;
  • event:可選,定義事件類型,用於客戶端區分消息的類型;
  • retry:可選,自動重連的時間(毫秒),如果連接中斷,客戶端在自動重新連接之前,需要等待多長時間;

每個消息要以兩個換行符(\n\n)結束。SSE返回示例數據如下:

id: 110
event: foo
data: Hello, 

id: 111
event: foo
data: , 

id: 112
event: foo
data: world

id: 113
event: foo
data: !

標準的SSE返回內容是增量生成返回的,因此客戶端需要單獨處理合並內容塊。
ChatGPT等AI模型回覆消息時的 打字機 效果,其原理就是基於SSE協議實現的,只是在服務端做了處理,拼接了SSE每次返回的內容;前端直接展示效果就行。返回內容:

id: 110
event: foo
data: Hello, 

id: 111
event: foo
data: Hello, world!

後端可以處理爲全量返回,如上,客戶端可以直接展示,不需要多餘的處理。

轉載請註明出處:https://www.cnblogs.com/zhiyong-ITNote

首發於個人公衆號
image

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章