网站被安全狗拦截网站制作公司

web/2025/9/26 2:30:22/文章来源:
网站被安全狗拦截,网站制作公司,萍乡建网站,seo店铺描述例子文章目录 前言一、非流式输出设计二、stream流式输出设计三、手撸一个流式输出项目总结 前言 之前对接过OpenAi大模型的官方API#xff0c;可以看到它有一个Stream参数#xff0c;设置成true的时候就是流式的对话输出#xff0c;现象就是一段一段的往外崩。 官方手册的地址… 文章目录 前言一、非流式输出设计二、stream流式输出设计三、手撸一个流式输出项目总结 前言 之前对接过OpenAi大模型的官方API可以看到它有一个Stream参数设置成true的时候就是流式的对话输出现象就是一段一段的往外崩。 官方手册的地址https://platform.openai.com/docs/api-reference/chat 基本知识点是在用户的提问以后大模型底层的TransFromer架构能够根据自然语言理解逐词分析概率继续预测下一部分的输出这个我们理解为模型的推流过程。那么就会有两种方式进行输出 1同步等待这部分推流全部结束通过HTTP响应一次性发送应答内容。 2异步只要模型有输出就针对推流的内容进行服务端的推送。 所以其实可以理解大模型本身就是异步推流的区别在于是否等它全部生成完对话再推送。对于流式的服务端推送整体上有两种实现方案WebSocket和SSE 那么我们这个流式对话场景用的哪一种呢 思考一下WebSocket和SSE的区别 WebSocket全双工适用于客户端和服务端双向交互并且WebSocket是独立于HTTP协议之外的另一套协议实现起来也相对复杂一些。SSE可以理解为单向的HTTP长连接只需要前端或者浏览器发起一次HTTP get请求后续服务端就可以向通道传输流式的数据了SSE比较适合类似流式输出和股票信息实时推送这种场景。 顺便引入一下常见的几种实时通讯技术的对比 https://blog.csdn.net/xwh3165037789/article/details/128137023 另外其实官方说的比较直接了设置之后如果数据推流的部分准备好了就会通过SSE的方式进行服务端推送。 还有需要注意服务端对这个协议的实现要求协议的描述参考下面地址 https://www.ruanyifeng.com/blog/2017/05/server-sent_events.html https://www.ruanyifeng.com/blog/2017/05/websocket.html 通过PostMan请求返回如下数据内容在Content里面最后以DONE结尾。 一、非流式输出设计 stream参数为默认false所以默认就是同步的。接入OpenAi的API以后向对应地址发起HTTP请求同步等待响应的结果就行了。所以本质上还是一次HTTP请求的过程。 但是一般为了进行后续的处理比如对话做Summary、保存历史记录信息或者利用缓存的话是可以把这次对话的内容入库的。 二、stream流式输出设计 理解一下整个流程设计 假如做的是一个对话平台项目的入口是一个Web页面通过HTTP的POST请求发起对话经过网关鉴权身份认证路由到接口如果body携带的stream参数为true进入streamChat的处理流程走主服务转去请求OpenAi的对话接口地址如果需要进行对话入库的话这个时候我们的服务端作为大模型服务的客户端Spring框架的WebFlux部分其实集成好了SseEmitter这个工具方便我们实现SSE功能需要通过EventSource的factory建立sse连接并且设置EventSourceListener监听器重写它的一系列方法包括onOpen、onEvent、onFailure、onClosed等。比如onEvent这个回调函数的作用就是当大模型输出事件触发的时候将读取到的数据写入数据库并且写入是可以通过请求内部的另外的写入HTTP的API触发的。在处理onClosed的时候需要考虑是否计算大模型的TokenSize占用作为附加信息入库和返回。 随后另外开启一个异步任务线程池里面主要负责以下部分 1心跳检测SSE中断重连 2从数据库里面分页加载数据 3通过SSE通道推送数据给前端控制台 三、手撸一个流式输出项目 为了更好理解我们可以手动实践写一个这样的项目做完了的话估计大家也都能做GPT代理了项目放在GitHub里面做个了记录。 后端Spring Boot 主应用代码 package com.example.ssedemo;import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;SpringBootApplication(scanBasePackages {com.example.*, web}) public class SsEdemoApplication {public static void main(String[] args) {SpringApplication.run(SsEdemoApplication.class, args);}}Controller层代码 package web;// 导入相关依赖 import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;import java.io.IOException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors;RestController RequestMapping(/api) public class EventController {private final ExecutorService executor Executors.newSingleThreadExecutor();private int i 0;GetMapping(/stream)public SseEmitter streamData() {SseEmitter sseEmitter new SseEmitter();// 模拟大模型计算并分批次推送数据executor.execute(() - {while (true) {try {// 这里是模拟计算过程实际项目中可能是从数据库、文件或其他来源获取数据String dataChunk Data Chunk i;// 发送一个事件给前端sseEmitter.send(SseEmitter.event().id(Long.toString(i)) // 可选用于标识事件ID.name(data) // 事件类型名.data(dataChunk, MediaType.TEXT_PLAIN));// 模拟延迟比如每次间隔1秒Thread.sleep(1000);} catch (IOException | InterruptedException e) {// 关闭 emitter 并处理异常sseEmitter.completeWithError(e);}}// 计算结束或达到某个条件时关闭 emitter // sseEmitter.complete();});return sseEmitter;} }CROS的配置 package web;import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;Configuration public class CorsConfig implements WebMvcConfigurer {Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping(/api/**).allowedOrigins(http://yourfrontenddomain.com) // 替换为您的前端域名.allowedMethods(GET, POST, PUT, DELETE, OPTIONS).allowedHeaders(*).allowCredentials(true).maxAge(3600);} }在使用SpringBoot3版本的时候可能会出现JDK版本报错处理方式如下 https://blog.csdn.net/giveupgivedown/article/details/134841844 https://blog.csdn.net/weixin_47889104/article/details/135289440 如果报错404了记得添加包扫描路径类似下面这种 SpringBootApplication(scanBasePackages {“com.example.demo”, “com.example.another.package”}) 运行起来项目结构可能是下面这样 后端启动以后直接浏览器访问80端口的API地址 http://localhost:8080/api/stream 就能看到有流式的输出 其实不写下面的前端代码也行利用SpringBoot内置的Tomcat直接查看浏览器页面。 前端使用JavaScript这里以原生Fetch API为例 // 创建一个新的EventSource实例连接到后端提供的SSE端点 var eventSource new EventSource(http://localhost:8080/api/stream);// 处理接收到的事件 eventSource.addEventListener(data, function(event) {var dataChunk event.data; // 接收的数据console.log(Received chunk:, dataChunk);// 在这里你可以更新UI例如将数据添加到页面上document.getElementById(output).innerText dataChunk \n; });// 监听连接错误 eventSource.onerror function(error) {console.error(Error occurred:, error); };// 如果需要在适当的时候可以关闭连接 // eventSource.close();上述提供的JavaScript代码片段可以在浏览器环境下执行它创建了一个与服务器建立连接的EventSource对象用于接收来自服务器的Server-Sent EventsSSE。只需要确保你在一个支持SSE的现代浏览器环境中并且服务器端这里是Spring Boot后端已经正确设置了SSE服务接口。将这段JavaScript代码嵌入到HTML文档中例如在 \script 标签内部以便在浏览器加载页面时执行 !DOCTYPE html html langen headmeta charsetUTF-8titleSSE Streaming Demo/titlestyle#output {height: 200px; /* 设置高度以限制输出区域 */overflow-y: scroll; /* 添加滚动条 */word-wrap: break-word; /* 自动换行 */border: 1px solid #ccc; /* 边框仅用于区分展示区域 */padding: 10px;}/style /head body div idoutput/divscript// JavaScript 代码放在这里var eventSource new EventSource(http://localhost:8080/api/stream);eventSource.addEventListener(message, function(event) { // 修改为 message 事件SSE 的标准事件类型var dataChunk event.data;var outputElement document.getElementById(output);var newLineNode document.createElement(p); // 使用段落元素以保证格式清晰newLineNode.textContent dataChunk;outputElement.appendChild(newLineNode);outputElement.scrollTop outputElement.scrollHeight; // 滚动到底部展示最新内容});eventSource.onerror function(error) {console.error(Error occurred:, error);}; /script /body /html其实IDEA支持直接打开或者转到浏览器打开的 如果出现这个CROS报错需要给服务端加跨域支持的配置 关于如何在浏览器执行参考下面 https://www.runoob.com/js/js-chrome.html https://jingyan.baidu.com/article/e4d08ffdc25e584ed3f60d48.html https://www.yzktw.com.cn/post/644689.html 先启动服务端的SpringBoot工程如果跨域配置好了然后运行前端JS代码 就可以看到服务端推送的流式输出了。这个项目其实可以做得更复杂一点后续有机会我们继续往里加功能加技术点进去。 其他参考地址 https://blog.csdn.net/fyk844645164/article/details/126680347 https://blog.csdn.net/xwh3165037789/article/details/128137023 https://juejin.cn/post/7209226686373609533 https://blog.csdn.net/weixin_40951507/article/details/135354852 http://wed.xjx100.cn/news/236173.html?actiononClick https://zhuanlan.zhihu.com/p/674994371 https://blog.csdn.net/qq_45399396/article/details/130972849 https://www.cnblogs.com/1996-Chinese-Chen/p/17913287.html https://blog.csdn.net/fengtaokelly/article/details/130702235 https://blog.csdn.net/Larry_Lee88/article/details/130995475 总结 以上就是对大模型流式和非流式输出的解析做完这个真有点想基于GPT代理搞点额外东西了大模型厂家也挺多的有人喜欢chatGPT最近感觉通义千问也挺好问了很多人是如何利用大模型的一个技术TL说他经常用大模型来写测试用例也有人用它帮忙理清思路查Bug或者写Demo或者命令等未来还是有比较广阔的应用场景的。

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

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

