快速集成DeepSeek到项目

DeepSeek API-KEY 获取

  1. 登录DeekSeek 官网,进入API 开放平台

在这里插入图片描述
2. 创建API-KEY
在这里插入图片描述

  1. 复制API-KEY进行保存,后期API调用使用

在这里插入图片描述

项目中集成DeepSeek

这里只展示部分核心代码,具体请查看源码orange-ai-deepseek-biz-starter

@Slf4j
@AllArgsConstructor
public class DeepSeekChatModelServiceImpl implements ChatModelService {private final DeepSeekStorageProperties deepSeekStorageProperties;@Overridepublic PlatformEnum getPlatform() {return PlatformEnum.DEEP_SEEK;}@Overridepublic Flux<Result<ConversationReplyVO>> conversationStream(ConversationParam param) {return conversationStream(param, List.of());}@Overridepublic Flux<Result<ConversationReplyVO>> conversationStream(ConversationParam param, List<ChatSessionRecordVO> contextMessageList) {OkHttpClient client = new OkHttpClient();MediaType mediaType = MediaType.get("application/json");ChatCompletionsParam reqBody = generateChatRequestBody(param, contextMessageList);Request request = new Request.Builder().url(deepSeekStorageProperties.getChatUrl()).addHeader(SecurityConstant.AUTHORIZATION, "Bearer " + deepSeekStorageProperties.getToken()).post(RequestBody.create(JSONUtil.toJsonStr(reqBody), mediaType)).build();return Flux.create(emitter -> {EventSourceListener listener = new EventSourceListener() {@Overridepublic void onOpen(@NotNull EventSource eventSource, @NotNull Response response) {System.out.println("SSE connection opened");}@Overridepublic void onClosed(@NotNull EventSource eventSource) {emitter.complete();System.out.println("SSE connection closed");}@Overridepublic void onEvent(@NotNull EventSource eventSource, String id, String type, @NotNull String data) {if (log.isDebugEnabled()) {log.debug("data:{}", data);}if (StrUtil.isBlank(data) || DeepSeekContent.DONE.equalsIgnoreCase(data)) {emitter.complete();return;}ChatCompletionsResponse response = JSONUtil.toBean(data, ChatCompletionsResponse.class);StringBuilder content = new StringBuilder();for (ChatCompletionsResponse.ChoiceItem choice : response.getChoices()) {content.append(choice.getDelta().getContent());}emitter.next(ResultWrapper.ok(ConversationReplyVO.builder().content(content.toString()).build()));}@Overridepublic void onFailure(@NotNull EventSource eventSource, Throwable t, Response response) {System.err.println("Error occurred: " + t);}};EventSource.Factory factory = EventSources.createFactory(client);factory.newEventSource(request, listener);});}private ChatCompletionsParam generateChatRequestBody(ConversationParam param, List<ChatSessionRecordVO> contextMessageList) {List<MessageItem> messages = new ArrayList<>();if (CollUtil.isNotEmpty(contextMessageList)) {for (ChatSessionRecordVO record : contextMessageList) {if (MessageTypeEnum.USER.equals(record.getMessageType())) {messages.add(MessageItem.builder().role(MessageType.USER.getValue()).content(record.getContent()).build());continue;}if (MessageTypeEnum.ASSISTANT.equals(record.getMessageType())) {messages.add(MessageItem.builder().role(MessageType.ASSISTANT.getValue()).content(record.getContent()).build());}}}messages.add(MessageItem.builder().role(MessageType.USER.getValue()).content(param.getPrompt()).build());return ChatCompletionsParam.builder().model(param.getModelCode()).messages(messages).stream(Boolean.TRUE).build();}}

体验DeepSeek

  • 在线体验: http://tiny.hengzq.cn
    在这里插入图片描述

