From 0325d413502474062e1d400df319bfd390e94956 Mon Sep 17 00:00:00 2001 From: Administrator <15274802129@163.com> Date: Wed, 17 Sep 2025 16:12:40 +0800 Subject: [PATCH] feat(ai): 新增 AI 陪练相关功能 --- src/main/java/cc/mrbird/febs/ai/controller/memberTalk/ApiMemberTalkStreamController.java | 65 +++++++++++++++++++++++++++++--- 1 files changed, 58 insertions(+), 7 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..3eb6323 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,21 @@ package cc.mrbird.febs.ai.controller.memberTalk; import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkItemPageDto; -import cc.mrbird.febs.ai.req.memberTalkStream.ApiMemberTalkReloadStreamDto; -import cc.mrbird.febs.ai.req.memberTalkStream.ApiMemberTalkStreamDto; +import cc.mrbird.febs.ai.req.memberTalkStream.*; import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkItemVo; +import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkMemberAnswerSavaVo; +import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkStreamVoOld; 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.service.AiMemberTalkStreamService; import cc.mrbird.febs.common.entity.FebsResponse; +import cn.hutool.core.util.StrUtil; 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; /** * @author Administrator @@ -25,7 +28,7 @@ @Api(value = "ApiMemberTalkStreamController", tags = "AI-用户陪练(流式)") public class ApiMemberTalkStreamController { - private final ApiMemberTalkStreamService apiMemberTalkStreamService; + private final AiMemberTalkStreamService aiMemberTalkStreamService; @ApiOperation("生成题目") @ApiResponses({ @@ -33,7 +36,7 @@ }) @PostMapping("/start") public FebsResponse start(@RequestBody @Validated ApiMemberTalkStreamDto dto) { - return apiMemberTalkStreamService.start(dto); + return aiMemberTalkStreamService.start(dto); } @ApiOperation(value = "再练一次(重新回答)", notes = "再练一次(重新回答)") @@ -43,7 +46,7 @@ @PostMapping(value = "/reload") public FebsResponse reload(@RequestBody @Validated ApiMemberTalkReloadStreamDto dto) { - return apiMemberTalkStreamService.reload(dto); + return aiMemberTalkStreamService.reload(dto); } @ApiOperation(value = "对话记录分页查询", notes = "对话记录分页查询") @@ -53,7 +56,55 @@ @PostMapping(value = "/historyPage") public FebsResponse historyPage(@RequestBody @Validated ApiMemberTalkItemPageDto dto) { - return apiMemberTalkStreamService.historyPage(dto); + return aiMemberTalkStreamService.historyPage(dto); + } + + @ApiOperation(value = "保存用户回答", notes = "保存答案") + @ApiResponses({ + @ApiResponse(code = 200, message = "success", response = ApiMemberTalkMemberAnswerSavaVo.class) + }) + @PostMapping(value = "/saveMemberAnswer") + public FebsResponse saveMemberAnswer(@RequestBody @Validated ApiMemberTalkMemberAnswerSavaDto dto) { + + return aiMemberTalkStreamService.saveMemberAnswer(dto); + } + + @ApiOperation("回答(流式)") + @ApiResponses({ + @ApiResponse(code = 200, message = "流式响应", response = ApiMemberTalkStreamVoOld.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 aiMemberTalkStreamService.answer(dto); + } + + @ApiOperation("回答(流式)") + @ApiResponses({ + @ApiResponse(code = 200, message = "流式响应", response = ApiMemberTalkStreamVoOld.class), + }) + @PostMapping("/answerV2") + public Flux<FebsResponse> answerV2(@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 aiMemberTalkStreamService.answerV2(dto); + } + + @ApiOperation(value = "保存AI回答", notes = "保存AI回答") + @PostMapping(value = "/saveAnswer") + public FebsResponse saveAnswer(@RequestBody @Validated ApiMemberTalkAnswerSavaDto dto) { + + return aiMemberTalkStreamService.saveAnswer(dto); + } + + @ApiOperation(value = "保存AI陪练总结报告", notes = "保存AI陪练总结报告") + @PostMapping(value = "/saveReport") + public FebsResponse saveReport(@RequestBody @Validated ApiMemberTalkReportSavaDto dto) { + + return aiMemberTalkStreamService.saveReport(dto); } } -- Gitblit v1.9.1