- 移除 AiChatController 中的 PDF 读取相关逻辑与依赖- 新增 DocumentController 支持文件上传接口 - 新增 DocumentIngestionService 接口及实现,负责文档处理流程 - 抽象 DocumentParser 接口统一各类文档解析器行为 - 重构所有具体文档读取器(PDF、HTML、JSON 等)实现新的解析接口- 引入 MultipartFileResource 工具类以适配 Spring AI 读取器 - 添加 DocumentUploadResponse 响应模型类 - 各文档读取器增加对文件扩展名和 MIME 类型的支持判断
39 lines
1.5 KiB
Java
39 lines
1.5 KiB
Java
package com.hanserwei.chat.controller;
|
||
|
||
import com.hanserwei.chat.model.dto.ChatMessageDTO;
|
||
import com.hanserwei.chat.model.vo.AIResponse;
|
||
import com.hanserwei.chat.utils.ConversationContext;
|
||
import jakarta.annotation.Resource;
|
||
import lombok.extern.slf4j.Slf4j;
|
||
import org.springframework.ai.chat.client.ChatClient;
|
||
import org.springframework.ai.chat.memory.ChatMemory;
|
||
import org.springframework.http.MediaType;
|
||
import org.springframework.web.bind.annotation.*;
|
||
import reactor.core.publisher.Flux;
|
||
|
||
@Slf4j
|
||
@RestController
|
||
@RequestMapping("/ai")
|
||
public class AiChatController {
|
||
|
||
@Resource
|
||
private ChatClient dashScopeChatClient;
|
||
|
||
@PostMapping(path = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
|
||
public Flux<AIResponse> chatWithAi(@RequestBody ChatMessageDTO chatMessageDTO) {
|
||
log.info("会话ID:{}", chatMessageDTO.getConversionId());
|
||
ConversationContext.setConversationId(chatMessageDTO.getConversionId());
|
||
|
||
return dashScopeChatClient.prompt()
|
||
.user(chatMessageDTO.getMessage())
|
||
.advisors(p -> p.param(ChatMemory.CONVERSATION_ID, chatMessageDTO.getConversionId()))
|
||
.stream()
|
||
.chatResponse()
|
||
.mapNotNull(chatResponse -> AIResponse.builder()
|
||
.v(chatResponse.getResult().getOutput().getText())
|
||
.build())
|
||
.contextWrite(ctx -> ConversationContext.withConversationId(chatMessageDTO.getConversionId()))
|
||
.doFinally(signalType -> ConversationContext.clear());
|
||
}
|
||
}
|