Orange开源项目推荐

  • Orange 官网: http://hengzq.cn
  • 在线体验: http://tiny.hengzq.cn
  • 项目文档: http://hengzq.cn/orange-monomer/
  • 单体架构-后端源码下载【GitHub】: https://github.com/hengzq/orange-monomer
  • 单体架构-后端源码下载【Gitee】: https://gitee.com/hengzq/orange-monomer
  • 微服务版本-后端源码下载【GitHub】: https://github.com/hengzq/orange-cloud
  • 微服务版本-后端源码下载【Gitee】: https://gitee.com/hengzq/orange-cloud
  • 前端源码下载【GitHub】: https://github.com/hengzq/orange-cloud
  • 前端源码下载【Gitee】: https://gitee.com/hengzq/orange-cloud

参考

  • https://api-docs.deepseek.com/zh-cn/

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

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

相关文章

PHP函数介绍—get_headers(): 获取URL的响应头信息

概述&#xff1a;在PHP开发中&#xff0c;我们经常需要获取网页或远程资源的响应头信息。PHP函数get_headers()能够方便地获取目标URL的响应头信息&#xff0c;并以数组形式返回。本文将介绍get_headers()函数的用法&#xff0c;以及提供一些相关的代码示例。 get_headers()函…

保姆级教程Docker部署Zookeeper模式的Kafka镜像

目录 一、安装Docker及可视化工具 二、Docker部署Zookeeper 三、单节点部署 1、创建挂载目录 2、命令运行容器 3、Compose运行容器 4、查看运行状态 5、验证功能 四、部署可视化工具 1、创建挂载目录 2、Compose运行容器 3、查看运行状态 一、安装Docker及可视化工…

Docker容器访问外网:启动时的网络参数配置指南

在启动Docker镜像时,可以通过设置网络参数来确保容器能够访问外网。以下是几种常见的方法: 1. 使用默认的bridge网络 Docker的默认网络模式是bridge,它会创建一个虚拟网桥,将容器连接到宿主机的网络上。在大多数情况下,使用默认的bridge网络配置即可使容器访问外网。 启动…

Java 使用腾讯翻译 API 实现含 HTML 标签文本精准翻译工具

