From 3749555542556cd63f21c29cc6cb20bfbdef9e4c Mon Sep 17 00:00:00 2001 From: Administrator <15274802129@163.com> Date: Mon, 01 Sep 2025 14:13:43 +0800 Subject: [PATCH] refactor(ai): 重构阿里云大模型调用逻辑 --- src/main/java/cc/mrbird/febs/ai/controller/memberTalk/ApiMemberTalkController.java | 81 +++++++++++++++++++++++++++++++++++----- 1 files changed, 71 insertions(+), 10 deletions(-) diff --git a/src/main/java/cc/mrbird/febs/ai/controller/memberTalk/ApiMemberTalkController.java b/src/main/java/cc/mrbird/febs/ai/controller/memberTalk/ApiMemberTalkController.java index 66212da..48488d4 100644 --- a/src/main/java/cc/mrbird/febs/ai/controller/memberTalk/ApiMemberTalkController.java +++ b/src/main/java/cc/mrbird/febs/ai/controller/memberTalk/ApiMemberTalkController.java @@ -1,21 +1,23 @@ package cc.mrbird.febs.ai.controller.memberTalk; -import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkAnswerDto; -import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkDto; +import cc.mrbird.febs.ai.req.memberTalk.*; +import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkItemVo; +import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkReloadVo; +import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkStreamVo; import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkVo; import cc.mrbird.febs.ai.service.AiMemberTalkService; import cc.mrbird.febs.common.entity.FebsResponse; -import io.swagger.annotations.Api; -import io.swagger.annotations.ApiOperation; -import io.swagger.annotations.ApiResponse; -import io.swagger.annotations.ApiResponses; +import io.swagger.annotations.*; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.validation.annotation.Validated; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; +import reactor.core.publisher.Flux; + +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; +import java.util.List; /** * @author Administrator @@ -42,6 +44,17 @@ } + @ApiOperation(value = "再练一次(重新回答)", notes = "再练一次(重新回答)") + @ApiResponses({ + @ApiResponse(code = 200, message = "success", response = ApiMemberTalkReloadVo.class) + }) + @PostMapping(value = "/reload") + public FebsResponse reload(@RequestBody @Validated ApiMemberTalkReloadDto dto) { + + return aiMemberTalkService.reload(dto); + } + + @ApiOperation(value = "回答", notes = "回答") @ApiResponses({ @ApiResponse(code = 200, message = "success", response = ApiMemberTalkVo.class) @@ -51,4 +64,52 @@ return aiMemberTalkService.answer(dto); } + + @ApiOperation(value = "对话记录分页查询", notes = "对话记录分页查询") + @ApiResponses({ + @ApiResponse(code = 200, message = "success", response = ApiMemberTalkItemVo.class) + }) + @PostMapping(value = "/historyPage") + public FebsResponse historyPage(@RequestBody @Validated ApiMemberTalkItemPageDto dto) { + + return aiMemberTalkService.historyPage(dto); + } + + @PostMapping("/start-stream") + @ApiOperation("开始AI对话(流式)") + @ApiResponses({ + @ApiResponse(code = 200, message = "流式响应", response = ApiMemberTalkVo.class), + @ApiResponse(code = 500, message = "系统错误") + }) + public SseEmitter startStream( + @ApiParam(value = "对话请求参数", required = true) + @RequestBody ApiMemberTalkDto dto) { + + SseEmitter emitter = new SseEmitter(0L); // 0表示永不超时 + + aiMemberTalkService.startStream(dto, response -> { + try { + emitter.send(SseEmitter.event().data(response)); + // 如果包含report,说明是最终结果,关闭连接 + if (response.getCode() != null && + "200".equals(response.getCode())) { + emitter.complete(); + } + } catch (IOException e) { + emitter.completeWithError(e); + } + }); + + return emitter; + } + + // 修改接口定义 + @ApiOperation("开始AI对话(流式)") + @ApiResponses({ + @ApiResponse(code = 200, message = "流式响应", response = ApiMemberTalkStreamVo.class), + }) + @GetMapping("/answer-stream") + public Flux<FebsResponse> answerStream(@RequestParam String question) { + return aiMemberTalkService.answerStream(question); + } } -- Gitblit v1.9.1