From 3d762c09e6b25a87c8f4c5e026ed6de255b43377 Mon Sep 17 00:00:00 2001 From: Administrator <15274802129@163.com> Date: Tue, 02 Sep 2025 14:54:37 +0800 Subject: [PATCH] feat(ai): 实现 AI 流式回答功能 --- src/main/java/cc/mrbird/febs/ai/controller/memberTalk/ApiMemberTalkStreamController.java | 30 ++++++++++++++++++++++++++++++ 1 files changed, 30 insertions(+), 0 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/ai/controller/memberTalk/ApiMemberTalkStreamController.java b/src/main/java/cc/mrbird/febs/ai/controller/memberTalk/ApiMemberTalkStreamController.java index 277d56e..b482022 100644 --- a/src/main/java/cc/mrbird/febs/ai/controller/memberTalk/ApiMemberTalkStreamController.java +++ b/src/main/java/cc/mrbird/febs/ai/controller/memberTalk/ApiMemberTalkStreamController.java @@ -1,18 +1,29 @@ package cc.mrbird.febs.ai.controller.memberTalk; import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkItemPageDto; +import cc.mrbird.febs.ai.req.memberTalkStream.AiTalkAnswerStreamDto; +import cc.mrbird.febs.ai.req.memberTalkStream.ApiMemberTalkAnswerSavaDto; import cc.mrbird.febs.ai.req.memberTalkStream.ApiMemberTalkReloadStreamDto; import cc.mrbird.febs.ai.req.memberTalkStream.ApiMemberTalkStreamDto; +import cc.mrbird.febs.ai.req.talk.AiTalkAnswerStream; import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkItemVo; import cc.mrbird.febs.ai.res.memberTalkStream.ApiMemberTalkReloadStreamVo; import cc.mrbird.febs.ai.res.memberTalkStream.ApiMemberTalkStreamVo; import cc.mrbird.febs.ai.service.ApiMemberTalkStreamService; +import cc.mrbird.febs.ai.strategy.enumerates.LlmStrategyEnum; +import cc.mrbird.febs.ai.strategy.param.LlmStrategyDto; import cc.mrbird.febs.common.entity.FebsResponse; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.core.util.StrUtil; +import com.alibaba.dashscope.common.Role; import io.swagger.annotations.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; +import reactor.core.publisher.Flux; + +import java.util.ArrayList; /** * @author Administrator @@ -56,4 +67,23 @@ return apiMemberTalkStreamService.historyPage(dto); } + @ApiOperation("回答(流式)") + @ApiResponses({ + @ApiResponse(code = 200, message = "流式响应", response = cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkStreamVo.class), + }) + @PostMapping("/answer") + public Flux<FebsResponse> answer(@RequestBody @Validated AiTalkAnswerStreamDto dto) { + if (StrUtil.isEmpty(dto.getId()) || StrUtil.isEmpty(dto.getReqContext())|| StrUtil.isEmpty(dto.getReqContext())){ + return Flux.just(new FebsResponse().fail().message("参数异常")); + } + return apiMemberTalkStreamService.answer(dto); + } + + @ApiOperation(value = "保存答案", notes = "保存答案") + @PostMapping(value = "/saveAnswer") + public FebsResponse saveAnswer(@RequestBody @Validated ApiMemberTalkAnswerSavaDto dto) { + + return apiMemberTalkStreamService.saveAnswer(dto); + } + } -- Gitblit v1.9.1