一、翻译标签文本工具 package org.springblade.common.utils;import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern;public class TencentTranslationForHTML {public static void main(String[] args) {Stri…

白话文实战Nacos(保姆级教程)

前言 上一篇博客 我们创建好了微服务项目,本篇博客来体验一下Nacos作为注册中心和配置中心的功能。 注册中心 如果我们启动了一个Nacos注册中心,那么微服务比如订单服务,启动后就可以连上注册中心把自己注册上去,这过程就是服务注册。每个微服务,比如商品服务都应该注册…

docker 安装 Prometheus、Node Exporter 和 Grafana

Docker Compose 配置文件 docker-compose.yml services:prometheus:image: prom/prometheus:latestcontainer_name: prometheusvolumes:- ./prometheus.yml:/etc/prometheus/prometheus.yml # 挂载配置文件 - prometheus_data:/prometheus # 持久化数据存储 command:- --…

RocketMQ、RabbitMQ、Kafka 的底层实现、功能异同、应用场景及技术选型分析

1️⃣ 引言 在现代分布式系统架构中&#xff0c;&#x1f4e9;消息队列&#xff08;MQ&#xff09;是不可或缺的组件。它在系统&#x1f517;解耦、&#x1f4c9;流量削峰、⏳异步处理等方面发挥着重要作用。目前&#xff0c;主流的消息队列系统包括 &#x1f680;RocketMQ、&…

C语言基础08:运算符+流程控制总结

运算符 算术运算符 结果&#xff1a;数值 、-、*、\、%、&#xff08;正&#xff09;、-&#xff08;负&#xff09;、、-- i和i 相同点&#xff1a;i自身都会增1 不同点&#xff1a;它们运算的最终结果是不同的。i&#xff1a;先使用&#xff0c;后计算&#xff1b;i&am…

Node.js开发属于自己的npm包(发布到npm官网)

在 Node.js 中开发并发布自己的 npm 包是一个非常好的练习&#xff0c;可以帮助我们更好地理解模块化编程和包管理工具&#xff0c;本篇文章主要阐述如何使用nodejs开发一个属于自己的npm包&#xff0c;并且将其发布在npm官网。在开始之前确保已经安装了 Node.js 和 npm。可以在…

如何在RTACAR中配置IP多播(IP Multicast)

一、什么是IP多播 IP多播&#xff08;IP Multicast&#xff09;是一种允许数据包从单一源地址发送到多个目标地址的技术&#xff0c;是一种高效的数据传输方式。 多播地址是专门用于多播通信的IP地址&#xff0c;范围从 224.0.0.0到239.255.255.255 与单播IP地址不同&#x…

android的DataBinding的使用

参考&#xff1a; Android基础入门&#xff1a;dataBinding的简单使用 Android DataBinding的使用

12.翻转、对称二叉树,二叉树的深度

反转二叉树 递归写法 很简单 class Solution { public:TreeNode* invertTree(TreeNode* root) {if(rootnullptr)return root;TreeNode* tmp;tmproot->left;root->leftroot->right;root->righttmp;invertTree(root->left);invertTree(root->right);return …

网络安全行业的冬天

冬天已经来了&#xff0c;春天还会远吗&#xff1f;2022年10月28日&#xff0c;各个安全大厂相继发布了财报&#xff0c;纵观2022年前三季度9个月&#xff0c;三六零亏了19亿&#xff0c;奇安信亏了11亿&#xff0c;深信服亏了6亿&#xff0c;天融信亏了4亿&#xff0c;安恒亏了…

MYSQL索引与视图

一、新建数据库 mysql> create database mydb15_indexstu; mysql> use mydb15_indexstu; 二、新建表 &#xff08;1&#xff09;学生表Student mysql> create table Student(-> Sno int primary key auto_increment,-> Sname varchar(30) not null unique,-…

深度优先搜索(DFS)——八皇后问题与全排列问题

&#xff08; ^ _ ^ &#xff09; 数据结构好难哇&#xff08;哭 1.BFS和DFS 数据结构空间性质DFSstackO(h)不具有最短性质BFSqueueO(2^h)具有最短路性质 空间上DFS占优势&#xff0c;但是BFS具有最短性 &#xff08;若所有权重都是1&#xff0c;则BFS一定最短&#xff09;&…

Flink 内存模型各部分大小计算公式

Flink 的运行平台 如果 Flink 是运行在 yarn 或者 standalone 模式的话&#xff0c;其实都是运行在 JVM 的基础上的&#xff0c;所以首先 Flink 组件运行所需要给 JVM 本身要耗费的内存大小。无论是 JobManager 或者 TaskManager &#xff0c;他们 JVM 内存的大小都是一样的&a…

Vue07

一、Vuex 概述 目标&#xff1a;明确Vuex是什么&#xff0c;应用场景以及优势 1.是什么 Vuex 是一个 Vue 的 状态管理工具&#xff0c;状态就是数据。 大白话&#xff1a;Vuex 是一个插件&#xff0c;可以管理 Vue 通用的数据 (多组件共享的数据)。例如&#xff1a;购物车数…

Linux内核中的软中断与NAPI机制:高效处理网络数据包

在现代操作系统中,中断处理是系统性能的关键因素之一,尤其是在处理高负载的网络数据包时。Linux内核通过软中断(SoftIRQ)和NAPI(New API)机制,实现了高效的网络数据包处理。本文将深入探讨软中断和NAPI机制的原理、实现方式以及它们在处理网络数据包中的作用。 一、软中…

Linux 安装 Ollama

1、下载地址 Download Ollama on Linux 2、有网络直接执行 curl -fsSL https://ollama.com/install.sh | sh 命令 3、下载慢的解决方法 1、curl -fsSL https://ollama.com/install.sh -o ollama_install.sh 2、sed -i s|https://ollama.com/download/ollama-linux|https://…

Docker Desktop无法安装报错(求助记录中)

之前Docker Desktop无法使用&#xff0c;报了一个注册表的错误&#xff08;忘记截图&#xff09;我想着更新安装下应该就好了&#xff0c;结果Docker Desktop一直无法安装&#xff0c;花了几天都没解决。同时我的window11更新也出现下载错误 - 0x80040154异常,启动或关闭Window…