Преглед изворни кода

kimi 调用 爬虫web接口

wangyunpeng пре 3 месеци
родитељ
комит
f41102f33f

+ 19 - 0
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/kimi/KimiResponse.java

@@ -0,0 +1,19 @@
+package com.tzld.longarticle.recommend.server.model.dto.kimi;
+
+import lombok.Getter;
+import lombok.Setter;
+
+@Getter
+@Setter
+public class KimiResponse {
+    private int code;
+    private String msg;
+    private Data data;
+
+    @Getter
+    @Setter
+    public static class Data {
+        private Data data;
+        private String msg;
+    }
+}

+ 1 - 1
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/model/dto/kimi/KimiResult.java

@@ -5,7 +5,7 @@ import lombok.Data;
 @Data
 @Data
 public class KimiResult {
 public class KimiResult {
     private boolean success;
     private boolean success;
-    private KimiOfficialApiResponse response;
+    private String response;
     private String failReason;
     private String failReason;
     private String responseStr;
     private String responseStr;
 }
 }

+ 63 - 3
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/remote/KimiApiService.java

@@ -4,6 +4,7 @@ import cn.hutool.core.collection.CollectionUtil;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONArray;
 import com.alibaba.fastjson.JSONObject;
 import com.alibaba.fastjson.JSONObject;
 import com.tzld.longarticle.recommend.server.model.dto.kimi.KimiOfficialApiResponse;
 import com.tzld.longarticle.recommend.server.model.dto.kimi.KimiOfficialApiResponse;
+import com.tzld.longarticle.recommend.server.model.dto.kimi.KimiResponse;
 import com.tzld.longarticle.recommend.server.model.dto.kimi.KimiResult;
 import com.tzld.longarticle.recommend.server.model.dto.kimi.KimiResult;
 import com.tzld.longarticle.recommend.server.util.MapBuilder;
 import com.tzld.longarticle.recommend.server.util.MapBuilder;
 import lombok.extern.slf4j.Slf4j;
 import lombok.extern.slf4j.Slf4j;
@@ -29,9 +30,16 @@ public class KimiApiService {
                 .readTimeout(15, TimeUnit.MINUTES)
                 .readTimeout(15, TimeUnit.MINUTES)
                 .writeTimeout(15, TimeUnit.MINUTES)
                 .writeTimeout(15, TimeUnit.MINUTES)
                 .build();
                 .build();
-
     }
     }
 
 
+    public KimiResult request(String prompt, String model, Double temperature) {
+        try {
+            return requestWeb(prompt);
+        } catch (Exception e) {
+            log.error("kimi web fail: " + e.getMessage());
+            return requestOfficialApi(prompt, model, temperature);
+        }
+    }
 
 
     public KimiResult requestOfficialApi(String prompt, String model, Double temperature) {
     public KimiResult requestOfficialApi(String prompt, String model, Double temperature) {
         KimiResult result = new KimiResult();
         KimiResult result = new KimiResult();
@@ -72,13 +80,13 @@ public class KimiApiService {
                 KimiOfficialApiResponse obj = JSONObject.parseObject(responseContent, KimiOfficialApiResponse.class);
                 KimiOfficialApiResponse obj = JSONObject.parseObject(responseContent, KimiOfficialApiResponse.class);
                 if (CollectionUtil.isNotEmpty(obj.getChoices())) {
                 if (CollectionUtil.isNotEmpty(obj.getChoices())) {
                     result.setSuccess(true);
                     result.setSuccess(true);
-                    result.setResponse(obj);
+                    result.setResponse(obj.getChoices().get(0).getMessage().getContent());
                 } else {
                 } else {
                     result.setFailReason("response empty");
                     result.setFailReason("response empty");
                 }
                 }
             } else {
             } else {
                 JSONObject json = JSONObject.parseObject(responseContent);
                 JSONObject json = JSONObject.parseObject(responseContent);
-                result.setFailReason("request error code:" + response.code() + " message:" + json.getString("error"));
+                result.setFailReason("request official api error code:" + response.code() + " message:" + json.getString("error"));
             }
             }
         } catch (Exception e) {
         } catch (Exception e) {
             log.error("kimi official api fail: " + e.getMessage());
             log.error("kimi official api fail: " + e.getMessage());
@@ -86,4 +94,56 @@ public class KimiApiService {
         }
         }
         return result;
         return result;
     }
     }
+
+    public KimiResult requestWeb(String prompt) {
+        KimiResult result = new KimiResult();
+        result.setSuccess(false);
+        if (TextUtils.isBlank(prompt) || TextUtils.isBlank(prompt.trim())) {
+            result.setFailReason("prompt is empty");
+            return result;
+        }
+        try {
+            Map<Object, Object> bodyParam = MapBuilder
+                    .builder()
+                    .put("prompt", prompt)
+                    .build();
+
+            MediaType mediaType = MediaType.parse("application/json");
+            RequestBody body = RequestBody.create(mediaType, JSONObject.toJSONString(bodyParam));
+            Request request = new Request.Builder()
+                    .url("http://crawler.aiddit.com/crawler/moonshot/kimi")
+                    .method("POST", body)
+                    .addHeader("Content-Type", "application/json")
+                    .build();
+            Response response = client.newCall(request).execute();
+
+            String responseContent = response.body().string();
+            result.setResponseStr(responseContent);
+            log.info("kimi web responseContent = {}", responseContent);
+            if (response.isSuccessful()) {
+                KimiResponse obj = JSONObject.parseObject(responseContent, KimiResponse.class);
+                if (obj == null) {
+                    result.setFailReason("远端业务接口处理出错,kimiResponse为空");
+                } else if (obj.getCode() != 0) {
+                    result.setFailReason("远端业务接口处理出错,code不为0,code=" + obj.getCode() + ",msg=" + obj.getMsg());
+                } else if (obj.getData() == null) {
+                    result.setFailReason("远端业务接口处理出错,data为空");
+                } else if (obj.getData().getData() == null) {
+                    result.setFailReason("远端业务接口处理出错,data.data为空");
+                } else if (obj.getData().getData().getMsg() == null) {
+                    result.setFailReason("远端业务接口处理出错,data.data.msg为空");
+                } else {
+                    result.setSuccess(true);
+                    result.setResponse(obj.getData().getData().getMsg());
+                }
+            } else {
+                JSONObject json = JSONObject.parseObject(responseContent);
+                result.setFailReason("request web error code:" + response.code() + " message:" + json.getString("error"));
+            }
+        } catch (Exception e) {
+            log.error("kimi web fail: " + e.getMessage());
+            result.setFailReason(e.getMessage());
+        }
+        return result;
+    }
 }
 }

