123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440 |
- package com.slibra.web.controller.business;
- import com.alibaba.fastjson2.JSONWriter;
- import com.alibaba.fastjson2.JSON;
- import com.google.protobuf.ByteString;
- import com.qiniu.util.Json;
- import com.slibra.business.domain.TXinyiChatRecord;
- import com.slibra.business.domain.TXinyiDaily;
- import com.slibra.business.domain.TXinyiIndustry;
- import com.slibra.business.domain.TXinyiNormConfig;
- import com.slibra.business.mapper.*;
- import com.slibra.business.req.ChatReq;
- import com.slibra.business.req.DecisionReq;
- import com.slibra.common.core.controller.BaseController;
- import com.slibra.common.core.domain.AjaxResult;
- import com.slibra.common.core.domain.R;
- import com.slibra.common.utils.DateUtils;
- import com.slibra.common.utils.SecurityUtils;
- import com.slibra.common.utils.StringUtils;
- import com.slibra.common.utils.uuid.IdUtils;
- import io.grpc.ManagedChannel;
- import io.grpc.ManagedChannelBuilder;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang3.StringEscapeUtils;
- import org.pytorch.serve.grpc.inference.InferenceAPIsServiceGrpc;
- import org.pytorch.serve.grpc.inference.PredictionResponse;
- import org.pytorch.serve.grpc.inference.PredictionsRequest;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.util.CollectionUtils;
- import org.springframework.web.bind.annotation.*;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.io.UnsupportedEncodingException;
- import java.math.BigDecimal;
- import java.math.RoundingMode;
- import java.nio.charset.StandardCharsets;
- import java.time.LocalDateTime;
- import java.time.ZoneId;
- import java.util.*;
- import static com.slibra.common.constant.MyConstants.WARNING_DEFAULT_CREATE;
- /**
- * 告警相关
- */
- @RestController
- @RequestMapping("/grpc")
- @Slf4j
- public class GRPCController extends BaseController {
- @Autowired
- private TXinyiChatRecordMapper chatRecordMapper;
- @Autowired
- private TXinyiIndustryMapper xinyiIndustryMapper;
- @Autowired
- private TXinyiDailyMapper xinyiDailyMapper;
- @Autowired
- private TXinyiChatRecordMapper xinyiChatRecordMapper;
- /*private InferenceAPIsServiceGrpc.InferenceAPIsServiceBlockingStub getStub(){
- return InferenceAPIsServiceGrpc.newBlockingStub(ManagedChannelBuilder.forAddress("10.0.0.24", 17070)
- .usePlaintext()
- .build());
- }*/
- /**
- * 调⽤大模型决策接口
- * @return
- */
- @PostMapping(value = "/decisionStream")
- public void decisionStream(HttpServletResponse response, @RequestBody ChatReq chatReq)
- // public void decisionStream(HttpServletResponse response, ChatReq chatReq)
- {
- log.info("进入了调⽤大模型决策接口");
- // StringBuilder sb = new StringBuilder();
- //大模型结果 放入一个结合中
- List<String> resultData = new ArrayList<>();
- //决策和问答不一样 没有历史的概念 所以sessionId都是新的 次数都是1
- String sessionId = IdUtils.simpleUUID();
- String feedback = chatReq.getFeedback();
- //决策请求的业务参数
- // List<HashMap<String, Object>> list = this.xinyiIndustryMapper.selectLast10RecordsForDecision();
- //2024年5月21日15:23:07 这里不能用关联查询处理,日报要获取最新的一条而不是今日的数据。
- List<DecisionReq> decisionReqs = this.xinyiIndustryMapper.selectLast10RecordsForDecisionOnlyIndustry();
- if(!CollectionUtils.isEmpty(decisionReqs)){
- for (DecisionReq decisionReq : decisionReqs) {
- //处理日报数据
- TXinyiDaily daily = this.xinyiDailyMapper.selectNewestData();
- if(!Objects.isNull(daily)){
- decisionReq.setT(daily.getJsSw());
- decisionReq.setSVI(daily.getWntjzsAll());
- decisionReq.setSV(daily.getWncjbAll());
- decisionReq.setMlvss(daily.getHfxwnndAll());
- decisionReq.setDoAna(daily.getYycRjyAll());
- decisionReq.setDoQue(daily.getQycRjyAll());
- BigDecimal jsBod5 = daily.getJsBod5();
- decisionReq.setBodIn(jsBod5);
- BigDecimal tpIn = decisionReq.getTpIn();
- BigDecimal tnIn = decisionReq.getTnIn();
- if(!Objects.isNull(jsBod5)){
- if(!Objects.isNull(tpIn) && tpIn.compareTo(new BigDecimal("0")) >0){
- decisionReq.setC(jsBod5.divide(tpIn, 4, RoundingMode.HALF_UP));
- }
- if(!Objects.isNull(tnIn) && tnIn.compareTo(new BigDecimal("0")) >0){
- decisionReq.setB(jsBod5.divide(tnIn, 4, RoundingMode.HALF_UP));
- }
- }
- }
- }
- }
- String rows = JSON.toJSONString(decisionReqs, JSONWriter.Feature.WriteNulls);
- // 获取输出流
- OutputStream outputStream = null;
- ManagedChannel channel = null;
- response.setContentType("text/plain");
- response.setCharacterEncoding("utf-8");
- String dataJson = "";
- try {
- channel = ManagedChannelBuilder.forAddress("10.0.0.24", 17070)
- .usePlaintext()
- .build();
- InferenceAPIsServiceGrpc.InferenceAPIsServiceBlockingStub stub = InferenceAPIsServiceGrpc.newBlockingStub(channel);
- dataJson = "{\"bot_id\":\"b00001\",\"exp_id\":\"721\",\"norm\":\"" + chatReq.getCategory() + "\",\"feedback\":" + feedback + ",\"session_id\":" + "\"" + sessionId + "\"" + ",\"generate_args\":{\"max_new_tokens\":1024,\"max_length\":4096,\"num_beams\":1,\"do_sample\":true,\"top_p\":0.7,\"temperature\":0.95},\"extra\":{\"rows\":" + rows + "}}";
- log.info("请求大模型的决策的参数为{}", dataJson);
- PredictionsRequest request = PredictionsRequest.newBuilder()
- .setModelName("slibra_bot")
- .putInput("method", ByteString.copyFrom("decision_stream", "utf-8"))//推理
- .putInput("data", ByteString.copyFrom(dataJson, "utf-8"))
- .buildPartial();
- outputStream = response.getOutputStream();
- Iterator<PredictionResponse> predictions = stub.streamPredictions(request);
- while (predictions.hasNext()) {
- String responseStr = predictions.next().getPrediction().toStringUtf8();
- log.info("决策流式返回的结果是{}", responseStr);
- responseStr = JSON.parseObject(responseStr).getString("message");
- if("complete".equals(responseStr)){
- System.out.println("结尾语句并且是非JSON,无需处理");
- }else{
- // sb.append(responseStr);
- resultData.add(responseStr);
- outputStream.write(responseStr.getBytes());
- outputStream.flush();
- }
- // todo 类型判断处理
- }
- } catch (Exception e) {
- // throw new RuntimeException(e);
- log.error("处理大模型推理异常,异常信息为{}", JSON.toJSONString(e));
- } finally {
- System.out.println(JSON.toJSONString(resultData));
- //保存聊天记录
- //将问答更新到数据库中
- chatReq.setSessionId(sessionId);
- chatReq.setType(1);//0问答 1决策
- chatReq.setModule(3);//0=专家问答,1=智能工单,2=智能体助手,3.告警
- // String showVal = this.buildShowValue(tXinyiWarningRecord, tXinyiIndustry, normConfig);
- chatReq.setShowVal(feedback);//前端展示的数据和提问的数据不一致
- chatReq.setQuestion(dataJson);
- chatReq.setAnswer(JSON.toJSONString(resultData));
- chatReq.setWarningId(String.valueOf(chatReq.getWarningId()));
- chatReq.setCounts(1);//问答次数
- String userId = SecurityUtils.getUserId().toString();
- String username = SecurityUtils.getUsername();
- chatReq.setUserId(userId);
- chatReq.setCreateBy(username);
- chatReq.setCreateTime(DateUtils.getNowDate());
- this.xinyiChatRecordMapper.insertTXinyiChatRecord(chatReq);
- // 关闭输出流
- try {
- outputStream.close();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }finally {
- channel.shutdown();
- }
- }
- }
- /**
- * RAG+⼤模型的调⽤参数
- * @return
- */
- @PostMapping(value = "/inferStreamRag")
- public void inferStreamRag(HttpServletResponse response, @RequestBody ChatReq chatReq) {
- // public void inferStreamRag(HttpServletResponse response, ChatReq chatReq) {
- log.info("进入了调⽤RAG+⼤模型的调⽤参数");
- StringBuilder sb = new StringBuilder();
- String sessionId = chatReq.getSessionId();
- String question = chatReq.getQuestion();
- int counts = 1;//默认是第一次
- List<String> historyDates = new ArrayList<>();
- //查询历史数据,放入集合中
- if(StringUtils.isBlank(sessionId))
- sessionId= IdUtils.simpleUUID();//第一次
- else{
- //通过sessionId获取所有的问答记录
- List<TXinyiChatRecord> chatRecords = this.chatRecordMapper.selectTXinyiChatRecordList(TXinyiChatRecord.builder().sessionId(sessionId).build());
- if(!CollectionUtils.isEmpty(chatRecords)){
- for (TXinyiChatRecord chatRecord : chatRecords) {
- historyDates.add(chatRecord.getQuestion());
- historyDates.add(chatRecord.getAnswer());
- }
- //问答次数增加
- counts = chatRecords.size() + 1;
- }
- }
- //将新的问题放入集合中
- historyDates.add(question);
- // 获取输出流
- OutputStream outputStream = null;
- ManagedChannel channel = null;
- response.setContentType("text/plain");
- response.setCharacterEncoding("utf-8");
- try {
- channel = ManagedChannelBuilder.forAddress("10.0.0.24", 17070)
- .usePlaintext()
- .build();
- InferenceAPIsServiceGrpc.InferenceAPIsServiceBlockingStub stub = InferenceAPIsServiceGrpc.newBlockingStub(channel);
- String dataJson = "{\"bot_id\":\"721\",\"exp_id\":\"721\",\"session_id\":\"" + sessionId + "\",\"use_rag\":\"true\",\"prompt\":\"你是⼀个资深⽔务领域专家,能回答各种⽔务相关问题\",\"history_dia\":" + JSON.toJSONString(historyDates) + ",\"generate_args\":{\"max_new_tokens\":2048,\"max_length\":4096,\"num_beams\":1,\"do_sample\":true,\"top_p\":0.7,\"temperature\":0.95},\"extra\":{}}";
- System.out.println(dataJson);
- PredictionsRequest request = PredictionsRequest.newBuilder()
- .setModelName("slibra_bot")
- .putInput("method", ByteString.copyFrom("infer_stream", "utf-8"))//推理
- .putInput("data", ByteString.copyFrom(dataJson, "utf-8"))
- .buildPartial();
- outputStream = response.getOutputStream();
- Iterator<PredictionResponse> predictions = stub.streamPredictions(request);
- outputStream.write("begin".getBytes());
- outputStream.flush();
- //将结果记录到问答表
- while (predictions.hasNext()) {
- String responseStr = predictions.next().getPrediction().toStringUtf8();
- System.out.println(responseStr);
- responseStr = JSON.parseObject(responseStr).getString("message");
- if("complete".equals(responseStr)){
- System.out.println("结尾语句并且是非JSON,无需处理");
- }else{
- sb.append(responseStr);
- outputStream.write(responseStr.getBytes());
- outputStream.flush();
- }
- //把SessionId返回给前端
- outputStream.write(sessionId.getBytes());
- outputStream.flush();
- }
- } catch (IOException e) {
- throw new RuntimeException(e);
- } finally {
- // System.out.println(sb.toString());
- //将问答更新到数据库中
- chatReq.setSessionId(sessionId);
- chatReq.setAnswer(sb.toString());
- chatReq.setType(0);//0问答 1决策
- chatReq.setModule(0);//0=专家问答,1=智能工单,2=智能体助手,3.告警
- chatReq.setShowVal(question);
- chatReq.setCounts(counts);//问答次数
- String userId = SecurityUtils.getUserId().toString();
- String username = SecurityUtils.getUsername();
- chatReq.setUserId(userId);
- chatReq.setCreateBy(username);
- chatReq.setCreateTime(DateUtils.getNowDate());
- this.chatRecordMapper.insertTXinyiChatRecord(chatReq);
- // 关闭输出流
- try {
- outputStream.close();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }finally {
- channel.shutdown();
- }
- }
- // return AjaxResult.success("ok");
- }
- public static void main(String[] args) {
- String encoded = "\\345\\216\\214\\346\\260\\247\\346\\261\\240\\347\\241\\235\\351\\205\\270\\347\\233\\220\\346\\260\\256\\346\\230\\257\\345\\220\\246\\345\\244\\247\\344\\272";
- String decoded = decodeOctalToUtf8(encoded);
- System.out.println(decoded);
- }
- public static String decodeOctalToUtf8(String encoded) {
- // 移除反斜杠
- String octalSequence = encoded.replaceAll("\\\\", "");
- // 检查长度是否是3的倍数
- if (octalSequence.length() % 3 != 0) {
- throw new IllegalArgumentException("Encoded string length is not a multiple of 3");
- }
- byte[] bytes = new byte[octalSequence.length() / 3];
- for (int i = 0, j = 0; i < octalSequence.length(); i += 3, j++) {
- // 提取每三个字符的八进制数
- String octal = octalSequence.substring(i, i + 3);
- // 将八进制数转换为字节
- bytes[j] = (byte) Integer.parseInt(octal, 8);
- }
- // 将字节序列转换为UTF-8编码的字符串
- return new String(bytes, StandardCharsets.UTF_8);
- }
- /**
- * ⼤模型问答的调⽤参数
- * @return
- */
- @GetMapping(value = "/inferStreamCommon")
- // public void inferStreamCommon(HttpServletResponse response, @RequestBody ChatReq chatReq)
- public void inferStreamCommon(HttpServletResponse response, ChatReq chatReq)
- {
- log.info("进入了调⽤⼤模型问答的调⽤参数");
- StringBuilder sb = new StringBuilder();
- // 获取输出流
- OutputStream outputStream = null;
- ManagedChannel channel = null;
- response.setContentType("text/plain");
- response.setCharacterEncoding("utf-8");
- try {
- channel = ManagedChannelBuilder.forAddress("10.0.0.24", 17070)
- .usePlaintext()
- .build();
- InferenceAPIsServiceGrpc.InferenceAPIsServiceBlockingStub stub = InferenceAPIsServiceGrpc.newBlockingStub(channel);
- String dataJson = "{\"bot_id\":\"721\",\"exp_id\":\"721\",\"session_id\":\"C20231025153549AC11FC2905668524\",\"use_rag\":\"false\",\"prompt\":\"你是⼀个资深⽔务领域专家,能回答各种⽔务相关问题\",\"history_dia\":[\"什么是BOD\"],\"generate_args\":{\"max_new_tokens\":2048,\"max_length\":4096,\"num_beams\":1,\"do_sample\":true,\"top_p\":0.7,\"temperature\":0.95},\"extra\":{}}";
- System.out.println(dataJson);
- PredictionsRequest request = PredictionsRequest.newBuilder()
- .setModelName("slibra_bot")
- .putInput("method", ByteString.copyFrom("infer_stream", "utf-8"))//推理
- .putInput("data", ByteString.copyFrom(dataJson, "utf-8"))
- .buildPartial();
- outputStream = response.getOutputStream();
- Iterator<PredictionResponse> predictions = stub.streamPredictions(request);
- while (predictions.hasNext()) {
- String responseStr = predictions.next().getPrediction().toStringUtf8();
- System.out.println(responseStr);
- responseStr = JSON.parseObject(responseStr).getString("message");
- if("complete".equals(responseStr)){
- System.out.println("结尾语句并且是非JSON,无需处理");
- }else{
- sb.append(responseStr);
- outputStream.write(responseStr.getBytes());
- outputStream.flush();
- }
- }
- } catch (IOException e) {
- throw new RuntimeException(e);
- } finally {
- System.out.println(sb.toString());
- // 关闭输出流
- try {
- outputStream.close();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }finally {
- channel.shutdown();
- }
- }
- // return AjaxResult.success("ok");
- }
- /**
- * 调⽤大模型决策接口-第二次
- * @return
- */
- @GetMapping(value = "/decisionStreamTwo")
- // public void decisionStreamTwo(HttpServletResponse response, @RequestBody ChatReq chatReq)
- public void decisionStreamTwo(HttpServletResponse response)
- {
- log.info("进入了调⽤大模型决策接口-第二次");
- StringBuilder sb = new StringBuilder();
- // 获取输出流
- OutputStream outputStream = null;
- ManagedChannel channel = null;
- response.setContentType("text/plain");
- response.setCharacterEncoding("utf-8");
- try {
- channel = ManagedChannelBuilder.forAddress("10.0.0.24", 17070)
- .usePlaintext()
- .build();
- InferenceAPIsServiceGrpc.InferenceAPIsServiceBlockingStub stub = InferenceAPIsServiceGrpc.newBlockingStub(channel);
- // String dataJson = "{\"bot_id\":\"b00001\",\"exp_id\":\"721\",\"norm\":\"出⽔总磷\",\"feedback\":{\"6_3\":\"超标\",\"2_24\":\"是\"},\"session_id\":\"C20231025153549AC11FC2905668533\",\"generate_args\":{\"max_new_tokens\":1024,\"max_length\":4096,\"num_beams\":1,\"do_sample\":false,\"top_p\":1,\"temperature\":0},\"extra\":{\"rows\":[{\"ID\":914496,\"TEST_DATE\":\"2024/02/07\",\"TEST_HOUR\":\"2024/02/07 08\",\"COD_in\":218.06134033203126,\"COD_in_name\":630.0,\"COD_off\":18.75,\"COD_off_name\":40.0,\"COD_off_con\":32.0,\"TP_in\":4.0364580154418949,\"TP_in_name\":7.099999904632568,\"TP_off\":0.10069400072097779,\"TP_off_name\":0.5,\"TP_off_con\":0.30000001192092898,\"TN_in\":41.27314758300781,\"TN_in_name\":65.0,\"TN_off\":11.80555534362793,\"TN_off_name\":15.0,\"TN_off_con\":12.0,\"andan_in\":33.0555534362793,\"andan_in_name\":58.0,\"andan_off\":1.0648150444030762,\"andan_off_name\":4.0,\"andan_off_con\":3.200000047683716,\"SS_in\":292.53472900390627,\"SS_in_name\":315.0,\"SS_off\":1.9675920009613038,\"SS_off_name\":10.0,\"SS_off_con\":8.0,\"TDS_in\":639.4675903320313,\"TDS_in_name\":600.0,\"T\":12.399999618530274,\"pH\":7.360531806945801,\"Q_in\":2084.0,\"Q_in_name\":4166.669921875,\"continuity\":\"\",\"check_rise\":\"\",\"time_tips\":\"\",\"cs_continuity\":\"\",\"SVI\":\"[187.852223,188.139059]\",\"SVI_con\":170.0,\"SV\":\"[90.000000,92.000000]\",\"SV_con\":80.0,\"MLVSS\":\"[1987.000000,2064.000000]\",\"MLSS\":\"[4645.833496,4077.256836]\",\"MLVSS_wentai\":\"\",\"MLSS_wentai\":\"\",\"DO_ana\":\"[0.240000,0.230000]\",\"DO_O\":\"[2.100000,2.507031]\",\"DO_que\":\"[0.220000,0.200000]\",\"DO_que_wentai\":\"\",\"DO_ana_wentai\":\"\",\"DO_O_wentai\":\"\",\"BOD_in\":124.0,\"c\":30.720003128051759,\"b\":3.0043747425079347,\"BTP_wending\":\"\",\"JS_TN_wentai\":\"\",\"CL_P04_YCZ\":null,\"TP_LV\":null,\"TP_LV_continuity\":\"\"},{\"ID\":914497,\"TEST_DATE\":\"2024/02/07\",\"TEST_HOUR\":\"2024/02/07 15\",\"COD_in\":307.1006774902344,\"COD_in_name\":630.0,\"COD_off\":16.84027671813965,\"COD_off_name\":40.0,\"COD_off_con\":32.0,\"TP_in\":6.908275127410889,\"TP_in_name\":7.099999904632568,\"TP_off\":0.10358799993991852,\"TP_off_name\":0.5,\"TP_off_con\":0.30000001192092898,\"TN_in\":56.7881965637207,\"TN_in_name\":65.0,\"TN_off\":11.31944465637207,\"TN_off_name\":15.0,\"TN_off_con\":12.0,\"andan_in\":47.361114501953128,\"andan_in_name\":58.0,\"andan_off\":0.78125,\"andan_off_name\":4.0,\"andan_off_con\":3.200000047683716,\"SS_in\":392.361083984375,\"SS_in_name\":315.0,\"SS_off\":2.1122679710388185,\"SS_off_name\":10.0,\"SS_off_con\":8.0,\"TDS_in\":671.2962646484375,\"TDS_in_name\":600.0,\"T\":12.399999618530274,\"pH\":7.222801208496094,\"Q_in\":3386.0,\"Q_in_name\":4166.669921875,\"continuity\":\"\",\"check_rise\":\"\",\"time_tips\":\"\",\"cs_continuity\":\"\",\"SVI\":\"[187.852223,188.139059]\",\"SVI_con\":170.0,\"SV\":\"[90.000000,92.000000]\",\"SV_con\":80.0,\"MLVSS\":\"[1987.000000,2064.000000]\",\"MLSS\":\"[4598.958496,3813.078613]\",\"MLVSS_wentai\":\"\",\"MLSS_wentai\":\"\",\"DO_ana\":\"[0.240000,0.230000]\",\"DO_O\":\"[2.100000,3.078125]\",\"DO_que\":\"[0.220000,0.200000]\",\"DO_que_wentai\":\"\",\"DO_ana_wentai\":\"\",\"DO_O_wentai\":\"\",\"BOD_in\":124.0,\"c\":17.949487686157228,\"b\":2.1835522651672365,\"BTP_wending\":\"\",\"JS_TN_wentai\":\"\",\"CL_P04_YCZ\":null,\"TP_LV\":null,\"TP_LV_continuity\":\"\"},{\"ID\":914498,\"TEST_DATE\":\"2024/02/07\",\"TEST_HOUR\":\"2024/02/07 15\",\"COD_in\":307.1006774902344,\"COD_in_name\":630.0,\"COD_off\":16.84027671813965,\"COD_off_name\":40.0,\"COD_off_con\":32.0,\"TP_in\":6.92274284362793,\"TP_in_name\":7.099999904632568,\"TP_off\":0.10358799993991852,\"TP_off_name\":0.5,\"TP_off_con\":0.30000001192092898,\"TN_in\":56.747684478759769,\"TN_in_name\":65.0,\"TN_off\":11.31944465637207,\"TN_off_name\":15.0,\"TN_off_con\":12.0,\"andan_in\":47.361114501953128,\"andan_in_name\":58.0,\"andan_off\":0.78125,\"andan_off_name\":4.0,\"andan_off_con\":3.200000047683716,\"SS_in\":392.361083984375,\"SS_in_name\":315.0,\"SS_off\":1.8807870149612427,\"SS_off_name\":10.0,\"SS_off_con\":8.0,\"TDS_in\":668.4027709960938,\"TDS_in_name\":600.0,\"T\":12.399999618530274,\"pH\":7.222801208496094,\"Q_in\":3453.0,\"Q_in_name\":4166.669921875,\"continuity\":\"\",\"check_rise\":\"\",\"time_tips\":\"\",\"cs_continuity\":\"\",\"SVI\":\"[187.852223,188.139059]\",\"SVI_con\":170.0,\"SV\":\"[90.000000,92.000000]\",\"SV_con\":80.0,\"MLVSS\":\"[1987.000000,2064.000000]\",\"MLSS\":\"[4651.041504,3793.981445]\",\"MLVSS_wentai\":\"\",\"MLSS_wentai\":\"\",\"DO_ana\":\"[0.240000,0.230000]\",\"DO_O\":\"[2.100000,3.082031]\",\"DO_que\":\"[0.220000,0.200000]\",\"DO_que_wentai\":\"\",\"DO_ana_wentai\":\"\",\"DO_O_wentai\":\"\",\"BOD_in\":124.0,\"c\":17.911975860595704,\"b\":2.1851112842559816,\"BTP_wending\":\"\",\"JS_TN_wentai\":\"\",\"CL_P04_YCZ\":null,\"TP_LV\":null,\"TP_LV_continuity\":\"\"},{\"ID\":914499,\"TEST_DATE\":\"2024/02/07\",\"TEST_HOUR\":\"2024/02/07 15\",\"COD_in\":307.1006774902344,\"COD_in_name\":630.0,\"COD_off\":16.84027671813965,\"COD_off_name\":40.0,\"COD_off_con\":32.0,\"TP_in\":6.915509223937988,\"TP_in_name\":7.099999904632568,\"TP_off\":0.10358799993991852,\"TP_off_name\":0.5,\"TP_off_con\":0.30000001192092898,\"TN_in\":56.7881965637207,\"TN_in_name\":65.0,\"TN_off\":11.31944465637207,\"TN_off_name\":15.0,\"TN_off_con\":12.0,\"andan_in\":47.361114501953128,\"andan_in_name\":58.0,\"andan_off\":0.78125,\"andan_off_name\":4.0,\"andan_off_con\":3.200000047683716,\"SS_in\":392.361083984375,\"SS_in_name\":315.0,\"SS_off\":1.9386579990386963,\"SS_off_name\":10.0,\"SS_off_con\":8.0,\"TDS_in\":668.4027709960938,\"TDS_in_name\":600.0,\"T\":12.399999618530274,\"pH\":7.222801208496094,\"Q_in\":3602.0,\"Q_in_name\":4166.669921875,\"continuity\":\"\",\"check_rise\":\"\",\"time_tips\":\"\",\"cs_continuity\":\"\",\"SVI\":\"[187.852223,188.139059]\",\"SVI_con\":170.0,\"SV\":\"[90.000000,92.000000]\",\"SV_con\":80.0,\"MLVSS\":\"[1987.000000,2064.000000]\",\"MLSS\":\"[4369.791504,3819.444336]\",\"MLVSS_wentai\":\"\",\"MLSS_wentai\":\"\",\"DO_ana\":\"[0.240000,0.230000]\",\"DO_O\":\"[2.100000,3.085156]\",\"DO_que\":\"[0.220000,0.200000]\",\"DO_que_wentai\":\"\",\"DO_ana_wentai\":\"\",\"DO_O_wentai\":\"\",\"BOD_in\":124.0,\"c\":17.93071174621582,\"b\":2.1835522651672365,\"BTP_wending\":\"\",\"JS_TN_wentai\":\"\",\"CL_P04_YCZ\":null,\"TP_LV\":null,\"TP_LV_continuity\":\"\"},{\"ID\":914500,\"TEST_DATE\":\"2024/02/07\",\"TEST_HOUR\":\"2024/02/07 15\",\"COD_in\":306.817138671875,\"COD_in_name\":630.0,\"COD_off\":16.84027671813965,\"COD_off_name\":40.0,\"COD_off_con\":32.0,\"TP_in\":6.915509223937988,\"TP_in_name\":7.099999904632568,\"TP_off\":0.10358799993991852,\"TP_off_name\":0.5,\"TP_off_con\":0.30000001192092898,\"TN_in\":56.7881965637207,\"TN_in_name\":65.0,\"TN_off\":11.31944465637207,\"TN_off_name\":15.0,\"TN_off_con\":12.0,\"andan_in\":47.395835876464847,\"andan_in_name\":58.0,\"andan_off\":0.78125,\"andan_off_name\":4.0,\"andan_off_con\":3.200000047683716,\"SS_in\":381.9444580078125,\"SS_in_name\":315.0,\"SS_off\":1.7939820289611817,\"SS_off_name\":10.0,\"SS_off_con\":8.0,\"TDS_in\":668.4027709960938,\"TDS_in_name\":600.0,\"T\":12.399999618530274,\"pH\":7.222801208496094,\"Q_in\":3514.0,\"Q_in_name\":4166.669921875,\"continuity\":\"\",\"check_rise\":\"\",\"time_tips\":\"\",\"cs_continuity\":\"\",\"SVI\":\"[187.852223,188.139059]\",\"SVI_con\":170.0,\"SV\":\"[90.000000,92.000000]\",\"SV_con\":80.0,\"MLVSS\":\"[1987.000000,2064.000000]\",\"MLSS\":\"[4598.958496,3841.724609]\",\"MLVSS_wentai\":\"\",\"MLSS_wentai\":\"\",\"DO_ana\":\"[0.240000,0.230000]\",\"DO_O\":\"[2.100000,3.096875]\",\"DO_que\":\"[0.220000,0.200000]\",\"DO_que_wentai\":\"\",\"DO_ana_wentai\":\"\",\"DO_O_wentai\":\"\",\"BOD_in\":124.0,\"c\":17.93071174621582,\"b\":2.1835522651672365,\"BTP_wending\":\"\",\"JS_TN_wentai\":\"\",\"CL_P04_YCZ\":null,\"TP_LV\":null,\"TP_LV_continuity\":\"\"},{\"ID\":914501,\"TEST_DATE\":\"2024/02/07\",\"TEST_HOUR\":\"2024/02/07 15\",\"COD_in\":306.817138671875,\"COD_in_name\":630.0,\"COD_off\":16.84027671813965,\"COD_off_name\":40.0,\"COD_off_con\":32.0,\"TP_in\":6.915509223937988,\"TP_in_name\":7.099999904632568,\"TP_off\":0.10358799993991852,\"TP_off_name\":0.5,\"TP_off_con\":0.30000001192092898,\"TN_in\":56.7881965637207,\"TN_in_name\":65.0,\"TN_off\":11.31944465637207,\"TN_off_name\":15.0,\"TN_off_con\":12.0,\"andan_in\":47.395835876464847,\"andan_in_name\":58.0,\"andan_off\":0.78125,\"andan_off_name\":4.0,\"andan_off_con\":3.200000047683716,\"SS_in\":381.9444580078125,\"SS_in_name\":315.0,\"SS_off\":1.649306058883667,\"SS_off_name\":10.0,\"SS_off_con\":8.0,\"TDS_in\":668.4027709960938,\"TDS_in_name\":600.0,\"T\":12.399999618530274,\"pH\":7.222801208496094,\"Q_in\":3281.0,\"Q_in_name\":4166.669921875,\"continuity\":\"\",\"check_rise\":\"\",\"time_tips\":\"\",\"cs_continuity\":\"\",\"SVI\":\"[187.852223,188.139059]\",\"SVI_con\":170.0,\"SV\":\"[90.000000,92.000000]\",\"SV_con\":80.0,\"MLVSS\":\"[1987.000000,2064.000000]\",\"MLSS\":\"[4625.000000,3946.759277]\",\"MLVSS_wentai\":\"\",\"MLSS_wentai\":\"\",\"DO_ana\":\"[0.240000,0.230000]\",\"DO_O\":\"[2.100000,3.085938]\",\"DO_que\":\"[0.220000,0.200000]\",\"DO_que_wentai\":\"\",\"DO_ana_wentai\":\"\",\"DO_O_wentai\":\"\",\"BOD_in\":124.0,\"c\":17.93071174621582,\"b\":2.1835522651672365,\"BTP_wending\":\"\",\"JS_TN_wentai\":\"\",\"CL_P04_YCZ\":null,\"TP_LV\":null,\"TP_LV_continuity\":\"\"},{\"ID\":914502,\"TEST_DATE\":\"2024/02/07\",\"TEST_HOUR\":\"2024/02/07 15\",\"COD_in\":307.3842468261719,\"COD_in_name\":630.0,\"COD_off\":16.84027671813965,\"COD_off_name\":40.0,\"COD_off_con\":32.0,\"TP_in\":6.92274284362793,\"TP_in_name\":7.099999904632568,\"TP_off\":0.10358799993991852,\"TP_off_name\":0.5,\"TP_off_con\":0.30000001192092898,\"TN_in\":56.747684478759769,\"TN_in_name\":65.0,\"TN_off\":11.31944465637207,\"TN_off_name\":15.0,\"TN_off_con\":12.0,\"andan_in\":47.361114501953128,\"andan_in_name\":58.0,\"andan_off\":0.78125,\"andan_off_name\":4.0,\"andan_off_con\":3.200000047683716,\"SS_in\":392.361083984375,\"SS_in_name\":315.0,\"SS_off\":1.5914349555969239,\"SS_off_name\":10.0,\"SS_off_con\":8.0,\"TDS_in\":668.4027709960938,\"TDS_in_name\":600.0,\"T\":12.399999618530274,\"pH\":7.222801208496094,\"Q_in\":3159.0,\"Q_in_name\":4166.669921875,\"continuity\":\"\",\"check_rise\":\"\",\"time_tips\":\"\",\"cs_continuity\":\"\",\"SVI\":\"[187.852223,188.139059]\",\"SVI_con\":170.0,\"SV\":\"[90.000000,92.000000]\",\"SV_con\":80.0,\"MLVSS\":\"[1987.000000,2064.000000]\",\"MLSS\":\"[4562.500000,3803.530029]\",\"MLVSS_wentai\":\"\",\"MLSS_wentai\":\"\",\"DO_ana\":\"[0.240000,0.230000]\",\"DO_O\":\"[2.100000,3.071094]\",\"DO_que\":\"[0.220000,0.200000]\",\"DO_que_wentai\":\"\",\"DO_ana_wentai\":\"\",\"DO_O_wentai\":\"\",\"BOD_in\":124.0,\"c\":17.911975860595704,\"b\":2.1851112842559816,\"BTP_wending\":\"\",\"JS_TN_wentai\":\"\",\"CL_P04_YCZ\":null,\"TP_LV\":null,\"TP_LV_continuity\":\"\"},{\"ID\":914503,\"TEST_DATE\":\"2024/02/07\",\"TEST_HOUR\":\"2024/02/07 15\",\"COD_in\":306.817138671875,\"COD_in_name\":630.0,\"COD_off\":16.84027671813965,\"COD_off_name\":40.0,\"COD_off_con\":32.0,\"TP_in\":6.92274284362793,\"TP_in_name\":7.099999904632568,\"TP_off\":0.10358799993991852,\"TP_off_name\":0.5,\"TP_off_con\":0.30000001192092898,\"TN_in\":56.747684478759769,\"TN_in_name\":65.0,\"TN_off\":11.31944465637207,\"TN_off_name\":15.0,\"TN_off_con\":12.0,\"andan_in\":47.361114501953128,\"andan_in_name\":58.0,\"andan_off\":0.78125,\"andan_off_name\":4.0,\"andan_off_con\":3.200000047683716,\"SS_in\":392.361083984375,\"SS_in_name\":315.0,\"SS_off\":1.5625,\"SS_off_name\":10.0,\"SS_off_con\":8.0,\"TDS_in\":668.4027709960938,\"TDS_in_name\":600.0,\"T\":12.399999618530274,\"pH\":7.222801208496094,\"Q_in\":3131.0,\"Q_in_name\":4166.669921875,\"continuity\":\"\",\"check_rise\":\"\",\"time_tips\":\"\",\"cs_continuity\":\"\",\"SVI\":\"[187.852223,188.139059]\",\"SVI_con\":170.0,\"SV\":\"[90.000000,92.000000]\",\"SV_con\":80.0,\"MLVSS\":\"[1987.000000,2064.000000]\",\"MLSS\":\"[4593.750000,3819.444336]\",\"MLVSS_wentai\":\"\",\"MLSS_wentai\":\"\",\"DO_ana\":\"[0.240000,0.230000]\",\"DO_O\":\"[2.100000,3.070313]\",\"DO_que\":\"[0.220000,0.200000]\",\"DO_que_wentai\":\"\",\"DO_ana_wentai\":\"\",\"DO_O_wentai\":\"\",\"BOD_in\":124.0,\"c\":17.911975860595704,\"b\":2.1851112842559816,\"BTP_wending\":\"\",\"JS_TN_wentai\":\"\",\"CL_P04_YCZ\":null,\"TP_LV\":null,\"TP_LV_continuity\":\"\"},{\"ID\":914504,\"TEST_DATE\":\"2024/02/07\",\"TEST_HOUR\":\"2024/02/07 15\",\"COD_in\":306.817138671875,\"COD_in_name\":630.0,\"COD_off\":16.84027671813965,\"COD_off_name\":40.0,\"COD_off_con\":32.0,\"TP_in\":6.92274284362793,\"TP_in_name\":7.099999904632568,\"TP_off\":0.10358799993991852,\"TP_off_name\":0.5,\"TP_off_con\":0.30000001192092898,\"TN_in\":56.747684478759769,\"TN_in_name\":65.0,\"TN_off\":11.31944465637207,\"TN_off_name\":15.0,\"TN_off_con\":12.0,\"andan_in\":47.361114501953128,\"andan_in_name\":58.0,\"andan_off\":0.78125,\"andan_off_name\":4.0,\"andan_off_con\":3.200000047683716,\"SS_in\":392.361083984375,\"SS_in_name\":315.0,\"SS_off\":1.5625,\"SS_off_name\":10.0,\"SS_off_con\":8.0,\"TDS_in\":668.4027709960938,\"TDS_in_name\":600.0,\"T\":12.399999618530274,\"pH\":7.222801208496094,\"Q_in\":3131.0,\"Q_in_name\":4166.669921875,\"continuity\":\"\",\"check_rise\":\"\",\"time_tips\":\"\",\"cs_continuity\":\"\",\"SVI\":\"[187.852223,188.139059]\",\"SVI_con\":170.0,\"SV\":\"[90.000000,92.000000]\",\"SV_con\":80.0,\"MLVSS\":\"[1987.000000,2064.000000]\",\"MLSS\":\"[4593.750000,3819.444336]\",\"MLVSS_wentai\":\"\",\"MLSS_wentai\":\"\",\"DO_ana\":\"[0.240000,0.230000]\",\"DO_O\":\"[2.100000,3.070313]\",\"DO_que\":\"[0.220000,0.200000]\",\"DO_que_wentai\":\"\",\"DO_ana_wentai\":\"\",\"DO_O_wentai\":\"\",\"BOD_in\":124.0,\"c\":17.911975860595704,\"b\":2.1851112842559816,\"BTP_wending\":\"\",\"JS_TN_wentai\":\"\",\"CL_P04_YCZ\":null,\"TP_LV\":null,\"TP_LV_continuity\":\"\"},{\"ID\":914505,\"TEST_DATE\":\"2024/02/07\",\"TEST_HOUR\":\"2024/02/07 15\",\"COD_in\":307.1006774902344,\"COD_in_name\":630.0,\"COD_off\":16.84027671813965,\"COD_off_name\":40.0,\"COD_off_con\":32.0,\"TP_in\":6.915509223937988,\"TP_in_name\":7.099999904632568,\"TP_off\":0.10358799993991852,\"TP_off_name\":0.5,\"TP_off_con\":0.30000001192092898,\"TN_in\":56.7881965637207,\"TN_in_name\":65.0,\"TN_off\":11.31944465637207,\"TN_off_name\":15.0,\"TN_off_con\":12.0,\"andan_in\":47.361114501953128,\"andan_in_name\":58.0,\"andan_off\":0.78125,\"andan_off_name\":4.0,\"andan_off_con\":3.200000047683716,\"SS_in\":392.361083984375,\"SS_in_name\":315.0,\"SS_off\":1.736111044883728,\"SS_off_name\":10.0,\"SS_off_con\":8.0,\"TDS_in\":662.61572265625,\"TDS_in_name\":600.0,\"T\":12.399999618530274,\"pH\":7.222801208496094,\"Q_in\":3397.0,\"Q_in_name\":4166.669921875,\"continuity\":\"\",\"check_rise\":\"\",\"time_tips\":\"\",\"cs_continuity\":\"\",\"SVI\":\"[187.852223,188.139059]\",\"SVI_con\":170.0,\"SV\":\"[90.000000,92.000000]\",\"SV_con\":80.0,\"MLVSS\":\"[1987.000000,2064.000000]\",\"MLSS\":\"[4656.250000,3991.319336]\",\"MLVSS_wentai\":\"\",\"MLSS_wentai\":\"\",\"DO_ana\":\"[0.240000,0.230000]\",\"DO_O\":\"[2.100000,3.045312]\",\"DO_que\":\"[0.220000,0.200000]\",\"DO_que_wentai\":\"\",\"DO_ana_wentai\":\"\",\"DO_O_wentai\":\"\",\"BOD_in\":124.0,\"c\":17.93071174621582,\"b\":2.1835522651672365,\"BTP_wending\":\"\",\"JS_TN_wentai\":\"\",\"CL_P04_YCZ\":null,\"TP_LV\":null,\"TP_LV_continuity\":\"\"}]}}";
- String dataJson = "{\"bot_id\":\"b00001\",\"exp_id\":\"721\",\"norm\":\"出水总磷\",\"feedback\":{\"6_3\":\"超标\",\"2_24\":\"是\"},\"session_id\":\"C20231025153549AC11FC2905668533\",\"generate_args\":{\"max_new_tokens\":1024,\"max_length\":4096,\"num_beams\":1,\"do_sample\":false,\"top_p\":1,\"temperature\":0},\"extra\":{\"rows\":[]}}";
- System.out.println(dataJson);
- PredictionsRequest request = PredictionsRequest.newBuilder()
- .setModelName("slibra_bot")
- .putInput("method", ByteString.copyFrom("decision_stream", "utf-8"))//推理
- .putInput("data", ByteString.copyFrom(dataJson, "utf-8"))
- .buildPartial();
- outputStream = response.getOutputStream();
- Iterator<PredictionResponse> predictions = stub.streamPredictions(request);
- while (predictions.hasNext()) {
- String responseStr = predictions.next().getPrediction().toStringUtf8();
- System.out.println(responseStr);
- responseStr = JSON.parseObject(responseStr).getString("message");
- if("complete".equals(responseStr)){
- System.out.println("结尾语句并且是非JSON,无需处理");
- }else{
- sb.append(responseStr);
- outputStream.write(responseStr.getBytes());
- outputStream.flush();
- }
- }
- } catch (IOException e) {
- throw new RuntimeException(e);
- } finally {
- System.out.println(sb.toString());
- // 关闭输出流
- try {
- outputStream.close();
- } catch (IOException e) {
- throw new RuntimeException(e);
- }finally {
- channel.shutdown();
- }
- }
- // return AjaxResult.success("ok");
- }
- }
|