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

成都市建设领域信用系统网站阿土伯网站做产品推广咋样

成都市建设领域信用系统网站,阿土伯网站做产品推广咋样,商城入口,小程序页面设计图片当Spring Boot遇见豆包大模型:一场流式响应的"魔法吟唱"仪式 一、前言:关于流式响应的奇妙比喻 想象一下你正在火锅店点单,如果服务员必须等所有菜品都备齐才一次性端上来,你可能会饿得把菜单都啃了。而流式响应就像贴…

当Spring Boot遇见豆包大模型:一场流式响应的"魔法吟唱"仪式

一、前言:关于流式响应的奇妙比喻

想象一下你正在火锅店点单,如果服务员必须等所有菜品都备齐才一次性端上来,你可能会饿得把菜单都啃了。而流式响应就像贴心的服务员,毛肚刚切好就立刻端上桌,肥牛卷还在空中飞着就送到你面前——这就是我们今天要施展的"异步上菜大法"!

注:完整代码见底部

二、Spring Boot魔法阵搭建

2.1 召唤SSE精灵

@PostMapping(value = "/ask", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public SseEmitter ask() {SseEmitter emitter = new SseEmitter(60_000L); // 设置60秒超时结界//...后续魔法吟唱
}

这段咒语相当于在Spring Boot的魔法阵中召唤了一个SSE(Server-Sent Events)精灵,它将负责持续不断地把豆包大模型的智慧结晶传送给前端。

2.2 构建跨次元传送门

@CrossOrigin(origins = "*") // 允许所有位面的访问

这行代码就像在霍格沃茨的墙上开了个任意门,让前端、移动端、甚至隔壁王大爷的智能拐杖都能连接我们的服务。

三、豆包大模型召唤仪式

3.1 拼装召唤咒语

ArkService arkService = ArkService.builder().apiKey("你的魔法密钥") // 请自行替换成阿拉霍洞开咒.build();

这里我们正在拼装哈利·波特级别的魔法道具,apiKey就是你的魔杖认证,记得千万不要像把WiFi密码写成纸条贴在电梯里一样暴露它!

3.2 构建魔法对话卷轴

List<ChatMessage> chatMessages = new ArrayList<>();
chatMessages.add(ChatMessage.builder().role(ChatMessageRole.USER) // 麻瓜用户身份.content("求Java策略模式代码") // 你的灵魂拷问.build());

这相当于在羊皮纸上书写你的问题,就像给猫头鹰系上求助信。注意提问要像调制福灵剂一样精准,才能得到理想的回答。

四、流式响应的炼金术

4.1 启动魔法反应堆

new Thread(() -> {// 这里开始炼制长生不老药...哦不,处理响应
}).start();

我们开启了多线程炼丹炉(误),确保主线程不会像被石化的赫敏一样僵住。

4.2 实时传输咒语

arkService.streamChatCompletion(...).forEach(j -> {emitter.send(SseEmitter.event().data(JSON.toJSONString(aiChatDTO))); // 把知识碎片装进漂流瓶
});

这就像用魔法把一本厚书拆成一页页的羊皮纸,通过飞路网持续传送。前端可以像收快递一样实时展示每个字的到来。

五、魔法的收尾工作

5.1 关闭魔法阵

finally {arkService.shutdownExecutor(); // 收拾魔法实验室
}

就像优秀的巫师总会清理遗忘咒的施法痕迹,这里确保我们的魔法资源不会像韦斯莱家的飞车一样失控乱跑。

5.2 异常处理小精灵

emitter.completeWithError(ex); // 把锅甩给异常对象

当魔药课发生爆炸时,我们要优雅地把错误信息封装成记忆球,而不是让整个霍格沃茨城堡崩溃。

六、实战效果展示

当你在控制台看到这样的输出:

"定义策略接口->创建具体策略类->配置上下文..."

说明你的魔法已经生效!前端会像收到邓布利多军的秘密信号一样,逐字显示出策略模式的代码实现。

postman效果图

在这里插入图片描述

七、写给麻瓜程序员的注意事项

  1. 密钥保护:把你的apiKey当成隐形衣,千万别学洛哈特教授到处炫耀
  2. 超时设置:60秒足够熬制一锅标准的缓和剂,但复杂问题可能需要更久
  3. 流量控制:别让你的魔法管道像韦斯莱笑话商店的烟花一样喷涌过度

八、结语:你已学会的魔法

现在你已经掌握了:

  • 搭建SSE双向镜通信
  • 流式响应炼金术
  • 大模型召唤仪式
  • 异常处理的黑魔法防御术

快去创建你自己的"魔法AI助手"吧!记住:好的代码应该像福灵剂一样令人愉悦,而不是像呕吐味的比比多味豆让人措手不及。愿代码之神永远眷顾你的IDE!

package com.ideal.jason.controller;import com.alibaba.fastjson.JSON;
import com.volcengine.ark.runtime.model.completion.chat.ChatCompletionRequest;
import com.volcengine.ark.runtime.model.completion.chat.ChatMessage;
import com.volcengine.ark.runtime.model.completion.chat.ChatMessageRole;
import com.volcengine.ark.runtime.service.ArkService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.PostMapping;
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.ArrayList;
import java.util.List;/*** @author: jason* @Date: 14 2月 2025*/
@CrossOrigin(origins = "*")
@Slf4j
@RestController
@RequestMapping("/api/ai")
public class AIController {@PostMapping(value = "/ask", produces = MediaType.TEXT_EVENT_STREAM_VALUE)public SseEmitter ask() {SseEmitter emitter = new SseEmitter(60_000L); // 超时时间 60 秒String apiKey = "ccde85e1-6ae4-1234-abe1-423164b9f965";//替换成自己的 API KeyString content = "java策略模式代码样例提供";//替换成自己的 API KeyString model = "doubao-1.5-pro-32k-250115";//替换成自己的 模型id// 创建ArkService实例ArkService arkService = ArkService.builder().apiKey(apiKey).build();// 模拟流式数据new Thread(() -> {try {// 初始化消息列表List<ChatMessage> chatMessages = new ArrayList<>();// 创建用户消息ChatMessage userMessage = ChatMessage.builder().role(ChatMessageRole.USER) // 设置消息角色为用户.content(content) // //替换成自己的 提问内容.build();// 将用户消息添加到消息列表chatMessages.add(userMessage);// 创建聊天完成请求ChatCompletionRequest chatCompletionRequest = ChatCompletionRequest.builder().model(model)// 需要替换为Model ID.messages(chatMessages) // 设置消息列表.stream(true)//以流式返回.build();// 发送聊天完成请求并打印响应// 获取响应并打印每个选择的消息内容StringBuilder sb = new StringBuilder();arkService.streamChatCompletion(chatCompletionRequest).blockingIterable().forEach(j -> j.getChoices().forEach(choice -> {//System.out.print(choice.getMessage().getContent());AIChatDTO aiChatDTO =AIChatDTO.builder().content(choice.getMessage().getContent().toString()).build();try {emitter.send(SseEmitter.event()//.id(choice.getMessage().getToolCallId()).data(JSON.toJSONString(aiChatDTO)));sb.append(aiChatDTO.getContent());} catch (IOException e) {log.error("ask IOException");}}));System.out.println(sb);emitter.complete();} catch (Exception ex) {emitter.completeWithError(ex);} finally {// 关闭服务执行器arkService.shutdownExecutor();}}).start();return emitter;}
}

maven依赖

        <!-- 豆包 --><dependency><groupId>com.volcengine</groupId><artifactId>volcengine-java-sdk-ark-runtime</artifactId><version>LATEST</version></dependency>
http://www.dtcms.com/wzjs/770629.html

相关文章:

  • 国外网站为什么不用备案服务器活动
  • 电商网站开发的难点在哪里用织梦系统怎么做网站
  • 公司网站发布流程html菜鸟教程首页
  • 做驾考学时在哪个网站网站建设属于前端还是后台
  • 家具网站模版如何利用电商平台推广
  • 网站开发工作程序怎么写葫芦岛建设网站
  • 互联网排名前十的公司西安seo主管
  • 广西网站建设哪家不错申请个网站要多少钱
  • 建基建设集团网站辣条网站建设书
  • wordpress多语言建站江苏廉政建设网站
  • 网站颜色搭配案例嵌入式软件开发培训机构
  • 合肥商城网站建设地址网站建设管理考核办法
  • 网站只显示一个网址网站logo用什么做
  • 移动端网站构成要素网站的权限设置
  • 莆田专业网站制作python基础教程电子书在线阅读
  • 保定网站建设冀icpwordpress文章如何匪类
  • 定制版网站建设详细报价网站建设 中标
  • 青岛网站建设推广服务沈阳网站建设公司多少钱
  • 网站开发合同需要交印花税吗wordpress调用服务器文件夹
  • 拖拽式网站建设费用建信股权投资管理有限责任公司
  • 电商网站建设市场分析建设银行公积金预约网站
  • 优质高职院校建设专题网站网站后台管理系统下载
  • 微信 公众号 微网站开发哪里学做网站
  • 肖港网站开发贵阳软件开发公司排名
  • 壁画网站建设门户网站是网络表达吗
  • 3g手机网站建设广州网站建设电话咨询
  • 做网站必须托管服务器吗wordpress gzip压缩
  • 精品特价地方装修网站php源码带后台 装饰门户门站 装修网源代码做甜品网站的需求分析
  • 个人教程网站泉州玖码网络设计
  • 网站形式的设计重庆华鼎达网站建设