+ 6 - 6
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/recommend/ArticleCategoryService.java

@@ -102,14 +102,14 @@ public class ArticleCategoryService {
         for (List<ArticleCategory> partition : partitionList) {
         for (List<ArticleCategory> partition : partitionList) {
             List<String> partitionTitles = partition.stream().map(ArticleCategory::getTitle).distinct().collect(Collectors.toList());
             List<String> partitionTitles = partition.stream().map(ArticleCategory::getTitle).distinct().collect(Collectors.toList());
             String prompt = buildKimiPrompt(partitionTitles);
             String prompt = buildKimiPrompt(partitionTitles);
-            KimiResult kimiResult = kimiApiService.requestOfficialApi(prompt, null, null);
+            KimiResult kimiResult = kimiApiService.request(prompt, null, null);
             long now = System.currentTimeMillis();
             long now = System.currentTimeMillis();
             JSONObject obj = null;
             JSONObject obj = null;
             if (kimiResult.isSuccess()) {
             if (kimiResult.isSuccess()) {
                 try {
                 try {
-                    obj = JSONObject.parseObject(kimiResult.getResponse().getChoices().get(0).getMessage().getContent());
+                    obj = JSONObject.parseObject(kimiResult.getResponse());
                 } catch (Exception e) {
                 } catch (Exception e) {
-                    log.error(kimiResult.getResponse().getChoices().get(0).getMessage().getContent());
+                    log.error(kimiResult.getResponse());
                 }
                 }
             }
             }
             for (ArticleCategory articleCategory : partition) {
             for (ArticleCategory articleCategory : partition) {
@@ -292,14 +292,14 @@ public class ArticleCategoryService {
         for (ArticleCategory articleCategory : dealList) {
         for (ArticleCategory articleCategory : dealList) {
             List<String> partitionTitles = Collections.singletonList(articleCategory.getTitle());
             List<String> partitionTitles = Collections.singletonList(articleCategory.getTitle());
             String prompt = buildKimiPrompt(partitionTitles);
             String prompt = buildKimiPrompt(partitionTitles);
-            KimiResult kimiResult = kimiApiService.requestOfficialApi(prompt, null, null);
+            KimiResult kimiResult = kimiApiService.request(prompt, null, null);
             long now = System.currentTimeMillis();
             long now = System.currentTimeMillis();
             JSONObject obj = null;
             JSONObject obj = null;
             if (kimiResult.isSuccess()) {
             if (kimiResult.isSuccess()) {
                 try {
                 try {
-                    obj = JSONObject.parseObject(kimiResult.getResponse().getChoices().get(0).getMessage().getContent());
+                    obj = JSONObject.parseObject(kimiResult.getResponse());
                 } catch (Exception e) {
                 } catch (Exception e) {
-                    log.error(kimiResult.getResponse().getChoices().get(0).getMessage().getContent());
+                    log.error(kimiResult.getResponse());
                 }
                 }
             }
             }
             articleCategory.setKimiResult(kimiResult.getResponseStr());
             articleCategory.setKimiResult(kimiResult.getResponseStr());

+ 3 - 3
long-article-recommend-service/src/main/java/com/tzld/longarticle/recommend/server/service/recommend/score/strategy/SimilarityStrategy.java

@@ -67,14 +67,14 @@ public class SimilarityStrategy implements ScoreStrategy {
                 if (!StringUtils.hasText(type)) {
                 if (!StringUtils.hasText(type)) {
                     String prompt = kimiSimilarityTypePrompt.replace("accountName", param.getAccountName());
                     String prompt = kimiSimilarityTypePrompt.replace("accountName", param.getAccountName());
                     // 调用kimi判断账号类型
                     // 调用kimi判断账号类型
-                    KimiResult kimiResult = kimiApiService.requestOfficialApi(prompt, null, null);
+                    KimiResult kimiResult = kimiApiService.request(prompt, null, null);
                     if (kimiResult.isSuccess()) {
                     if (kimiResult.isSuccess()) {
                         try {
                         try {
-                            type = kimiResult.getResponse().getChoices().get(0).getMessage().getContent();
+                            type = kimiResult.getResponse();
                             log.info("SimilarityStrategy kimiResultType:{}", type);
                             log.info("SimilarityStrategy kimiResultType:{}", type);
                             redisTemplate.opsForValue().set(redisKey, type, 10L, TimeUnit.DAYS);
                             redisTemplate.opsForValue().set(redisKey, type, 10L, TimeUnit.DAYS);
                         } catch (Exception e) {
                         } catch (Exception e) {
-                            log.error(kimiResult.getResponse().getChoices().get(0).getMessage().getContent());
+                            log.error(kimiResult.getResponse());
                         }
                         }
                     }
                     }
                 }
                 }