package cc.mrbird.febs.ai.controller.talk;
|
|
import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkAnswerDto;
|
import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkDto;
|
import cc.mrbird.febs.ai.req.memberTalk.ApiMemberTalkItemPageDto;
|
import cc.mrbird.febs.ai.req.talk.AiTalkAnswerStream;
|
import cc.mrbird.febs.ai.req.talk.ApiTalkDto;
|
import cc.mrbird.febs.ai.req.talk.ApiTalkItemPageDto;
|
import cc.mrbird.febs.ai.req.talk.ApiTalkPageDto;
|
import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkItemVo;
|
import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkStreamVo;
|
import cc.mrbird.febs.ai.res.memberTalk.ApiMemberTalkVo;
|
import cc.mrbird.febs.ai.res.talk.ApiTalkItemPageVo;
|
import cc.mrbird.febs.ai.res.talk.ApiTalkPageVo;
|
import cc.mrbird.febs.ai.res.talk.ApiTalkQuestionVo;
|
import cc.mrbird.febs.ai.res.talk.ApiTalkVo;
|
import cc.mrbird.febs.ai.service.AiMemberTalkService;
|
import cc.mrbird.febs.ai.service.AiTalkService;
|
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 org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
|
import reactor.core.publisher.Flux;
|
|
import java.io.IOException;
|
|
/**
|
* @author Administrator
|
*/
|
@Slf4j
|
@Validated
|
@RestController
|
@RequiredArgsConstructor
|
@RequestMapping(value = "/api/ai/talk")
|
@Api(value = "ApiAiTalkController", tags = "AI-灵通")
|
public class ApiAiTalkController {
|
|
private final AiTalkService aiTalkService;
|
|
@ApiOperation(value = "题目轮播", notes = "题目轮播")
|
@ApiResponses({
|
@ApiResponse(code = 200, message = "success", response = ApiTalkQuestionVo.class)
|
})
|
@GetMapping(value = "/questionList")
|
public FebsResponse questionList() {
|
|
return aiTalkService.questionList();
|
}
|
|
@ApiOperation(value = "用户AI问答", notes = "用户AI问答")
|
@ApiResponses({
|
@ApiResponse(code = 200, message = "success", response = ApiTalkVo.class)
|
})
|
@PostMapping(value = "/talkOpen")
|
public FebsResponse talkOpen(@RequestBody @Validated ApiTalkDto dto) {
|
|
return aiTalkService.talkOpen(dto);
|
}
|
|
@ApiOperation(value = "问答记录分页查询", notes = "问答记录分页查询")
|
@ApiResponses({
|
@ApiResponse(code = 200, message = "success", response = ApiTalkPageVo.class)
|
})
|
@PostMapping(value = "/talkList")
|
public FebsResponse talkList(@RequestBody @Validated ApiTalkPageDto dto) {
|
|
return aiTalkService.talkList(dto);
|
}
|
|
@ApiOperation(value = "问答记录详情分页查询", notes = "问答记录详情分页查询")
|
@ApiResponses({
|
@ApiResponse(code = 200, message = "success", response = ApiTalkItemPageVo.class)
|
})
|
@PostMapping(value = "/historyPage")
|
public FebsResponse historyPage(@RequestBody @Validated ApiTalkItemPageDto dto) {
|
|
return aiTalkService.historyPage(dto);
|
}
|
|
@ApiOperation("提问AI(流式)")
|
@ApiResponses({
|
@ApiResponse(code = 200, message = "流式响应", response = ApiMemberTalkStreamVo.class),
|
})
|
@GetMapping("/answer-stream")
|
public Flux<FebsResponse> answerStream(@RequestParam String question) {
|
|
return aiTalkService.answerStream(question);
|
}
|
|
@ApiOperation("提问AI(流式)V2")
|
@ApiResponses({
|
@ApiResponse(code = 200, message = "流式响应", response = ApiMemberTalkStreamVo.class),
|
})
|
@PostMapping("/answer-streamV2")
|
public Flux<FebsResponse> answerStreamV2(@RequestBody @Validated AiTalkAnswerStream dto) {
|
if (StrUtil.isEmpty(dto.getQuestion())){
|
return Flux.just(new FebsResponse().fail().message("请输入问题"));
|
}
|
return aiTalkService.answerStreamV2(dto);
|
}
|
}
|