feat: mcp开启后才执行工具调用

This commit is contained in:
ageerle
2025-04-24 10:31:58 +08:00
parent 8a89d9eb9c
commit 8fc7ad0359
5 changed files with 18 additions and 21 deletions

View File

@@ -4,8 +4,8 @@ import lombok.Getter;
@Getter
public enum BillingType {
TOKEN("1", "token扣费"), // token扣费
TIMES("2", "次数扣费"); // 次数扣费
TOKEN("1", "token扣费"),
TIMES("2", "次数扣费");
private final String code;
private final String description;

View File

@@ -4,9 +4,9 @@ import lombok.Getter;
@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 @@ public enum ChatModeType {
this.description = description;
}
public String getCode() {
return code;
}
public String getDescription() {
return description;
}
}

View File

@@ -3,7 +3,7 @@ package org.ruoyi.chat.enums;
import lombok.Getter;
/**
* 描述:
* 描述:是否显示
*
* @author ageerle@163.com
* date 2025/4/10

View File

@@ -15,6 +15,7 @@ import org.springframework.ai.chat.client.ChatClient;
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;
@@ -29,6 +30,10 @@ public class OpenAIServiceImpl implements IChatService {
private OpenAiStreamClient openAiStreamClient;
@Value("${spring.ai.mcp.client.enabled}")
private Boolean enabled;
private final ChatClient chatClient;
public OpenAIServiceImpl(ChatClient.Builder chatClientBuilder, List<McpSyncClient> mcpSyncClients) {
@@ -43,10 +48,12 @@ public class OpenAIServiceImpl implements IChatService {
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()

View File

@@ -80,12 +80,11 @@ public class SseServiceImpl implements ISseService {
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 @@ public class SseServiceImpl implements ISseService {
count++;
RedisUtils.setCacheObject(redisKey, count);
}
}
/**
@@ -145,8 +143,7 @@ public class SseServiceImpl implements ISseService {
if(StringUtils.isEmpty(sysPrompt)){
sysPrompt ="你是一个由RuoYI-AI开发的人工智能助手名字叫熊猫助手。你擅长中英文对话能够理解并处理各种问题提供安全、有帮助、准确的回答。" +
"当前时间:"+ DateUtils.getDate()+
"#注意:回复之前注意结合上下文和工具返回内容。";
"#注意:回复之前注意结合上下文和工具返回内容进行回复";
}
// 设置系统默认提示词
Message sysMessage = Message.builder().content(sysPrompt).role(Message.Role.SYSTEM).build();