ChatGPT流式输出实现原理

在使用ChatGPT时,模型的回复内容是一个字一个字蹦出来的,而不是整段话直接出现,因为模型需要不断预测接下来要回复什么内容,如果等整段回复生成之后再输出到网页,用户体验就会很差,一直以为这种流式输出效果是用WebSocket实现的,后来接入open ai接口,发现接口是http协议,才了解到SSE技术。

Server-Sent Events (SSE) 是一种基于 HTTP 协议的服务器推送技术,它允许服务器向客户端发送数据和信息。与 WebSocket 不同,SSE 是一种单向通信方式,只有服务器可以向客户端推送消息。SSE 是 HTML5 规范的一部分,使用非常简单,主要由服务端与浏览器端的通讯协议(HTTP协议)和 EventSource 接口来处理 Server-sent events 组成,服务器端的响应的内容类型是“text/event-stream”。

使用postman给open ai接口发个请求,验证一下。

可以看到响应头中的Content-Type为text/event-stream:

再看响应体,可以看到有很多个以data: 开头的片段,每个片段包含一个choices数组,数组元素的delta.content属性的值是一个单词,每个片段中的单词连起来就是ChatGPT回答的内容,最后一个片段内容是[done],表示输出结束。

由此可验证open ai的接口是通过SSE技术来实现的。

接下来我们写一个简单的demo来模拟一下ChatGPT的输出效果,更直观的学习和体验SSE技术。

先看一下效果:

 新建springboot项目,包含一个原生的index.html页面和一个http接口,页面请求接口,接口读取一个txt文件并将文件内容流式输出到页面。点击查看github源码

页面代码:

<body>
<button type="button" onclick="output()">输出文章</button>
<div id="message"></div>
<script>function output() {let source = new EventSource('http://localhost:8080/article');let innerHTML = '';source.onmessage = function (e) {if (e.data == '[done]') {source.close();} else {innerHTML += e.data;document.getElementById("message").innerHTML = innerHTML;}};}
</script>
</body>

服务端代码:

