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

Java 接入deepseek(非流式)

一、官方文档

首次调用 API | DeepSeek API Docs

二、获取密钥

DeepSeek

三、配置

1、yaml

openai:config:deepseekApiurl: https://api.deepseek.com/v1/chat/completionsdeepseekApikey: yourscrect

2、获取配置

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;@Component
@Data
@ConfigurationProperties(prefix = "openai.config")
public class OpenaiUrlAndSecert {private String deepseekApiurl;private String deepseekApikey;
}

四、工具类

1、消息发送实体

import lombok.Builder;
import lombok.Data;import java.util.List;@Data
@Builder
public class DeepSeekRequestModel {/*** 所用DeepSeek模型*/private String model;private List<Message> messages;/*** 消息体*/@Data@Builderpublic static class Message {private String role;private String content;}
}

2、发送消息方法

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import okhttp3.*;import java.io.IOException;
import java.util.Collections;
import java.util.concurrent.TimeUnit;public class DeepSeekSendMessage {private final OkHttpClient client = new OkHttpClient().newBuilder().connectTimeout(15, TimeUnit.SECONDS).readTimeout(60, TimeUnit.SECONDS).build();public String getResponse(String apiurl, String apikey, String prompt) throws IOException {// 构建请求体DeepSeekRequestModel.Message message = DeepSeekRequestModel.Message.builder().role("user").content(prompt).build();DeepSeekRequestModel requestBody = DeepSeekRequestModel.builder().model("deepseek-chat").messages(Collections.singletonList(message)).build();//构建请求体json:{"messages":[{"content":"你好,DeepSeek!","role":"user"}],"model":"deepseek-chat"}String jsonBody = JSON.toJSONString(requestBody);// 创建HTTP请求Request request = new Request.Builder().url(apiurl).post(RequestBody.create(jsonBody, MediaType.get("application/json"))).addHeader("Authorization", "Bearer " + apikey).build();// 发送请求并处理响应try (Response response = client.newCall(request).execute()) {//如果响应成功,并且返回体有内容,就输出内容,否则表示响应失败if (response.isSuccessful() && response.body() != null) {String responseBody = response.body().string();JSONObject jsonResponse = JSON.parseObject(responseBody);JSONArray choices = jsonResponse.getJSONArray("choices");if (choices != null && !choices.isEmpty()) {JSONObject firstChoice = choices.getJSONObject(0);JSONObject messageResult = firstChoice.getJSONObject("message");return messageResult.getString("content");}}return response.body().string();}}}

五、调用方法

1、controller

    @GetMapping("/deepseek")@Operation(summary = "deepseek")@Parameter(name = "message", description = "内容", required = true)public CommonResult<String> deepseek(@RequestParam("message") String message) throws IOException {return success(testService.deepseek(message));}

2、service

    /*** 获取deepseek生成* @param message* @return*/String deepseek(String message) throws IOException;

3、impl

    @Resourceprivate OpenaiUrlAndSecert openaiUrlAndSecert;    @Overridepublic String deepseek(String message) throws IOException {return new DeepSeekSendMessage().getResponse(openaiUrlAndSecert.getDeepseekApiurl(),openaiUrlAndSecert.getDeepseekApikey(),message);}

六、注意

此调用方法为非流式调用,所以针对返回内容较多的,可能返回时间长达几十秒,所以在工具类(DeepSeekSendMessage)中设置了调用的超时时间为1分钟,不然拿不到返回值。

相关文章:

  • 基于autoware.1.14与gazebo联合仿真进行激光点云循迹仿真
  • 基于领域知识的A型主动脉夹层综合分割及面向临床的评估|文献速递-深度学习医疗AI最新文献
  • 【学习笔记】文件上传漏洞--黑白盒审计
  • 文章记单词 | 第37篇(六级)
  • 云服务器和物理服务器
  • AI写程序: 多线程网络扫描网段ip工具
  • 内网穿透服务器—FRP
  • 颚式破碎机的设计
  • c# 简单实现将Message的内容保存到txt中,超过100个则清理旧文件
  • Linux:线程的同步与互斥(生产者消费者模型的demo)
  • Function Calling的时序图(含示例)
  • FA-YOLO:基于FMDS与AGMF的高效目标检测算法解析
  • C++指针与内存管理深度解析
  • TDengine Restful 接口API
  • 【机试】高精度
  • Valgrind内存调试工具详解
  • PGSql常用操作命令
  • DeepSeek-R3、GPT-4o 与 Claude-3.5-Sonnet 全面对比:性能、应用场景与技术解析
  • docker一次给所有容器限制内存大小
  • QT项目----电子相册(2)
  • 尹锡悦涉嫌发动内乱案第二次庭审21日举行,媒体获准拍摄
  • 85岁眼科专家、武汉大学人民医院原眼科主任喻长泰逝世
  • 新城市志|全球供应链动荡加剧,中国稳外贸有信心有底气
  • 纪念沈渭滨︱志于道而游曳于士和氓间的晚年沈先生
  • 山东临沂市市长张宝亮履新市委书记
  • “特朗普的欧洲耳语者”:梅洛尼白宫之行真能打破美欧关税僵局?