大模型聊天:SSE框架实现流式结果响应

一、聊天接口定义

支持区分流式响应和结构化相应,用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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值