3 Commits

Author SHA1 Message Date
ageerle
0b1925cc62 fix(sql): 修复sql脚本 2025-10-13 14:50:28 +08:00
ageerle
3c237f45ad fix(chat): 修复依赖版本升级导致缺少类错误 2025-10-13 14:40:05 +08:00
ageerle
9500304b77 fix(chat): 修复依赖版本升级导致缺少类错误 2025-10-13 14:37:44 +08:00
6 changed files with 40 additions and 39 deletions

View File

@@ -26,11 +26,18 @@ public class ChatRequest {
*/
private String prompt;
/**
* 系统提示词
*/
private String sysPrompt;
/**
* 消息id
*/
private Long messageId;
/**
* 是否开启流式对话
*/

View File

@@ -16,7 +16,7 @@
<maven.compiler.source>17</maven.compiler.source>
<maven.compiler.target>17</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-ai.version>1.0.0</spring-ai.version>
<spring-ai.version>1.0.0-M7</spring-ai.version>
</properties>
<dependencyManagement>

View File

@@ -110,7 +110,7 @@ public class ChatCostServiceImpl implements IChatCostService {
BigDecimal numberCost = unitPrice
.multiply(BigDecimal.valueOf(batches))
.setScale(2, RoundingMode.HALF_UP);
log.debug("deductToken->按token扣费结算token数量: {},批次数: {},单价: {},费用: {}",
log.debug("deductToken->按token扣费结算token数量: {},批次数: {},单价: {},费用: {}",
billable, batches, unitPrice, numberCost);
try {
@@ -137,7 +137,7 @@ public class ChatCostServiceImpl implements IChatCostService {
chatToken.setUserId(chatRequest.getUserId());
chatToken.setToken(totalTokens);
chatTokenService.editToken(chatToken);
// 虽未扣费但要更新消息的基本信息实际token数、计费类型等
updateMessageWithoutBilling(chatRequest, tokens, chatModelVo.getModelType());
}
@@ -167,12 +167,6 @@ public class ChatCostServiceImpl implements IChatCostService {
chatMessageBo.setContent(chatRequest.getPrompt().trim());
chatMessageBo.setModelName(chatRequest.getModel());
// // 基础消息信息计费相关数据tokens、费用、计费类型等在扣费时统一设置
// chatMessageBo.setTotalTokens(0); // 初始设为0扣费时更新
// chatMessageBo.setDeductCost(null);
// chatMessageBo.setBillingType(null);
// chatMessageBo.setRemark("用户消息");
try {
chatMessageService.insertByBo(chatMessageBo);
// 保存成功后将生成的消息ID设置到ChatRequest中
@@ -444,11 +438,11 @@ public class ChatCostServiceImpl implements IChatCostService {
preCheckBalance(chatRequest);
return true; // 预检查通过,余额充足
} catch (ServiceException e) {
log.debug("checkBalanceSufficient->余额不足用户ID: {}, 模型: {}, 错误: {}",
log.debug("checkBalanceSufficient->余额不足用户ID: {}, 模型: {}, 错误: {}",
chatRequest.getUserId(), chatRequest.getModel(), e.getMessage());
return false; // 预检查失败,余额不足
} catch (Exception e) {
log.error("checkBalanceSufficient->检查余额时发生异常用户ID: {}, 模型: {}",
log.error("checkBalanceSufficient->检查余额时发生异常用户ID: {}, 模型: {}",
chatRequest.getUserId(), chatRequest.getModel(), e);
return false; // 异常情况视为余额不足,保守处理
}

View File

@@ -43,7 +43,7 @@ public class OpenAIServiceImpl implements IChatService {
this.chatClient = chatClientBuilder
.defaultOptions(
OpenAiChatOptions.builder().model("gpt-4o-mini").build())
.defaultToolCallbacks(new SyncMcpToolCallbackProvider(mcpSyncClients))
.defaultTools(new SyncMcpToolCallbackProvider(mcpSyncClients))
.build();
}

View File

@@ -19,28 +19,36 @@ insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component,
values(1954103099019309061, 'MCP导出', 1954103099019309056, '5', '#', '', 1, 0, 'F', '0', '0', 'operator:mcpInfo:export', '#', 103, 1, sysdate(), null, null, '');
-- mcp_info ddl
CREATE TABLE `mcp_info` (
`mcp_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'id',
`server_name` varchar(50) DEFAULT NULL COMMENT '服务器名称',
`transport_type` varchar(255) DEFAULT NULL COMMENT '链接方式',
`command` varchar(255) DEFAULT NULL COMMENT 'Command',
`arguments` varchar(255) DEFAULT NULL COMMENT 'Args',
`env` varchar(255) DEFAULT NULL COMMENT 'Env',
`status` tinyint(1) DEFAULT NULL COMMENT '是否启用',
`create_dept` bigint(20) DEFAULT NULL COMMENT '创建部门',
`create_by` bigint(20) DEFAULT NULL COMMENT '创建者',
`create_time` datetime DEFAULT NULL COMMENT '创建时间',
`update_by` bigint(20) DEFAULT NULL COMMENT '更新者',
`update_time` datetime DEFAULT NULL COMMENT '更新时间',
`remark` varchar(255) DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`mcp_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
-- ----------------------------
-- Table structure for mcp_info
-- ----------------------------
DROP TABLE IF EXISTS `mcp_info`;
CREATE TABLE `mcp_info` (
`mcp_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键',
`server_name` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '服务器名称',
`transport_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '链接方式',
`command` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '命令',
`arguments` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '参数',
`env` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '环境',
`status` tinyint(1) NULL DEFAULT NULL COMMENT '是否启用',
`description` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '工具描述',
`create_dept` bigint(20) NULL DEFAULT NULL COMMENT '创建部门',
`create_by` bigint(20) NULL DEFAULT NULL COMMENT '创建者',
`create_time` datetime NULL DEFAULT NULL COMMENT '创建时间',
`update_by` bigint(20) NULL DEFAULT NULL COMMENT '更新者',
`update_time` datetime NULL DEFAULT NULL COMMENT '更新时间',
`remark` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
PRIMARY KEY (`mcp_id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 2 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'mcp工具管理' ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of mcp_info
-- ----------------------------
INSERT INTO `mcp_info` VALUES (1, 'howtocook-mcp', 'STDIO', 'npx', '[\"-y\", \"howtocook-mcp\"]', NULL, 1, NULL, NULL, NULL, '2025-08-11 17:19:25', 1, '2025-08-11 18:24:22', NULL);
INSERT INTO `ruoyi-ai`.`sys_dict_data` (`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1954098808913211393, '000000', 0, 'STDIO', 'STDIO', 'mcp_transport_type', NULL, '', 'N', '0', NULL, NULL, '2025-08-09 16:33:56', 1, '2025-08-09 16:34:19', NULL);
INSERT INTO `ruoyi-ai`.`sys_dict_data` (`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1954098960432443394, '000000', 1, 'SSE', 'SSE', 'mcp_transport_type', NULL, '', 'N', '0', NULL, NULL, '2025-08-09 16:34:32', NULL, '2025-08-09 16:34:32', NULL);
INSERT INTO `ruoyi-ai`.`sys_dict_data` (`dict_code`, `tenant_id`, `dict_sort`, `dict_label`, `dict_value`, `dict_type`, `css_class`, `list_class`, `is_default`, `status`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1954099421436784642, '000000', 2, 'HTTP', 'HTTP', 'mcp_transport_type', NULL, '', 'N', '0', NULL, NULL, '2025-08-09 16:36:22', NULL, '2025-08-09 16:36:22', NULL);
INSERT INTO `ruoyi-ai`.`sys_dict_type` (`dict_id`, `tenant_id`, `dict_name`, `dict_type`, `status`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1954098639622713345, '000000', 'mcp链接方式', 'mcp_transport_type', '0', NULL, NULL, '2025-08-09 16:33:16', NULL, '2025-08-09 16:33:16', NULL);
INSERT INTO `ruoyi-ai`.`mcp_info` (`mcp_id`, `server_name`, `transport_type`, `command`, `arguments`, `env`, `status`, `description`, `create_dept`, `create_by`, `create_time`, `update_by`, `update_time`, `remark`) VALUES (1, 'howtocook-mcp', 'STDIO', 'npx', '["-y", "howtocook-mcp"]', NULL, 1, NULL, NULL, NULL, '2025-08-11 17:19:25', 1, '2025-08-11 18:24:22', NULL);

View File

@@ -1,8 +0,0 @@
-- 默认开启本地minio
UPDATE `ruoyi-ai`.sys_oss_config t
SET t.status = '1'
WHERE t.oss_config_id = 4;
UPDATE `ruoyi-ai`.sys_oss_config t
SET t.status = '0'
WHERE t.oss_config_id = 1;