ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/BillingType.java
@@ -4,8 +4,8 @@ @Getter public enum BillingType { TOKEN("1", "token扣费"), // token扣费 TIMES("2", "次数扣费"); // 次数扣费 TOKEN("1", "token扣费"), TIMES("2", "次数扣费"); private final String code; private final String description; ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/ChatModeType.java
@@ -4,9 +4,9 @@ @Getter public enum ChatModeType { OLLAMA("ollama", "本地部署模型"), // token扣费 CHAT("chat", "中转模型"), // 次数扣费 VECTOR("vector", "知识库向量模型"); // 次数扣费 OLLAMA("ollama", "本地部署模型"), CHAT("chat", "中转模型"), VECTOR("vector", "知识库向量模型"); private final String code; private final String description; @@ -16,11 +16,4 @@ this.description = description; } public String getCode() { return code; } public String getDescription() { return description; } } ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/enums/DisplayType.java
@@ -3,7 +3,7 @@ import lombok.Getter; /** * 描述: * 描述:是否显示 * * @author ageerle@163.com * date 2025/4/10 ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/OpenAIServiceImpl.java
@@ -15,6 +15,7 @@ import org.springframework.ai.mcp.SyncMcpToolCallbackProvider; import org.springframework.ai.openai.OpenAiChatOptions; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import java.util.List; @@ -28,6 +29,10 @@ private IChatModelService chatModelService; private OpenAiStreamClient openAiStreamClient; @Value("${spring.ai.mcp.client.enabled}") private Boolean enabled; private final ChatClient chatClient; @@ -43,10 +48,12 @@ public SseEmitter chat(ChatRequest chatRequest,SseEmitter emitter) { ChatModelVo chatModelVo = chatModelService.selectModelByName(chatRequest.getModel()); openAiStreamClient = ChatConfig.createOpenAiStreamClient(chatModelVo.getApiHost(), chatModelVo.getApiKey()); String toolString = mcpChat(chatRequest.getPrompt()); Message userMessage = Message.builder().content("工具返回信息:"+toolString).role(Message.Role.USER).build(); List<Message> messages = chatRequest.getMessages(); messages.add(userMessage); if (enabled) { String toolString = mcpChat(chatRequest.getPrompt()); Message userMessage = Message.builder().content("工具返回信息:"+toolString).role(Message.Role.USER).build(); messages.add(userMessage); } SSEEventSourceListener listener = new SSEEventSourceListener(emitter); ChatCompletion completion = ChatCompletion .builder() ruoyi-modules/ruoyi-chat/src/main/java/org/ruoyi/chat/service/chat/impl/SseServiceImpl.java
@@ -80,12 +80,11 @@ checkUnauthenticatedUserChatLimit(request); }else { LocalCache.CACHE.put("userId", chatCostService.getUserId()); chatRequest.setUserId(chatCostService.getUserId()); // 保存消息记录 并扣除费用 chatCostService.deductToken(chatRequest); } // 根据模型名称前缀调用不同的处理逻辑 // 根据模型分类调用不同的处理逻辑 switchModelAndHandle(chatRequest,sseEmitter); } catch (Exception e) { log.error(e.getMessage(),e); @@ -119,7 +118,6 @@ count++; RedisUtils.setCacheObject(redisKey, count); } } /** @@ -145,8 +143,7 @@ if(StringUtils.isEmpty(sysPrompt)){ sysPrompt ="你是一个由RuoYI-AI开发的人工智能助手,名字叫熊猫助手。你擅长中英文对话,能够理解并处理各种问题,提供安全、有帮助、准确的回答。" + "当前时间:"+ DateUtils.getDate()+ "#注意:回复之前注意结合上下文和工具返回内容。"; "#注意:回复之前注意结合上下文和工具返回内容进行回复。"; } // 设置系统默认提示词 Message sysMessage = Message.builder().content(sysPrompt).role(Message.Role.SYSTEM).build();