相关文章

做简历网站 知乎球队世界排名榜

大家好,我是阿赵。   可能很多朋友都知道,我刚进入游戏行业的时候,做的是美术工作,包括了建模、贴图、动画等,都做过。我对各种美术资源制作也都很熟悉,懂得很多制作的技术。但最后,我却没有继…

asp网站转wap网站做吉祥物的网站

难度级别:初级及以上 提问概率:55% 高阶组件并不能单纯的说它是一个函数,或是一个组件,在React中,函数也可以做为一种组件。而高阶组件就是将一个组件做为入参,被传入一个函数或者组件中,经过一定的加工处理,最终再返回一个组件的组合…

企业网站建设前网站目的需明确网站建设网站模板

738. 单调递增的数字 - 力扣(LeetCode) 这个问题是关于找到一个小于或等于给定数字n的最大单调递增数字。 我们可以将数字n转换为字符数组,然后从左到右扫描,寻找第一个违反单调递增条件的位置。一旦找到这样的位置,…

大淘客网站建设长安网站建设价格

centos系统环境搭建专栏🔗点击跳转 坦诚地说,本文中百分之九十的内容都来自于该文章🔗Linux:CentOS7安装MySQL8(详),十分佩服大佬文章结构合理,文笔清晰,我曾经在这篇文章…

