当前位置: 首页 > wzjs >正文

沧州哪里有做网站的公司4000-seo助手

沧州哪里有做网站的公司4000-,seo助手,软件外包专业,无锡企业网站排名1、引言随着AI技术的崛起,我们也开始接触开发AI项目了。比如我使用的是springAI来调用大模型,通过一些定制化内容,得到比较有个性化的智能体。而调用大模型是我们后端的工作,那么如何将AI响应的内容返回给前端呢?我们当…

1、引言

        随着AI技术的崛起,我们也开始接触开发AI项目了。比如我使用的是springAI来调用大模型,通过一些定制化内容,得到比较有个性化的智能体。

        而调用大模型是我们后端的工作,那么如何将AI响应的内容返回给前端呢?我们当然可以直接调用完大模型后,等大模型响应完内容给我们的后端,然后后端再统一把消息返回给前端。这种方法虽然可行,但是在用户体验上就差很多了,如果后端要等大模型完整地返回内容的话,就要阻塞很久,那么用户端是无感知的,反而会觉得这个系统很差,要等这么久才能响应。

        所以我们就要达到现有较流行的打字机效果,就是AI响应一点内容,就给用户返回一些内容,要达到这种效果,就要用到SSE流式输出了。


2、包装AI响应的内容

本章节不对如何调用大模型重点讲解,后续会考虑发布相关博客,本章节之针对流式输出做讲解。所以对调用AI大模型的代码如果看不懂不需要太在意,只要知道AI输出的内容也是可以通过stream方法流式输出的即可。

    public Flux<String> doChatByStream(String message,String charId) {Flux<String> content = chatClient.prompt().user(message)//这里的advisors是单词发送执行的拦截器,指定了.advisors(advisor -> advisor.param(CHAT_MEMORY_CONVERSATION_ID_KEY, charId)//指定会话房间.param(CHAT_MEMORY_RETRIEVE_SIZE_KEY, 20))//指定记忆多少轮对话.stream()//使用流式输出.content();return content;}

代码解释:AI响应的内容是String类型的,通过调用一些函数,让Flux包装,这种其实就是响应式编程。


3、控制内容流式响应

在controller层执行,有三种方式:

@RestController
@RequestMapping("/ai/love_app")
@Slf4j
public class AiController {@Resourceprivate LoveApp loveApp;@GetMapping(value = "/doChat/sse", produces = MediaType.TEXT_EVENT_STREAM_VALUE)public Flux<String> chat(String message, String charId) {Flux<String> stringFlux = loveApp.doChatByStream(message, charId);// 返回响应return stringFlux;}@GetMapping("/doChat/sse2")public Flux<ServerSentEvent<String>> chatBySse2(String message, String charId) {Flux<ServerSentEvent<String>> serverSentEventFlux =loveApp.doChatByStream(message, charId).map(chunk -> {ServerSentEvent<String> result = ServerSentEvent.<String>builder().data(chunk).build();return result;});return serverSentEventFlux;}@GetMapping("/doChat/sse3")public SseEmitter chatBySseEmitter(String message, String charId) {SseEmitter sseEmitter = new SseEmitter(180000L);//超时时间loveApp.doChatByStream(message, charId).subscribe(chunk -> {   // 订阅数据流try {sseEmitter.send(chunk);// 发送数据到客户端} catch (Exception e) {sseEmitter.completeWithError(e);// 发送异常时,执行异常完成函数(手动关闭)log.error("发送异常:{}",e);}}, sseEmitter::completeWithError,sseEmitter::complete);return sseEmitter;}}

 (1)直接返回Flux对象,并添加请求头

(2)在Flux对象里面的具体响应数据再用一层ServerSentEvent包裹,不需要再加请求头


(3)专门用于SSE推流的类:SseEmitter(推荐,简单更灵活)

调用它的send函数主动向前端推送数据

 

http://www.dtcms.com/wzjs/402352.html

相关文章:

  • 门户网站建设意义常见的网络营销方式
  • 唐山网站怎么做seo什么平台可以发广告引流
  • 做网站项目需要多少钱谷歌是如何运营的
  • appmakr教程海淀区seo引擎优化多少钱
  • 给网站写文章怎么做百度打车客服电话
  • 地方网站定位佛山外贸seo
  • 什么网站可以做音乐伴奏金戈枸橼酸西地那非
  • 深圳html5网站建设百度广告运营
  • 淮安网站建设费用推广优化工具
  • html网站后台管理系统网址链接查询
  • 制作网站服务器营销推广方案怎么写
  • 运城环保局网站王建设站内优化seo
  • 网站宣传与推广的指导思想个人网站制作软件
  • 游戏网站做代理seo搜索引擎优化工作内容
  • 做购物网站多少钱百度app打开
  • 炫酷的网站设计搜索引擎调价平台哪个好
  • 温州公司网站建设2022最近热点事件及评述
  • 如何自己做解析网站百度定位店铺位置怎么设置
  • 网站建设专业的公司排名2023年10月疫情恢复
  • 湛江高端网站建设百度广告投放公司
  • 重庆网站建设选卓光网络营销热点事件案例分析
  • 湖州网站设计建设网站开发需要哪些技术
  • 司机找事做那个网站靠谱徐州seo排名收费
  • 百度上传网站服务器怎么做游戏推广员
  • 高安网站找工作做面点事怎么在百度上做推广上首页
  • 中文网址和中文域名巩义网站优化公司
  • 商标设计软件免费版厦门seo关键词排名
  • 建设部网站示范文本网站百度
  • 网站建设方案大全网站推广的软件
  • 电子商务网站数据库怎么做学生个人网页制作