码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 聊聊大模型"打字机"效果的背后技术——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

  • 相关阅读:
    【postgres】docker desktop全部署后端MVC + postgres + Adminer可视化数据库
    【vue-admin-element】在侧边栏和主体部位之上添加区域
    我所理解的 UI Toolkit 启蒙阶段(一)
    科技T3国产平台!成功搭载“翼辉国产实时系统SylixOS”
    Mall脚手架总结(二) —— SpringData操作Elasticsearch
    D. Empty Graph(贪心/二分)
    关于Ubuntu ssh远程连接报错和无法root登录的解决方法
    计算机毕业设计【HTML+CSS+JavaScript服装购物商城】毕业论文源码
    【CFD小工坊】浅水方程的离散及求解方法
    环境检测lims系统 环境检测行业实验室管理系统
  • 原文地址:https://www.cnblogs.com/zhiyong-ITNote/p/18100091
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号