From 52c8ee3120e4a44e48e217bced6f6c799ff7980c Mon Sep 17 00:00:00 2001
From: shikeying <shikeying@163.com>
Date: 星期日, 07 四月 2024 17:20:16 +0800
Subject: [PATCH] 添加milvus代码示例2

---
 deploy-jar-template/src/main/java/com/iplatform/api/MilvusChatApi.java |   87 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 86 insertions(+), 1 deletions(-)

diff --git a/deploy-jar-template/src/main/java/com/iplatform/api/MilvusChatApi.java b/deploy-jar-template/src/main/java/com/iplatform/api/MilvusChatApi.java
index 79483b2..ae37222 100644
--- a/deploy-jar-template/src/main/java/com/iplatform/api/MilvusChatApi.java
+++ b/deploy-jar-template/src/main/java/com/iplatform/api/MilvusChatApi.java
@@ -4,8 +4,13 @@
 import com.iplatform.milvus.EventVo;
 import com.iplatform.milvus.MilvusEngine;
 import com.iplatform.milvus.ParamList;
+import com.iplatform.milvus.ScoreText;
+import com.iplatform.milvus.SearchResult;
 import com.iplatform.milvus.service.EventServiceImpl;
+import com.walker.infrastructure.utils.FileUtils;
+import com.walker.infrastructure.utils.JsonUtils;
 import com.walker.infrastructure.utils.StringUtils;
+import com.walker.support.milvus.OutData;
 import com.walker.web.ResponseValue;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.http.HttpStatus;
@@ -18,6 +23,7 @@
 import java.util.Collection;
 import java.util.LinkedHashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 @RestController
@@ -32,7 +38,9 @@
     private boolean isBreak = false;
 
     private static final String URL_EMBEDDING = "http://120.26.128.84:7003/ai/text/embedding";
+    private static final String URL_SEARCH_SIMILAR = "http://120.26.128.84:7003/ai/text/search_similar";
     private static final String URL_MILVUS = "120.26.128.84";
+    private static final double BEST_MATCH_SCORE = 0.75;
 
     @Autowired
     public MilvusChatApi(EventServiceImpl eventService, RestTemplate restTemplate){
@@ -41,6 +49,7 @@
         if(this.milvusEngine == null){
             MilvusEngine engine = new MilvusEngine(URL_MILVUS, 19530);
             this.milvusEngine = engine;
+            this.milvusEngine.loadChatSimilar4Search();
             logger.info("milvus engine ok!");
         }
     }
@@ -76,8 +85,84 @@
 
     @RequestMapping("/query")
     public ResponseValue testQueryMilvus(String text){
+        if(StringUtils.isEmpty(text)){
+            return ResponseValue.error("text is required!");
+        }
+        // 鐢ㄥ垎鍙峰垎闅斿涓鍙�
+        String[] array = StringUtils.toArray(text);
+        ParamList paramList = new ParamList();
+        for(String value : array){
+            paramList.add(value);
+        }
 
-        return ResponseValue.success();
+        SearchResult searchResult = this.acquireSearchResult(paramList);
+        if(searchResult == null){
+            logger.warn("杩滅▼璋冪敤鏈�鍖归厤璇彞鍚戦噺澶辫触锛屾棤娉曠户缁悳绱㈢浉浼煎害");
+            return ResponseValue.error("杩滅▼璋冪敤鏈�鍖归厤璇彞鍚戦噺澶辫触锛屾棤娉曠户缁悳绱㈢浉浼煎害");
+        }
+
+        List<List<Float>> requestVectors = new ArrayList(4);
+
+        if(!StringUtils.isEmptyList(searchResult.getBest_list()) && searchResult.getBest_embedding() != null){
+            ScoreText bestScoreText = searchResult.getBest_list().get(0);
+            logger.debug("鍦ㄥ璇濋泦鍚堜腑锛屽瓨鍦ㄦ渶鍖归厤鐨勫彞瀛�: {}", bestScoreText);
+            if(bestScoreText.getScore() >= BEST_MATCH_SCORE){
+                logger.debug("鏈�鍖归厤鐨勫垎鍊�: {} 澶т簬璁剧疆闃堝�硷紝鍙互鐩存帴浣滀负鏌ヨ鍩哄噯", bestScoreText.getScore());
+                requestVectors.add(searchResult.getBest_embedding());
+            } else {
+                requestVectors.add(searchResult.getBest_embedding());
+                requestVectors.add(searchResult.getAll_embedding());
+            }
+        } else {
+            logger.debug("鍙娇鐢ㄥ叏閲忔煡璇㈠悜閲忥細{}", text);
+            requestVectors.add(searchResult.getAll_embedding());
+        }
+
+        OutData outData = this.milvusEngine.searchChatSimilar(requestVectors);
+        if(outData == null){
+            return ResponseValue.error("鏈绱㈠埌浠讳綍鍖归厤鐩镐技鎻愰棶");
+        }
+
+        List<OutData.Data> dataList = outData.getResultList();
+        for(OutData.Data d : dataList){
+            logger.info("data = {}", d);
+        }
+
+
+        return ResponseValue.success(dataList);
+    }
+
+    private SearchResult acquireSearchResult(ParamList paramList){
+        try {
+            ResponseEntity<ResponseValue> responseEntity = this.restTemplate.postForEntity(URL_SEARCH_SIMILAR, paramList, ResponseValue.class);
+//            logger.debug(responseEntity.toString());
+            if(responseEntity.getStatusCode() == HttpStatus.OK){
+                ResponseValue<Map<String, Object>> responseValue = responseEntity.getBody();
+                if(responseValue.getCode() != 1){
+                    logger.error("璋冪敤杩斿洖acquireSearchResult杩斿洖鐘舵�侀敊璇細{}", responseValue.getMsg());
+                    return null;
+                }
+                Map<String, Object> map = responseValue.getData();
+                logger.debug("map = {}", map);
+//                String bestListJson = JsonUtils.objectToJsonString(map.get("best_list"));
+//                List<ScoreText> bestList = JsonUtils.jsonStringToList(bestListJson, ScoreText.class);
+//                logger.debug("bestList = {}", bestList);
+//                SearchResult searchResult = new SearchResult();
+//                searchResult.setBest_embedding(this.transfer2FloatList((List<Float>)map.get("best_embedding")));
+//                searchResult.setAll_embedding(this.transfer2FloatList((List<Float>)map.get("all_embedding")));
+                String json = JsonUtils.objectToJsonString(map);
+                SearchResult searchResult = JsonUtils.jsonStringToObject(json, SearchResult.class);
+                searchResult.setBest_embedding(this.transfer2FloatList(searchResult.getBest_embedding()));
+                searchResult.setAll_embedding(this.transfer2FloatList(searchResult.getAll_embedding()));
+                return searchResult;
+            } else {
+                logger.error("璋冪敤 {} 缁撴灉杩斿洖澶辫触锛歿}", URL_SEARCH_SIMILAR, responseEntity.getStatusCodeValue());
+                return null;
+            }
+        } catch (Exception ex){
+            logger.error("鑾峰彇鎼滅储璇彞鍚戦噺缁撴灉閿欒锛歿}" + ex.getMessage(), ex);
+            return null;
+        }
     }
 
     private boolean acquireEmbedding(List<EventVo> batchData){

--
Gitblit v1.9.1