main
liu 11 months ago
parent 6c03205fde
commit 54cff96d45

@ -0,0 +1,120 @@
package com.supervision.nxllm.controller;
import cn.hutool.core.io.FileUtil;
import cn.hutool.core.map.MapUtil;
import cn.hutool.core.util.StrUtil;
import com.supervision.springaidemo.domain.ModelMetric;
import com.supervision.springaidemo.dto.QARecordNodeDTO;
import com.supervision.springaidemo.service.ModelMetricService;
import com.supervision.springaidemo.service.NoteCheckRecordService;
import com.supervision.springaidemo.thread.RunCheckThread;
import com.supervision.springaidemo.thread.RunCheckThreadPool;
import com.supervision.springaidemo.util.RecordRegexUtil;
import com.supervision.springaidemo.util.WordReadUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.ai.chat.messages.AssistantMessage;
import org.springframework.ai.chat.messages.Message;
import org.springframework.ai.chat.messages.SystemMessage;
import org.springframework.ai.chat.messages.UserMessage;
import org.springframework.ai.chat.prompt.Prompt;
import org.springframework.ai.ollama.OllamaChatClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* ,
*/
@RestController
@Slf4j
@RequestMapping("exampleChat")
public class ExampleChatController {
private final OllamaChatClient chatClient;
@Autowired
private ModelMetricService modelMetricService;
@Autowired
private NoteCheckRecordService noteCheckRecordService;
@Autowired
public ExampleChatController(OllamaChatClient chatClient) {
this.chatClient = chatClient;
}
private static final String exampleTemplate = """
step by step,
step1:;
:
---
{context}
---
step2::
:
:{metricName}
true:{example};
false;
,,,empty
step3:,:
1.:true/false/empty
2.:,()true,!
3.:,,true/false,!
step4:json, JSONvalue,:
---
{"result":"结论", "originalContext":"笔录对应原话","reason":"原因"}
---
,!
""";
@GetMapping("exampleChat")
public void exampleChat() {
File file = FileUtil.file("/Users/flevance/Desktop/宁夏审讯大模型/裴金禄/行为人和受害人/裴金禄第一次.docx");
String context = WordReadUtil.readWord(file.getPath());
List<QARecordNodeDTO> qaList = RecordRegexUtil.recordRegex(context, "裴金禄");
for (QARecordNodeDTO qaRecordNodeDTO : qaList) {
// 只查入罪指标
List<ModelMetric> list = modelMetricService.lambdaQuery().likeRight(ModelMetric::getMetricCode, "RZ").list();
for (ModelMetric modelMetric : list) {
String systemPrompt = """
,,,,,,Think step by step
""";
List<Message> messages = new ArrayList<>(List.of(new SystemMessage(systemPrompt)));
Map<String, Object> param = new HashMap<>();
param.put("context", qaRecordNodeDTO.toString());
param.put("metricName", modelMetric.getMetricName());
param.put("example", StrUtil.format(modelMetric.getExample(), MapUtil.of("action", "裴金禄")));
String format = StrUtil.format(exampleTemplate, param);
List<Message> userMessageList = new ArrayList<>();
if (format.length() > 8000) {
log.info("分段提交");
for (String s : StrUtil.split(format, 6000)) {
userMessageList.add(new UserMessage(s));
userMessageList.add(new AssistantMessage("继续"));
}
userMessageList.remove(userMessageList.size() - 1);
} else {
userMessageList.add(new UserMessage(format));
}
messages.addAll(userMessageList);
RunCheckThread runCheck = new RunCheckThread("裴金禄尝试正则来做", chatClient, noteCheckRecordService, new Prompt(messages), FileUtil.getName(file), format, systemPrompt, modelMetric, 0);
RunCheckThreadPool.chatExecutor.submit(runCheck);
}
}
}
}
Loading…
Cancel
Save