通过企业画册宣传_网络网站建设_新闻媒体合作等方式_/seo综合查询接口

通过企业画册宣传_网络网站建设_新闻媒体合作等方式_,seo综合查询接口,合肥制作网站单位有哪些,网络公司网站建设彩铃样本当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.mzph.cn/pingmian/71119.shtml

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

相关文章

例子 DQN + CartPole: 深入思考一下,强化学习确实是一场智能冒险之旅!

强化学习的概念 在技术人员眼里&#xff0c;深度学习、强化学习&#xff0c;或者是大模型&#xff0c;都只是一些算法。无论是简单&#xff0c;还是复杂&#xff0c;我们都是平静的看待。当商业元素日益渗透进技术领域&#xff0c;人人言必称大模型的时候。技术人该反思一下&a…

RNN实现精神分裂症患者诊断(pytorch)

RNN理论知识 RNN&#xff08;Recurrent Neural Network&#xff0c;循环神经网络&#xff09; 是一种 专门用于处理序列数据&#xff08;如时间序列、文本、语音、视频等&#xff09;的神经网络。与普通的前馈神经网络&#xff08;如 MLP、CNN&#xff09;不同&#xff0c;RNN…

Lua的table(表)

Lua表的基本概念 Lua中的表&#xff08;table&#xff09;是一种多功能数据结构&#xff0c;可以用作数组、字典、集合等。表是Lua中唯一的数据结构机制&#xff0c;其他数据结构如数组、列表、队列等都可以通过表来实现。 表的实现 Lua的表由两部分组成&#xff1a; 数组部分…

Linux-基本指令3

一.grep 语法&#xff1a; grep [选项] 搜寻字符串 ⽂件 功能&#xff1a;在⽂件中搜索字符串&#xff0c;将找到的⾏打印出来 常⽤选项&#xff1a; -i &#xff1a;忽略⼤⼩写的不同&#xff0c;所以⼤⼩写视为相同 -n &#xff1a;顺便输出⾏号 -v &#xff1a;反向选择&…

GPIO(嵌入式学习)

GPIO 通用输入输出口&#xff1a; 可分为八种输入输出模式 输出模式 下端可控制端口输出高低电平&#xff0c;用以驱动LED&#xff0c;控制蜂鸣器&#xff0c;模拟通信协议输出时序 输入模式 读取高低电平或电压&#xff0c;用与读取按键输入&#xff0c;外界模块电平信号…

【构建工具】Gradle Kotlin DSL中的大小写陷阱:BuildConfigField

在Android开发当中&#xff0c;BuildConfig是一个非常有用的功能&#xff0c;它允许我们在构建过程中定义常量&#xff0c;并在运行时使用它们。But&#xff01;&#xff01;当我们从传统的Groovy DSL迁移到Kotlin DSL时或者被Android Studio坑的时候&#xff0c;有一些细微的差…

【Uniapp-Vue3】开发userStore用户所需的相关操作

在项目根路径下创建的stores文件夹中创建user.js文件 并将以下内容复制到user.js中 import {ref} from "vue" import { defineStore } from pinia; const uniIdCo uniCloud.importObject("uni-id-co") const db uniCloud.database(); const usersTable…

Redis分布式锁的实现(Redission)

写在前面 本人在学习Redis过程中学习到分布式锁时太多困惑和疑难杂点 需要总结梳理思路 以下思路都是最简单最基本的思路 主要用到Redission工具类 会涉及到看门狗机制等 本文内容部分引自Javaguide,小林coding等热门八股 用于个人学习用途 分布式锁介绍 对于单机多线程来说…

基于Apollo对配置类的热更新优化

背景 关于配置的热更新&#xff0c;apollo 通过com.ctrip.framework.apollo.spring.annotation.SpringValueProcessor 处理带Value的方法或字段&#xff0c;通过监听变更事件&#xff0c;采用反射去更新对应的值 但这个功能仅仅用于单个属性&#xff0c;当我有一组有关联关系…

【AD】3-5 元件在原理图中的基本操作2

