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

网站经营与建设网站后台文章字体

网站经营与建设,网站后台文章字体,公司网站文化活动备案,外贸建站建在哪里链接 semi-ui-vue聊天组件 - 可以用这个组件优化界面 sse服务端消息推送 webflux&webclient Hi-Dream-Blog - 参考这个博客,可以在后台将markdown语法转为html 文章目录 链接效果代码pom.xmlDeepSeekControllerWebConfigDeepSeekClientAiChatRequestAiChatM…

链接

semi-ui-vue聊天组件 - 可以用这个组件优化界面

sse服务端消息推送

webflux&webclient

Hi-Dream-Blog - 参考这个博客,可以在后台将markdown语法转为html

文章目录

  • 链接
  • 效果
  • 代码
    • pom.xml
    • DeepSeekController
    • WebConfig
    • DeepSeekClient
    • AiChatRequest
    • AiChatMessage
    • SseApp

效果

在这里插入图片描述
在这里插入图片描述

代码

pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><parent><artifactId>spring-boot-dependencies</artifactId><groupId>org.springframework.boot</groupId><version>2.1.8.RELEASE</version></parent><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>demo-sse</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-webflux</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.10</version></dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.10</version></dependency></dependencies></project>

DeepSeekController

@RestController
@RequestMapping("/deepseek")
public class DeepSeekController {@Autowiredprivate DeepSeekClient deepSeekClient;@RequestMapping(value = "chatCompletions", produces = "text/event-stream;charset=utf-8")public Flux<String> chatCompletions(@RequestParam(required = true, value = "content") String content) {return deepSeekClient.chatCompletions(content);}@RequestMapping(value = "chatCompletions2", produces = "text/event-stream;charset=utf-8")public SseEmitter chatCompletions2(@RequestParam(required = true, value = "content2") String content2) {return deepSeekClient.chatCompletions2(content2);}}

WebConfig

@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").maxAge(3600).allowCredentials(true).allowedOrigins("*").allowedMethods("*").allowedHeaders("*").exposedHeaders("token", "Authorization");}}

DeepSeekClient

