一、聊天接口定义
支持区分流式响应和结构化相应,用Object类型返回!!!
@PostMapping(value = "/completions")
public Object chatCompletions(ChatParam chatParam, HttpServletResponse httpServletResponse) {
// 添加response header全链路日志ID
httpServletResponse.setHeader("X-Request-ID", MDC.get(MDC_TRACK_ID));
log.info("chatCompletions begin,param:{}", JSON.toJSONString(chatParam));
try {
AssertUtils.notNull(chatParam, "入参不能为空");
Object response = chatService.chatCompletions(chatParam);
log.info("chatCompletions end!!!");
return response;
} catch (Exception e) {
log.error("chatCompletions异常:{}", e.getMessage(), e);
if (e instanceof BusinessException) {
BusinessException be = (BusinessException) e;
return ResultUtil.buildResultFail(be);
}
return ResultUtil.buildResult(BaseResultCode.SYSTEM_ERROR);
}
}
二、SSE函数式接收器
@Slf4j
public class SseServiceBuilder {
/**
* 超时时间,默认30S
*/
private static final Duration TIME_OUT = Duration.ofSeconds(30L);
/**
* 线程池参数
*/
private static final ExecutorService SSE_THREAD_POOL =
new ThreadPoolExecutor(Runtime.getRuntime().availableProcessors(), Runtime.getRuntime().availableProcessors() * 2, 60,
TimeUnit.SECONDS, new LinkedBlockingQueue<>(100), new ThreadFactoryBuilder().setNameFormat("sse-pool-%d").build(),
RejectPolicy.CALLER_RUNS.getValue());
/**
* 创建SSE任务,要求是传入的sseConsumer逻辑体式同步的
*
* @param duration 时长
* @param