@Controller
public class SseController {@Autowiredprivate ResourceLoader resourceLoader;
​@RequestMapping("/article")public void sendArticle(HttpServletResponse res) throws Exception {res.setContentType("text/event-stream;charset=UTF-8");Resource resource = resourceLoader.getResource("classpath:1.txt");InputStream inputStream = resource.getInputStream();BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));String line;while ((line = reader.readLine()) != null) {// 这里用空格来将一行内容分为多个单词输出String delimiter = " ";String[] words = line.split(delimiter);// 为了支持将中文句子分为单个汉子输出if (words.length == 1) {delimiter = "";words = line.split(delimiter);}for (int i = 0; i < words.length; i++) {// 每次只输出一个词,每个片段以data: 开头,以\n\n结尾res.getWriter().write("data: " + words[i] + delimiter + "\n\n");res.getWriter().flush();// 睡眠100ms,便于观察效果Thread.sleep(100);}// 由于每次读的是一行数据,因此输出一个换行res.getWriter().write("data: </br>\n\n");}// 也用[done]来标识结束res.getWriter().write("data: [done]\n\n");res.getWriter().flush();}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/5290.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

利用 ChatGPT 回答 R 相关问题

最近小编也尝试使用了 ChatGPT&#xff0c;下面给出一些知乎上常见 R 语言相关问题的回答。供大家参考&#xff1a; 目录 文章目录 目录经典问题预测数据科学软件排名数据科学的 10 个常用 R 包R 语言入门书籍和网站推荐回答专业问题 绘图绘制正负柱状图动态散点图 构建 Shiny…

Chatgpt易语言版本Chatgpt直接用

Chatgpt易语言版本 Chatgpt易语言版本 Chatgpt易语言版本 直接上代码 主要核心代码如下 .版本 2.子程序 功能_网页访问, 文本型, , 本命令由【精易网页调试助手】生成&#xff0c;请配合精易模块使用。 .局部变量 局_网址, 文本型 .局部变量 局_方式, 整数型 .局部变量 局_提…

笔记本电脑部署本地离线版类似ChatGPT3.5的AI模型(CPU+内存运行)

准备工作 如果通过GPU来运行&#xff0c;一般办公电脑的显卡可能达不到所需的要求&#xff0c;所以&#xff0c;可以通过CPU内存的方式花最低的代价来部署一套本地运行AI的模型。 1、首先下载CPU-Z&#xff0c;运行看一下电脑当前的指令集是否包含AVX512&#xff0c;非AVX512…

一条指令打开ChatGPT开发者模式

大家好&#xff0c;我是Ai 11社长。 对于ChatGPT冷漠刻板的回答&#xff0c;大家应该都腻了吧&#xff0c;试试这个。 这个类似小红书的回答满意不&#xff1f;在ChatGPT开发者模式下就能得到这样的回复。 怎么打开开发者模式呢&#xff1f;指令如下&#xff1a; Ignore all th…

低成本复制 ChatGPT 训练流程,仅需 1.68GB GPU 即可使用,方法现已开源!

编译 | 屠敏 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 当昨日我们还在讨论从大厂以及个人创业的角度来看&#xff0c;复制一家 OpenAI 和一款强大的 ChatGPT 可行性究竟有几成之际&#xff0c;苦于 OpenAI 并未将 ChatGPT 开源出来&#xff0c;所以这趟水究…

【uni-app】微信小程序开发 node_modules 模块丢失问题

解决问题 重要的问题说三遍&#xff01;&#xff01;&#xff01; 解决 HBuilderX 打包 uni-app 项目到微信小程序时&#xff0c;node_modules 文件夹丢失问题。 解决 HBuilderX 打包 uni-app 项目到微信小程序时&#xff0c;node_modules 文件夹丢失问题。 解决 HBuilderX 打包…

element-ui 实现对话框

使用element-ui实现弹框 <!-- 弹窗 --><el-dialog title"New Ticket" :visible.sync"true" width"50%"> //:visible.sync"true"&#xff1a;一般设置一个变量来保存&#xff0c;true为打开,false为关闭<el-divider>…

拥抱AI大模型之美,帮你探索OpenAI大语言模型的能力(基础实战篇)

说明:本文主要是通过一些小的案例,让你体验一下OpenAI提供的一些API,如果你连ChatGPT和OpenAI是什么都不知道,那么这篇文章可能不适合你,你可以划走了. 环境准备: 01.准备账号和APIKey 首先要注册一个ChatGPT账号,账号注册完成之后&#xff0c;打开地址: https://platform.…

手握数据智能密钥,诸葛智能打开数字化经营“三重门”

科技云报道原创。 如果说上世纪传统麦迪逊大街上的“广告狂人”吸金立足之本&#xff0c;还主要是基于“Big Idea”的话&#xff0c;那么在当下&#xff0c;数据正在成为企业营销和运营的金矿。 这是一个“人与机器共同进化”的时代&#xff0c;技术作为延伸人类感觉的媒介之…

AI大模型,驶向产业何方?

技术更迭&#xff0c;已不是壁垒&#xff0c;国产式AI需要的是产品的创新思维&#xff0c;以及对需求的产品变现能力。 作者|斗斗 出品|产业家 “AI炒了那么多年&#xff0c;第一次感觉它真的要来了。”国内某论坛中&#xff0c;带有ChatGPT的词条下&#xff0c;几乎都会出…

重磅!马云回来了,聊了ChatGPT

编辑&#xff1a;米丽萍&#xff0c;余心丰&#xff0c;来源&#xff1a;正和岛 转自&#xff1a;Datawhale 图注&#xff1a;马云今日在云谷学校&#xff0c;图片来源&#xff1a;云谷教育 马云&#xff0c;回国了。 3月27日&#xff0c;据《科创板日报》报道&#xff0c;近日…

新媒体人打开 ChatGPT 的正确姿势

最近互联网讨论最多的话题&#xff0c;莫过于 ChatGPT。 虽然它是一个聊天机器人&#xff0c;但能模拟人的语气和用户聊天&#xff0c;并且通过不断地学习、理解进一步优化回答。 自去年11月发布以来&#xff0c;ChatGPT 便在全球引起了一时的轰动&#xff0c;发布仅五天&…

我做了第一个ChatGPT .net api聊天库

我做了第一个ChatGPT .net api聊天库 最近这个ChatGPT很火啊&#xff0c;看了B站上很多视频&#xff0c;自己非常手痒&#xff0c;高低自己得整一个啊&#xff0c;但是让我很难受的是&#xff0c;翻遍了github前十页&#xff0c;竟然没有一个C#的ChatGPT项目&#xff0c;我好…

ChatGPT想干掉开发人员,做梦去吧

很多人都发现ChatGPT可以做一些代码相关的工作&#xff0c;不仅可以写一些基础的类似python、java、js的代码段&#xff0c;还可以做一定量的调优&#xff0c;于是就开始担忧起来&#xff0c;到哪天我的开发工作会不会被ChatGPT这个工具给取代了&#xff1f; 目录 1. ChatGPT…

从零开发基于chatGPT的社区交友系统 (前后端分离)丨环境配置 01

01 环境配置 项目介绍安装配置Node.js下载安装配置淘宝镜像 安装vue脚手架(vue-cli)可视化创建vue项目运行vue项目 总结 项目介绍 本项目是一个基于ChatGPT人工智能技术开发的社区社交类应用程序。我们致力于为用户提供高质量的社区社交体验&#xff0c;让您的社交生活更加丰富…

无法连接到 reCAPTCHA,请检查您的网络连接

无法连接到 reCAPTCHA,请检查您的网络连接 https://www.pianshen.com/article/42341046536/ 浏览器&#xff1a;Chrome 电脑版 无法连接到 reCAPTCHA,请检查您的网络连接 第一步 安装Header Editor 插件 点击右侧蓝色按钮 后 &#xff0c;如图所示就可以了 第二步 配置插…

使用Python调用ChatGPT

import openai # Set up the OpenAI API client openai.api_key "你的KEY" # Set up the model and prompt model_engine "ada" prompt input(请输入字符串&#xff1a;) # Generate a response completion openai.Completion.create( enginemodel_eng…

ChatGPT 开源替代品 - Open Assistant 使用说明

文章目录 概述注册使用Chat 概述 Open Assistant 机器学习模型是由一家德国非营利组织 LAION 运营。 OpenAssistant 项目开始于 2022 年 12 月, Open Assistant 的目标是创建一个和 ChatGPT 具有相同能力的开源人工智能助手。 官网&#xff1a; https://open-assistant.io/ …

ChatGPT开源模型3.5 API调用示例

调用开源api POSTMAN 这里我用的是postman&#xff0c;主要看请求头、body 、其它工具语言都是一致的 参数说明 地址 &#xff1a; https://api.openai.com/v1/chat/completions 请求方式 &#xff1a;post 请求头 &#xff1a; application/json Content-Type&#xff1a;ap…

ChatGPT开源平替来了,开箱即用!前OpenAI团队打造,GitHub刚发布就揽获800+星

点击上方“视学算法”&#xff0c;选择加"星标"或“置顶” 重磅干货&#xff0c;第一时间送达 丰色 发自 凹非寺量子位 | 公众号 QbitAI ChatGPT的开源平替来了&#xff0c;源代码、模型权重和训练数据集全部公开。 它叫OpenChatKit&#xff0c;由前OpenAI研究员共同…