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分钟,不然拿不到返回值。