DeepSeekApiService.java 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. package com.tzld.piaoquan.api.component;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.tzld.piaoquan.api.model.dto.AIOfficialApiResponse;
  5. import com.tzld.piaoquan.api.model.dto.AIResult;
  6. import com.tzld.piaoquan.growth.common.utils.MapBuilder;
  7. import lombok.extern.slf4j.Slf4j;
  8. import okhttp3.*;
  9. import org.apache.commons.collections.CollectionUtils;
  10. import org.apache.http.util.TextUtils;
  11. import org.springframework.stereotype.Service;
  12. import javax.annotation.PostConstruct;
  13. import java.util.Map;
  14. import java.util.Optional;
  15. import java.util.concurrent.TimeUnit;
  16. @Service
  17. @Slf4j
  18. public class DeepSeekApiService {
  19. private OkHttpClient client;
  20. @PostConstruct
  21. public void init() {
  22. client = new OkHttpClient().newBuilder()
  23. .connectTimeout(5, TimeUnit.MINUTES)
  24. .readTimeout(5, TimeUnit.MINUTES)
  25. .writeTimeout(5, TimeUnit.MINUTES)
  26. .build();
  27. }
  28. public AIResult requestOfficialApi(String prompt, String model, Double temperature, Boolean isJSON) {
  29. AIResult result = new AIResult();
  30. result.setSuccess(false);
  31. if (TextUtils.isBlank(prompt) || TextUtils.isBlank(prompt.trim())) {
  32. result.setFailReason("prompt is empty");
  33. return result;
  34. }
  35. try {
  36. JSONArray jsonArray = new JSONArray();
  37. JSONObject message = new JSONObject();
  38. message.put("role", "user");
  39. message.put("content", prompt);
  40. jsonArray.add(message);
  41. Map<Object, Object> bodyParam = MapBuilder
  42. .builder()
  43. .put("model", Optional.ofNullable(model).orElse("deepseek-chat"))
  44. .put("temperature", Optional.ofNullable(temperature).orElse(0.3))
  45. .put("messages", jsonArray)
  46. .build();
  47. if (isJSON) {
  48. JSONObject formatJSON = new JSONObject();
  49. formatJSON.put("type", "json_object");
  50. bodyParam.put("response_format", formatJSON);
  51. }
  52. MediaType mediaType = MediaType.parse("application/json");
  53. RequestBody body = RequestBody.create(mediaType, JSONObject.toJSONString(bodyParam));
  54. Request request = new Request.Builder()
  55. .url("https://api.deepseek.com/chat/completions")
  56. .method("POST", body)
  57. .addHeader("Content-Type", "application/json")
  58. .addHeader("Accept", "application/json")
  59. .addHeader("Authorization", "Bearer sk-62d7b2c37f824735aa4985852c919c1f")
  60. .build();
  61. Response response = client.newCall(request).execute();
  62. String responseContent = response.body().string();
  63. result.setResponseStr(responseContent);
  64. log.info("deepseek api responseContent = {}", responseContent);
  65. if (response.isSuccessful()) {
  66. AIOfficialApiResponse obj = JSONObject.parseObject(responseContent, AIOfficialApiResponse.class);
  67. if (CollectionUtils.isNotEmpty(obj.getChoices())) {
  68. result.setSuccess(true);
  69. result.setResponse(obj);
  70. } else {
  71. result.setFailReason("response empty");
  72. }
  73. } else {
  74. JSONObject json = JSONObject.parseObject(responseContent);
  75. result.setFailReason("request error code:" + response.code() + " message:" + json.getString("error"));
  76. }
  77. } catch (Exception e) {
  78. log.error("deepseek official api fail: " + e.getMessage());
  79. result.setFailReason(e.getMessage());
  80. }
  81. return result;
  82. }
  83. }