1.导线连接 选择放置->线&#xff08;CtrlW&#xff09;&#xff0c;或者直接点击横条处&#xff0c;建议使用直角走线 注意&#xff1a;下图中的线不具有电气连接属性&#xff0c;只是单纯的线 双击导线&#xff0c;进行设置导线粗细及颜色 2.网络标签 放置->网络标…

vim:基础配置

Vim 配置清单 设置行号显示 set number 设置相对行号&#xff08;可选&#xff09; set relativenumber设置制表符为4个空格 set tabstop4 设置自动缩进 set autoindent " 启用语法高亮 syntax on" 设置背景颜色&#xff08;可选&#xff0c;根据终端或GUI Vi…

day02_Java基础

文章目录 day02_Java基础一、今日课程内容二、数组&#xff08;熟悉&#xff09;1、定义格式2、基本使用3、了解数组的内存图介绍4、数组的两个小问题5、数组的常见操作 三、方法&#xff08;熟悉&#xff09;1、定义格式2、方法重载overload 四、面向对象&#xff08;掌握&…

【UCB CS 61B SP24】Lecture 17 - Data Structures 3: B-Trees学习笔记

本文以 2-3-4 树详细讲解了 B 树的概念&#xff0c;逐步分析其操作&#xff0c;并用 Java 实现了标准的 B 树。 1. 2-3 & 2-3-4 Trees 上一节课中讲到的二叉搜索树当数据是随机顺序插入的时候能够使得树变得比较茂密&#xff0c;如下图右侧所示&#xff0c;时间复杂度也就…

【手撕算法】支持向量机(SVM)从入门到实战:数学推导与核技巧揭秘

摘要 支持向量机&#xff08;SVM&#xff09;是机器学习中的经典算法&#xff01;本文将深入解析最大间隔分类原理&#xff0c;手撕对偶问题推导过程&#xff0c;并实战实现非线性分类与图像识别。文中附《统计学习公式手册》及SVM调参指南&#xff0c;助力你掌握这一核心算法…

西门子S7-1200比较指令

西门子S7-1200 PLC比较指令学习笔记 一、比较指令的作用 核心功能&#xff1a;用于比较两个数值的大小或相等性&#xff0c;结果为布尔值&#xff08;True/False&#xff09;。典型应用&#xff1a; 触发条件控制&#xff08;如温度超过阈值启动报警&#xff09;数据筛选&…

solidwork智能尺寸怎么对称尺寸

以构造轴为中心线就能画智能尺寸的对称尺寸。先点击边再点击构造线

深入浅出:Spring AI 集成 DeepSeek 构建智能应用

Spring AI 作为 Java 生态中备受瞩目的 AI 应用开发框架&#xff0c;凭借其简洁的 API 设计和强大的功能&#xff0c;为开发者提供了构建智能应用的强大工具。与此同时&#xff0c;DeepSeek 作为领先的 AI 模型服务提供商&#xff0c;在自然语言处理、计算机视觉等领域展现了卓…

CSS浮动详解

1. 浮动的简介 浮动是用来实现文字环绕图片效果的 2.元素浮动后会有哪些影响 对兄弟元素的影响&#xff1a; 后面的兄弟元素&#xff0c;会占据浮动元素之前的位置&#xff0c;在浮动元素的下面&#xff1b;对前面的兄弟 无影响。 对父元素的影响&#xff1a; 不能撑起父元…

python数据类型等基础语法

目录 字面量 注释 变量 查数据类型 类型转换 算数运算符 字符串定义的三种方式 字符串占位 数据输入 字面量 被写在代码中固定的值 六种数据类型: 1 字符串 String 如"egg" 2 数字 Number: 整数int 浮点数float 复数complex :如43j 布尔…

Android 图片压缩详解

在 Android 开发中,图片压缩是一个重要的优化手段,旨在提升用户体验、减少网络传输量以及降低存储空间占用。以下是几种主流的图片压缩方法,结合原理、使用场景和优缺点进行详细解析。 效果演示 直接先给大家对比几种图片压缩的效果 质量压缩 质量压缩:根据传递进去的质…