银川迅雷网站建设炫酷企业网站

修改project.config.json配置文件 在 project.config.json 文件中,修改setting 下的 useCompilerPlugins 字段为 ["sass"], 即可开启工具内置的 sass 编译插件。 目前支持三个编译插件:typescript、less、sass 修改之后可以将原.w…

有没有找客户的网站中山营销网站建设联系方式

联合主键用Hibernate注解映射方式主要有三种: 第一、将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将该类注解为Embeddable,最后在主类中(该类不包含联合主键类中的字段)保存该联合主键类…

百度关键词排名技术西安百度seo代理

FineDataLink作为一款市场上的顶尖ETL工具,集实时数据同步、ELT/ETL数据处理、数据服务和系统管理于一体的数据集成工具,进行了新的维护迭代。本文把FDL4.1.8最新功能作了介绍,方便大家对比:(产品更新详情:…

做科技汽车的视频网站国外做仿牌网站

前面效果中使用比较low的方式实现了2.4的Gamma曲线;虽说后面加了点动画呈现效果,但也就是个过渡版;今天才基本符合需求的效果:1、还是基于WPF效果第一百七十八篇之贝塞尔曲线他来实现的:3个ListBox 3个LandmarkControl2、在LandmarkControl增加插点位事件View:LandmarkControl …

你喜欢的公司网站苏州做i网站的

目录 一、回旋函数 C 1.spinOnce() 2.spin() python 二、时间 C 1、时刻 2、持续时间 3、时间运算 4、设置运行频率 5、定时器 python 1、时刻 2、持续时间 3、时间运算 4、设置运行频率 5、定时器 一、回旋函数 C 1.spinOnce() 一般应用场景:* 在循环…

windows2008 iis 网站网页工具

之前一直用vncviewer,效果不佳,Microsoft Remote Desktop连ubuntu上的win虚机很好,多了几个工作环境,于是再度试一下用RDP连Ubuntu远程桌面。 几点注意事项 先安装xrdp: apt install xrdp 踢掉ubuntu上的登录用户,例…

免费制作二维码的网站写网站策划书需要注意什么

能够当所述线程中的一个被切换上下文(即,暂停),以检测可以找到?至于你的问题是否可能 - 它认为这是可能的。至少SystemTap(https://sourceware.org/systemtap/)可以做到这一点。probe scheduler.ctxswitch{if (target_pid ! 0&& next…

烟台网站搜索优化wordpress 5.0.4

诸多预测认为,2024 年将成为国内大模型产业应用爆发的元年。中关村科金作为领先的对话式 AI 技术解决方案提供商,自主研发的智能陪练产品,以学、练、考、培一体化的方式,为企业提供全方位的综合培训服务。 借助大模型技术方面的突…

兰州网站建设加王道下拉鞍山做网站的

Visitor设计模式访问元素方法的问题 GPT给出的答案寻找灵感前置声明Element层次的实例Visitor interface的声明Element interface的声明Element实际类的声明及实现实现一个Visitor客户端代码 实战测试结果 针对C来说,若要实现Visitor设计模式,则会面临循…

设计师去哪个网站找工作网站收录查询站长工具

一、const成员变量(常成员变量) 1、只能使用初始化列表对常成员变量进行初始化; 2、常成员变量可以被访问,但是不能被修改; 3、类中所有构造函数都必须在初始化列表对常成员函数进行初始化(包括拷贝构造,移动构造)。 声明&am…

餐饮网站建设规划书淘客推广计划

数组中插入相关练习 例题:定义一个方法 ,将数组{1,2,3}按照指定的格式进行拼接成一个字符串 /*例题:定义一个方法 ,将数组{1,2,3}按照指定的格式进行拼接成一个字符串, 格式定义如下[word1#word2#word3]. 思路分析&a…

要建一个优惠卷网站怎么做销售新品牌如何推广

题目描述 原题链接:LeetCode 27. 移除元素给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成…

温州网站建设哪里好河南网站建设的详细策划

源码下载:http://www.tracefact.net/SourceCode/Network-Part3.rar C#网络编程(异步传输字符串) - Part.3 这篇文章我们将前进一大步,使用异步的方式来对服务端编程,以使它成为一个真正意义上的服务器:可以为多个客户端的多次请求…

分类信息网站电子商务网站建设步骤一般为

这两天一直在沉迷于配脚本,由于服务器很多,所以我都是从一台服务器上配置好的脚本直接copy到另一台服务器,按说完全一样的脚本一样的操作,那么应该是一样的执行结果 but, Gul’dan,代…我重启服务器后服务并没有正常启…

做影视网站需要境外疗养院有必要做网站吗

<?php$user$_GET[username]; echo $user; ?> 直接运行改php脚本的话会出现” Notice: Undefined index: username in D:wamp\test\test.php on line 2”的警告,但这是PHP 的提示而非报错&#xff0c;这里我未给$user赋予值,就把它输出,所以报错了。PHP 本身不需要事…

如何建立一个自己的网站鞍山网站网站建设

如果需要学习鸿蒙开发可以查看以下学习资源链接 OpenAtom OpenHarmony Develop applications - HUAWEI HarmonyOS APP 转载请注明出处HarmonyOS(鸿蒙开发&#xff09;入门篇-CSDN博客&#xff0c;谢谢&#xff01;