package com.zzhua.service;import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.zzhua.pojo.AiChatMessage;
import com.zzhua.pojo.AiChatRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Component;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.reactive.function.BodyInserters;
import org.springframework.web.reactive.function.client.WebClient;
import reactor.core.publisher.Flux;import java.io.IOException;
import java.util.Arrays;@Slf4j
@Component
public class DeepSeekClient {private static final ObjectMapper mapper = new ObjectMapper();public Flux<String> chatCompletions(String content) {AiChatMessage chatMsg1 = new AiChatMessage("system", "You are a helpful assistant.");AiChatMessage chatMsg2 = new AiChatMessage("user", content);AiChatRequest request = new AiChatRequest();request.setModel("deepseek-chat");request.setMessages(Arrays.asList(chatMsg1, chatMsg2));// 流式输出request.setStream(true);return WebClient.builder().baseUrl("https://api.deepseek.com").defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).defaultHeader("Authorization", "Bearer sk-xxx").build().post().uri("/chat/completions").body(BodyInserters.fromObject(request)).retrieve().bodyToFlux(String.class).flatMap(this::handleResult);}private Flux<String> handleResult(String result) {if ("[DONE]".equals(result)) {return Flux.empty();} else {try {JsonNode jsonNode = mapper.readTree(result);String content = jsonNode.get("choices").get(0).get("delta").get("content").asText();System.out.println(content);return Flux.just(content);} catch (Exception e) {log.error("解析失败: {}", result);}}return Flux.empty();}public SseEmitter chatCompletions2(String content2) {SseEmitter sseEmitter = new SseEmitter();AiChatMessage chatMsg1 = new AiChatMessage("system", "You are a helpful assistant.");AiChatMessage chatMsg2 = new AiChatMessage("user", content2);AiChatRequest request = new AiChatRequest();request.setModel("deepseek-chat");request.setMessages(Arrays.asList(chatMsg1, chatMsg2));// 流式输出request.setStream(true);WebClient.builder().baseUrl("https://api.deepseek.com").defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).defaultHeader("Authorization", "Bearer sk-xxx").build().post().uri("/chat/completions").body(BodyInserters.fromObject(request)).retrieve().bodyToFlux(String.class).flatMap(this::handleResult).doOnComplete(()->{sseEmitter.complete();log.warn("结束");}).subscribe(data->{try {sseEmitter.send(SseEmitter.event().data(data));} catch (IOException e) {e.printStackTrace();}});return sseEmitter;}public static void main(String[] args) throws IOException {RestTemplate restTemplate = new RestTemplate();ObjectMapper mapper = new ObjectMapper();AiChatMessage chatMsg1 = new AiChatMessage("system", "You are a helpful assistant.");AiChatMessage chatMsg2 = new AiChatMessage("user", "");AiChatRequest request = new AiChatRequest();request.setModel("deepseek-chat");request.setMessages(Arrays.asList(chatMsg1, chatMsg2));request.setStream(false);HttpHeaders headers = new HttpHeaders();headers.add("Content-Type", "application/json");headers.add("Authorization", "Bearer sk-xxx");HttpEntity<AiChatRequest> requestEntity = new HttpEntity<>(request, headers);String response = restTemplate.exchange("https://api.deepseek.com/chat/completions",HttpMethod.POST,requestEntity,String.class).getBody();System.out.println(response);System.out.println(mapper.readTree(response).get("choices").get(0).get("message").get("content"));}
}

AiChatRequest

@Data
public class AiChatRequest {private String model;private List<AiChatMessage> messages;private boolean stream;}

AiChatMessage

@Data
@NoArgsConstructor
@AllArgsConstructor
public class AiChatMessage {private String role;private String content;
}

SseApp

@SpringBootApplication
public class SseApp {public static void main(String[] args) {SpringApplication.run(SseApp.class, args);}
}
http://www.dtcms.com/wzjs/829052.html

相关文章:

  • 北京网站制作收费标准平面设计公司怎么找客户
  • 网站建设注意哪些注意事项电商平台软件开发公司
  • 做金融平台网站需要多少钱如何建设公司企业安全文化
  • 山东做网站公司有哪些青岛手机网站制作
  • 福州建网站哪家公司好网站查询备案
  • 厦门市建设工程在哪备案网站电商图片制作软件
  • 厦门450元网站建设公司六安网站设计公司
  • 济源市建设工程管理处网站wordpress 360字体大小
  • 网站不允许上传文件kingcms 暂未创建网站首页
  • 网站代码模板编写滦平住房和城乡建设厅网站
  • 哈巴狗模式网站开发长沙网站建设kaodezhu
  • 广告网站模板科技改变生活
  • 企业电子商务网站建设的最终目的vi设计的目的和意义
  • seo网站推广如何做前端网站模板
  • 教育网站解决方案网页版梦幻西游飞升攻略
  • 可以去非菲律宾做游戏网站吗电商设计师招聘
  • 方正园林建设监理中心网站网络营销做得好的产品
  • 建网站平台安全性网站空间大小怎么看
  • 如何登录国外购物网站网站大幅广告
  • wordpress博客 登录营销导向的企业网站优化
  • cms进行网站开发个人博客wordpress主题
  • 网站策划的重要性大连网站建设蛇皮果
  • 在线看网站建设观光农业规划设计
  • 做cms网站成成品网站源码有限公司
  • 百度推广运营这个工作好做吗廊坊网站的优化
  • 用Off做网站湖南住房与城乡建设厅网站
  • 怎么在网上打广告seo体系网站的建设及优化
  • 网站推广方法100种青海省建设厅职业注册官方网站
  • 微网站 微官网的区别wordpress 08
  • 沈阳和平三好街做网站法国企业网站建设