Commit b61b4e32 authored by 赵灿灿's avatar 赵灿灿

修改配置信息

parent 05b75a64
Pipeline #21037 passed with stages
in 3 minutes and 2 seconds
......@@ -60,6 +60,7 @@ import java.util.concurrent.TimeUnit;
@RequestMapping("/api/langchain")
public class LangChainController {
@Autowired
private Auth auth;
......@@ -278,75 +279,80 @@ public class LangChainController {
//调用智能体
@GetMapping("/sseIntelligent")
public ResponseEntity<SseEmitter> sse(@RequestParam String chatMessage) {
// curl http://10.32.41.228:39080/v1/chat/completions -X POST
// -H "Content-Type:application/json;charset=UTF-8"
// -H "AI-API-CODE:usOPREkI33" -H "AI-APP-KEY:vXRDti1mJg"
// --data '{"stream":false,"model":"Qwen1.5-32B-NPU910B","messages":[{"role":"user","content":""}]} '
String urlAddr = "http://10.32.41.35:40517/scene_gateway/agent/6809d0895428476bb6789ad70c525c97";
BufferedReader reader = null;
public ResponseEntity<SseEmitter> sse(@RequestParam String chatMessage,@RequestParam String dialogId) {
logger.info("开始调用1");
//String urlAddr = "http://10.32.41.35:40517/scene_gateway/agent/6809d0895428476bb6789ad70c525c97";
String urlAddr = "http://10.32.41.35:40517/scene_gateway/agent/83f77143b09c461993dd9a7db403eb94";
SseEmitter emitter = new SseEmitter(0L);
QuestionRequest questionRequest=new QuestionRequest();
questionRequest.setKeyword(chatMessage);
questionRequest.setRequestId(getRequestId());
questionRequest.setDialogId(dialogId);
String params = JsonUtils.objectToJson(questionRequest);
new Thread(() -> {
HttpURLConnection connection = null;
try {
URL url = new URL(urlAddr);
// 建立链接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
String responseEntity="";
QuestionRequest questionRequest=new QuestionRequest();
questionRequest.setKeyword(chatMessage);
// (yyyyMMddHHmmssSSS)+6位随机数;
Random random = new Random();
Integer min = 100000; // 最小值(6位起始)
Integer max = 999999; // 最大值(6位结束)
// 生成范围:min <= num <= max
Integer randomNum = random.nextInt(max - min + 1) + min;
String currentDay = DateTool.format(new Date(), "yyyyMMddHHmmssSSS");
connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");
connection.setRequestProperty("Accept", "text/event-stream");
connection.setRequestProperty("Content-type", "application/json; charset=UTF-8");
connection.setRequestProperty("AuthToken", "4009fe23e6b648539792330c14f5ed8e");
connection.setRequestProperty("Cache-Control", "no-cache");
connection.setRequestProperty("Connection", "keep-alive");
questionRequest.setRequestId(currentDay+randomNum.toString());
questionRequest.setDialogId(currentDay+randomNum.toString());
String params = JsonUtils.objectToJson(questionRequest);
//connection.setRequestProperty("AuthToken", "4009fe23e6b648539792330c14f5ed8e");
connection.setRequestProperty("AuthToken", "fc40db5b7abe47dabfe1899e61fde2d7");
// 允许输入和输出
connection.setDoInput(true);
connection.setDoOutput(true);
// 设置超时为0,表示无限制
connection.setConnectTimeout(0);
connection.setReadTimeout(0);
// 传参
//String params = "prompt=哈哈哈哈";
// 写入POST数据
DataOutputStream out = new DataOutputStream(connection.getOutputStream());
out.write(params.getBytes(StandardCharsets.UTF_8));
out.flush();
out.close();
// 读取SSE事件
reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), StandardCharsets.UTF_8));
logger.info(params);
try (OutputStream os = connection.getOutputStream()) {
os.write(params.getBytes(StandardCharsets.UTF_8));
os.flush();
}
logger.info("开始调用2");
// 检查响应码
int responseCode = connection.getResponseCode();
if (responseCode != HttpURLConnection.HTTP_OK) {
emitter.completeWithError(new RuntimeException("SSE 连接失败: " + responseCode));
return;
}
logger.info("开始调用3");
// 持续读取 SSE 数据流
try (BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
String line;
SseEmitter emitter = new SseEmitter();
while ((line = reader.readLine()) != null) {
System.out.println(line);
emitter.send(SseEmitter.event().data(line));
logger.info(line);
if (!line.startsWith("data:CALLBACK#")) {
if (line.startsWith("data:")) {
String data = line.substring(5).trim();
if("stop".equals(data))
{
emitter.send(SseEmitter.event().data("stop"),MediaType.parseMediaType("application/json; charset=UTF-8"));
}else
{
emitter.send(SseEmitter.event().data(data), MediaType.parseMediaType("application/json; charset=UTF-8"));
}
reader.close();
System.out.println(" __stop__");
emitter.send(SseEmitter.event().data(" __stop__"));
emitter.complete();
// 断开链接
connection.disconnect();
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_EVENT_STREAM_VALUE)
.body(emitter);
}
}
}
}
emitter.complete(); // 流结束
} catch (Exception e) {
emitter.completeWithError(e);
logger.info(e.getMessage());
e.printStackTrace();
} finally {
if (connection != null) {
connection.disconnect();
}
}
}).start();
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_TYPE, MediaType.TEXT_EVENT_STREAM_VALUE)
.body( null);
//IoUtils.copy(reader);
}
.body(emitter);
}
......@@ -412,7 +418,7 @@ public class LangChainController {
//调用大模型接口
@GetMapping("/sseQwen")
public ResponseEntity<SseEmitter> sseBigTwo(@RequestParam String chatMessage,@RequestParam String sessionId) {
public ResponseEntity<SseEmitter> sseQwen(@RequestParam String chatMessage,@RequestParam String sessionId) {
String history= redisTool.get(sessionId);
List<Map<String,Object>> historyList=new ArrayList<>();
......@@ -474,6 +480,7 @@ public class LangChainController {
while ((line = reader.readLine()) != null) {
if (line.startsWith("data: ")) {
String data = line.substring(5).trim();
logger.info(data);
QwenLine qwenLine= JsonUtils.jsonToObject(data,QwenLine.class);
String lineContent=qwenLine.getChoices().get(0).getDelta().getContent();
String lineFinish=qwenLine.getChoices().get(0).getFinish_reason();
......@@ -491,8 +498,6 @@ public class LangChainController {
contentAssistant.append(lineContent);
emitter.send(SseEmitter.event().data(lineContent),MediaType.parseMediaType("application/json; charset=UTF-8"));
}
logger.info(line);
logger.info(lineContent);
// 将数据转发给前端
}
}
......@@ -516,7 +521,7 @@ public class LangChainController {
private static final CloseableHttpClient httpClient;
private static final Logger log = LoggerFactory.getLogger(LangChainController.class);
static {
PoolingHttpClientConnectionManager connManager = new PoolingHttpClientConnectionManager();
connManager.setMaxTotal(100);
......@@ -561,8 +566,8 @@ public class LangChainController {
}).start();
// 超时和完成回调
emitter.onTimeout(() -> log.warn("SSE连接超时"));
emitter.onCompletion(() -> log.info("SSE连接完成"));
emitter.onTimeout(() -> logger.warn("SSE连接超时"));
emitter.onCompletion(() -> logger.info("SSE连接完成"));
return emitter;
}
......@@ -599,7 +604,7 @@ public class LangChainController {
// 统一异常处理
private void handleException(Exception e, SseEmitter emitter) {
log.error("API调用异常", e);
logger.error("API调用异常", e);
if (e instanceof SocketTimeoutException) {
emitter.completeWithError(new RuntimeException("连接DeepSeek服务超时"));
} else {
......@@ -607,10 +612,34 @@ public class LangChainController {
}
}
//获取sessionId
@GetMapping("/getSessionId")
public Result getSessionId() {
return Result.successData(UUID.randomUUID().toString().replace("-", ""));
}
//获取requestId
public String getRequestId() {
// (yyyyMMddHHmmssSSS)+6位随机数;
Random random = new Random();
Integer min = 100000; // 最小值(6位起始)
Integer max = 999999; // 最大值(6位结束)
// 生成范围:min <= num <= max
Integer randomNum = random.nextInt(max - min + 1) + min;
String currentDay = DateTool.format(new Date(), "yyyyMMddHHmmssSSS");
return currentDay+randomNum.toString();
}
//获取会话ID
@GetMapping("/getDialogId")
public Result getDialogId() {
// (yyyyMMddHHmmssSSS)+6位随机数;
Random random = new Random();
Integer min = 100000; // 最小值(6位起始)
Integer max = 999999; // 最大值(6位结束)
// 生成范围:min <= num <= max
Integer randomNum = random.nextInt(max - min + 1) + min;
String currentDay = DateTool.format(new Date(), "yyyyMMddHHmmssSSS");
return Result.successData(currentDay+randomNum.toString());
}
}
......@@ -110,7 +110,8 @@ require(['jquery', 'vue', 'utils', 'echarts', 'global'], function ($, Vue, utils
// 会话相关方法
async getSessionId() {
try {
const response = await fetch('../../api/langchain/getSessionId');
//const response = await fetch('../../api/langchain/getSessionId');
const response = await fetch('../../api/langchain/getDialogId');
const dataJson = await response.json();
this.sessionId = dataJson.data;
} catch (error) {
......@@ -185,16 +186,14 @@ require(['jquery', 'vue', 'utils', 'echarts', 'global'], function ($, Vue, utils
messagesDiv.scrollTop = messagesDiv.scrollHeight;
}
});
// 连接SSE
this.currentEventSource = new EventSource('../../api/langchain/sseBigTwo?chatMessage=' + encodeURIComponent(chatMessage) + "&sessionId=" + this.sessionId);
this.currentEventSource = new EventSource('../../api/langchain/sseIntelligent?chatMessage=' + encodeURIComponent(chatMessage) + "&dialogId=" + this.sessionId);
let responseText = '';
this.currentEventSource.onmessage = (event) => {
const data = JSON.parse(event.data);
const content = data.dataToSend[1].data;
if (content !== "stop") {
responseText += content;
this.messages[aiMessageIndex].content = responseText;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment