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