This commit is contained in:
2025-11-04 18:49:37 +08:00
parent b95fff224b
commit 8850a06fea
103 changed files with 15337 additions and 771 deletions

View File

@@ -1,112 +1,92 @@
package org.xyzh.api.ai.agent;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.core.page.PageDomain;
import org.xyzh.common.core.page.PageParam;
import org.xyzh.common.dto.ai.TbAiAgentConfig;
import java.util.List;
/**
* @description 智能体配置服务接口
* @description AI智能体配置服务接口
* @filename AiAgentConfigService.java
* @author yslg
* @author AI Assistant
* @copyright xyzh
* @since 2025-10-15
* @since 2025-11-04
*/
public interface AiAgentConfigService {
/**
* @description 获取智能体配置列表
* @param status 状态(可选)
* @return ResultDomain<TbAiAgentConfig> 配置列表
* @author yslg
* @since 2025-10-15
* 创建智能体
* @param agentConfig 智能体配置
* @return 创建结果
*/
ResultDomain<TbAiAgentConfig> getAgentConfigList(Integer status);
ResultDomain<TbAiAgentConfig> createAgent(TbAiAgentConfig agentConfig);
/**
* @description 根据ID获取智能体配置详情
* @param configID 配置ID
* @return ResultDomain<TbAiAgentConfig> 配置详情
* @author yslg
* @since 2025-10-15
* 更新智能体
* @param agentConfig 智能体配置
* @return 更新结果
*/
ResultDomain<TbAiAgentConfig> getAgentConfigById(String configID);
ResultDomain<TbAiAgentConfig> updateAgent(TbAiAgentConfig agentConfig);
/**
* @description 创建智能体配置
* @param config 配置信息
* @return ResultDomain<TbAiAgentConfig> 创建结果
* @author yslg
* @since 2025-10-15
* 删除智能体(逻辑删除)
* @param agentId 智能体ID
* @return 删除结果
*/
ResultDomain<TbAiAgentConfig> createAgentConfig(TbAiAgentConfig config);
ResultDomain<Boolean> deleteAgent(String agentId);
/**
* @description 更新智能体配置
* @param config 配置信息
* @return ResultDomain<TbAiAgentConfig> 更新结果
* @author yslg
* @since 2025-10-15
* 根据ID查询智能体
* @param agentId 智能体ID
* @return 智能体配置
*/
ResultDomain<TbAiAgentConfig> updateAgentConfig(TbAiAgentConfig config);
ResultDomain<TbAiAgentConfig> getAgentById(String agentId);
/**
* @description 删除智能体配置
* @param configID 配置ID
* @return ResultDomain<Boolean> 删除结果
* @author yslg
* @since 2025-10-15
* 查询所有启用的智能体列表
* @return 智能体列表
*/
ResultDomain<Boolean> deleteAgentConfig(String configID);
ResultDomain<List<TbAiAgentConfig>> listEnabledAgents();
/**
* @description 更新智能体状态
* @param configID 配置ID
* @param status 状态
* @return ResultDomain<TbAiAgentConfig> 更新结果
* @author yslg
* @since 2025-10-15
* 查询智能体列表(支持过滤)
* @param filter 过滤条件
* @return 智能体列表
*/
ResultDomain<TbAiAgentConfig> updateAgentStatus(String configID, Integer status);
ResultDomain<List<TbAiAgentConfig>> listAgents(TbAiAgentConfig filter);
/**
* @description 更新智能体模型配置
* @param configID 配置ID
* @param modelName 模型名称
* @param modelProvider 模型提供商
* @param temperature 温度值
* @param maxTokens 最大tokens
* @param topP Top P值
* @return ResultDomain<TbAiAgentConfig> 更新结果
* @author yslg
* @since 2025-10-15
* 分页查询智能体列表
* @param filter 过滤条件
* @param pageParam 分页参数
* @return 分页结果
*/
ResultDomain<TbAiAgentConfig> updateAgentModel(String configID, String modelName, String modelProvider,
java.math.BigDecimal temperature, Integer maxTokens, java.math.BigDecimal topP);
PageDomain<TbAiAgentConfig> pageAgents(TbAiAgentConfig filter, PageParam pageParam);
/**
* @description 更新智能体系统提示词
* @param configID 配置ID
* @param systemPrompt 系统提示词
* @return ResultDomain<TbAiAgentConfig> 更新结果
* @author yslg
* @since 2025-10-15
* 更新智能体状态
* @param agentId 智能体ID
* @param status 状态0-禁用1-启用
* @return 更新结果
*/
ResultDomain<TbAiAgentConfig> updateAgentPrompt(String configID, String systemPrompt);
ResultDomain<Boolean> updateAgentStatus(String agentId, Integer status);
/**
* @description 获取启用的智能体配置
* @return ResultDomain<TbAiAgentConfig> 启用的配置列表
* @author yslg
* @since 2025-10-15
* 更新智能体Dify配置
* @param agentId 智能体ID
* @param difyAppId Dify应用ID
* @param difyApiKey Dify API密钥
* @return 更新结果
*/
ResultDomain<TbAiAgentConfig> getActiveAgentConfigs();
ResultDomain<Boolean> updateDifyConfig(String agentId, String difyAppId, String difyApiKey);
/**
* @description 根据名称搜索智能体配置
* 验证智能体名称是否存在
* @param name 智能体名称
* @return ResultDomain<TbAiAgentConfig> 搜索结果
* @author yslg
* @since 2025-10-15
* @param excludeId 排除的智能体ID用于更新时
* @return 是否存在
*/
ResultDomain<TbAiAgentConfig> searchAgentConfigsByName(String name);
ResultDomain<Boolean> checkNameExists(String name, String excludeId);
}

View File

@@ -0,0 +1,131 @@
package org.xyzh.api.ai.chat;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.dto.ai.TbAiConversation;
import org.xyzh.common.dto.ai.TbAiMessage;
import java.util.List;
/**
* @description AI对话服务接口
* @filename AiChatService.java
* @author AI Assistant
* @copyright xyzh
* @since 2025-11-04
*/
public interface AiChatService {
/**
* 流式对话SSE
* @param agentId 智能体ID
* @param conversationId 会话ID可选为空则创建新会话
* @param query 用户问题
* @param knowledgeIds 使用的知识库ID列表可选用于知识库隔离
* @param callback 流式响应回调StreamCallback类型需在实现层处理
* @return 对话结果包含会话ID和消息ID
*/
ResultDomain<TbAiMessage> streamChat(
String agentId,
String conversationId,
String query,
List<String> knowledgeIds,
Object callback // 使用Object避免跨模块依赖
);
/**
* 阻塞式对话(非流式)
* @param agentId 智能体ID
* @param conversationId 会话ID可选
* @param query 用户问题
* @param knowledgeIds 使用的知识库ID列表可选
* @return 对话结果(包含完整回答)
*/
ResultDomain<TbAiMessage> blockingChat(
String agentId,
String conversationId,
String query,
List<String> knowledgeIds
);
/**
* 停止对话生成
* @param messageId 消息ID
* @return 停止结果
*/
ResultDomain<Boolean> stopChat(String messageId);
/**
* 创建新会话
* @param agentId 智能体ID
* @param title 会话标题(可选)
* @return 会话信息
*/
ResultDomain<TbAiConversation> createConversation(String agentId, String title);
/**
* 获取会话信息
* @param conversationId 会话ID
* @return 会话信息
*/
ResultDomain<TbAiConversation> getConversation(String conversationId);
/**
* 更新会话(标题、摘要等)
* @param conversation 会话信息
* @return 更新结果
*/
ResultDomain<TbAiConversation> updateConversation(TbAiConversation conversation);
/**
* 删除会话
* @param conversationId 会话ID
* @return 删除结果
*/
ResultDomain<Boolean> deleteConversation(String conversationId);
/**
* 查询用户的会话列表
* @param agentId 智能体ID可选
* @return 会话列表
*/
ResultDomain<List<TbAiConversation>> listUserConversations(String agentId);
/**
* 查询会话的消息列表
* @param conversationId 会话ID
* @return 消息列表
*/
ResultDomain<List<TbAiMessage>> listMessages(String conversationId);
/**
* 获取单条消息
* @param messageId 消息ID
* @return 消息信息
*/
ResultDomain<TbAiMessage> getMessage(String messageId);
/**
* 重新生成回答
* @param messageId 原消息ID
* @param callback 流式回调可选StreamCallback类型
* @return 新消息
*/
ResultDomain<TbAiMessage> regenerateAnswer(String messageId, Object callback);
/**
* 异步生成会话摘要
* @param conversationId 会话ID
* @return 异步任务结果
*/
ResultDomain<Boolean> generateSummaryAsync(String conversationId);
/**
* 评价消息(点赞/点踩)
* @param messageId 消息ID
* @param rating 评分1=好评,-1=差评0=取消评价)
* @param feedback 反馈内容(可选)
* @return 评价结果
*/
ResultDomain<Boolean> rateMessage(String messageId, Integer rating, String feedback);
}

View File

@@ -1,6 +1,9 @@
package org.xyzh.api.ai.file;
import org.springframework.web.multipart.MultipartFile;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.core.page.PageDomain;
import org.xyzh.common.core.page.PageParam;
import org.xyzh.common.dto.ai.TbAiUploadFile;
import java.util.List;
@@ -8,135 +11,85 @@ import java.util.List;
/**
* @description AI文件上传服务接口
* @filename AiUploadFileService.java
* @author yslg
* @author AI Assistant
* @copyright xyzh
* @since 2025-10-15
* @since 2025-11-04
*/
public interface AiUploadFileService {
/**
* @description 获取用户上传文件列表
* @param userID 用户ID
* @param conversationID 会话ID可选
* @param status 状态(可选)
* @return ResultDomain<TbAiUploadFile> 文件列表
* @author yslg
* @since 2025-10-15
* 上传文件到知识库同步到Dify
* @param knowledgeId 知识库ID
* @param file 上传的文件
* @param indexingTechnique 索引方式(可选)
* @return 上传结果
*/
ResultDomain<TbAiUploadFile> getUserFiles(String userID, String conversationID, Integer status);
ResultDomain<TbAiUploadFile> uploadToKnowledge(
String knowledgeId,
MultipartFile file,
String indexingTechnique
);
/**
* @description 根据ID获取文件详情
* @param fileID 文件ID
* @return ResultDomain<TbAiUploadFile> 文件详情
* @author yslg
* @since 2025-10-15
* 批量上传文件到知识库
* @param knowledgeId 知识库ID
* @param files 上传的文件列表
* @param indexingTechnique 索引方式(可选)
* @return 上传结果列表
*/
ResultDomain<TbAiUploadFile> getFileById(String fileID);
ResultDomain<List<TbAiUploadFile>> batchUploadToKnowledge(
String knowledgeId,
List<MultipartFile> files,
String indexingTechnique
);
/**
* @description 创建文件记录
* @param file 文件信息
* @return ResultDomain<TbAiUploadFile> 创建结果
* @author yslg
* @since 2025-10-15
* 删除文件同时删除Dify中的文档
* @param fileId 文件ID
* @return 删除结果
*/
ResultDomain<TbAiUploadFile> createFile(TbAiUploadFile file);
ResultDomain<Boolean> deleteFile(String fileId);
/**
* @description 更新文件状态
* @param fileID 文件ID
* @param status 状态
* @return ResultDomain<TbAiUploadFile> 更新结果
* @author yslg
* @since 2025-10-15
* 查询文件处理状态从Dify同步
* @param fileId 文件ID
* @return 文件信息(包含最新状态
*/
ResultDomain<TbAiUploadFile> updateFileStatus(String fileID, Integer status);
ResultDomain<TbAiUploadFile> getFileStatus(String fileId);
/**
* @description 更新文件提取文本
* @param fileID 文件ID
* @param extractedText 提取的文本
* @return ResultDomain<TbAiUploadFile> 更新结果
* @author yslg
* @since 2025-10-15
* 根据ID查询文件信息
* @param fileId 文件ID
* @return 文件信息
*/
ResultDomain<TbAiUploadFile> updateFileExtractedText(String fileID, String extractedText);
ResultDomain<TbAiUploadFile> getFileById(String fileId);
/**
* @description 删除文件
* @param fileID 文件ID
* @return ResultDomain<Boolean> 删除结果
* @author yslg
* @since 2025-10-15
* 查询知识库的文件列表
* @param knowledgeId 知识库ID
* @return 文件列表
*/
ResultDomain<Boolean> deleteFile(String fileID);
ResultDomain<List<TbAiUploadFile>> listFilesByKnowledge(String knowledgeId);
/**
* @description 清空会话文件
* @param conversationID 会话ID
* @return ResultDomain<Boolean> 清空结果
* @author yslg
* @since 2025-10-15
* 分页查询文件列表
* @param filter 过滤条件
* @param pageParam 分页参数
* @return 分页结果
*/
ResultDomain<Boolean> clearConversationFiles(String conversationID);
PageDomain<TbAiUploadFile> pageFiles(TbAiUploadFile filter, PageParam pageParam);
/**
* @description 清空用户文件
* @param userID 用户ID
* @return ResultDomain<Boolean> 清空结果
* @author yslg
* @since 2025-10-15
* 同步文件状态从Dify同步向量化状态
* @param fileId 文件ID
* @return 同步结果
*/
ResultDomain<Boolean> clearUserFiles(String userID);
ResultDomain<TbAiUploadFile> syncFileStatus(String fileId);
/**
* @description 获取文件统计
* @param userID 用户ID
* @param conversationID 会话ID可选
* @return ResultDomain<TbAiUploadFile> 文件统计
* @author yslg
* @since 2025-10-15
* 批量同步知识库的所有文件状态
* @param knowledgeId 知识库ID
* @return 同步结果
*/
ResultDomain<TbAiUploadFile> getFileStatistics(String userID, String conversationID);
/**
* @description 根据文件名搜索文件
* @param userID 用户ID
* @param fileName 文件名
* @return ResultDomain<TbAiUploadFile> 搜索结果
* @author yslg
* @since 2025-10-15
*/
ResultDomain<TbAiUploadFile> searchFilesByName(String userID, String fileName);
/**
* @description 根据文件类型获取文件
* @param userID 用户ID
* @param fileType 文件类型
* @return ResultDomain<TbAiUploadFile> 文件列表
* @author yslg
* @since 2025-10-15
*/
ResultDomain<TbAiUploadFile> getFilesByType(String userID, String fileType);
/**
* @description 批量删除文件
* @param fileIDs 文件ID列表
* @return ResultDomain<Boolean> 删除结果
* @author yslg
* @since 2025-10-15
*/
ResultDomain<Boolean> batchDeleteFiles(List<String> fileIDs);
/**
* @description 检查文件是否存在
* @param userID 用户ID
* @param fileName 文件名
* @param filePath 文件路径
* @return ResultDomain<Boolean> 是否存在
* @author yslg
* @since 2025-10-15
*/
ResultDomain<Boolean> checkFileExists(String userID, String fileName, String filePath);
ResultDomain<List<TbAiUploadFile>> syncKnowledgeFiles(String knowledgeId);
}

View File

@@ -0,0 +1,138 @@
package org.xyzh.api.ai.history;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.core.page.PageDomain;
import org.xyzh.common.core.page.PageParam;
import org.xyzh.common.dto.ai.TbAiConversation;
import org.xyzh.common.dto.ai.TbAiMessage;
import java.util.Date;
import java.util.List;
import java.util.Map;
/**
* @description AI对话历史服务接口
* @filename AiChatHistoryService.java
* @author AI Assistant
* @copyright xyzh
* @since 2025-11-04
*/
public interface AiChatHistoryService {
/**
* 分页查询用户的会话列表
* @param agentId 智能体ID可选
* @param keyword 关键词搜索(标题、摘要)
* @param isFavorite 是否收藏(可选)
* @param startDate 开始日期(可选)
* @param endDate 结束日期(可选)
* @param pageParam 分页参数
* @return 会话列表分页结果
*/
PageDomain<TbAiConversation> pageUserConversations(
String agentId,
String keyword,
Boolean isFavorite,
Date startDate,
Date endDate,
PageParam pageParam
);
/**
* 搜索会话(全文搜索标题和摘要)
* @param keyword 搜索关键词
* @param pageParam 分页参数
* @return 会话列表
*/
PageDomain<TbAiConversation> searchConversations(String keyword, PageParam pageParam);
/**
* 搜索消息内容(全文搜索)
* @param keyword 搜索关键词
* @param conversationId 会话ID可选限定范围
* @param pageParam 分页参数
* @return 消息列表
*/
PageDomain<TbAiMessage> searchMessages(String keyword, String conversationId, PageParam pageParam);
/**
* 收藏/取消收藏会话
* @param conversationId 会话ID
* @param isFavorite 是否收藏
* @return 操作结果
*/
ResultDomain<Boolean> toggleFavorite(String conversationId, Boolean isFavorite);
/**
* 置顶/取消置顶会话
* @param conversationId 会话ID
* @param isPinned 是否置顶
* @return 操作结果
*/
ResultDomain<Boolean> togglePin(String conversationId, Boolean isPinned);
/**
* 批量删除会话
* @param conversationIds 会话ID列表
* @return 删除结果
*/
ResultDomain<Integer> batchDeleteConversations(List<String> conversationIds);
/**
* 获取用户的对话统计信息
* @param userId 用户ID可选默认当前用户
* @return 统计信息
*/
ResultDomain<Map<String, Object>> getUserChatStatistics(String userId);
/**
* 获取会话的详细统计
* @param conversationId 会话ID
* @return 统计信息消息数、Token数、评分分布等
*/
ResultDomain<Map<String, Object>> getConversationStatistics(String conversationId);
/**
* 导出会话记录Markdown格式
* @param conversationId 会话ID
* @return Markdown文本
*/
ResultDomain<String> exportConversationAsMarkdown(String conversationId);
/**
* 导出会话记录JSON格式
* @param conversationId 会话ID
* @return JSON文本
*/
ResultDomain<String> exportConversationAsJson(String conversationId);
/**
* 批量导出会话
* @param conversationIds 会话ID列表
* @param format 格式markdown/json
* @return 导出内容
*/
ResultDomain<String> batchExportConversations(List<String> conversationIds, String format);
/**
* 清理过期会话软删除超过N天的会话
* @param days 天数
* @return 清理数量
*/
ResultDomain<Integer> cleanExpiredConversations(Integer days);
/**
* 获取用户最近的对话
* @param limit 数量限制
* @return 会话列表
*/
ResultDomain<TbAiConversation> getRecentConversations(Integer limit);
/**
* 获取热门会话基于消息数或Token数
* @param limit 数量限制
* @return 会话列表
*/
ResultDomain<TbAiConversation> getPopularConversations(Integer limit);
}

View File

@@ -1,138 +1,106 @@
package org.xyzh.api.ai.knowledge;
import org.xyzh.common.core.domain.ResultDomain;
import org.xyzh.common.core.page.PageDomain;
import org.xyzh.common.core.page.PageParam;
import org.xyzh.common.dto.ai.TbAiKnowledge;
import java.util.List;
/**
* @description AI知识库服务接口
* @description AI知识库管理服务接口
* @filename AiKnowledgeService.java
* @author yslg
* @author AI Assistant
* @copyright xyzh
* @since 2025-10-15
* @since 2025-11-04
*/
public interface AiKnowledgeService {
/**
* @description 获取知识库列表
* @param filter 过滤条件
* @return ResultDomain<TbAiKnowledge> 知识库列表
* @author yslg
* @since 2025-10-15
* 创建知识库同步到Dify
* @param knowledge 知识库信息
* @param permissionType 权限类型PUBLIC-公开DEPARTMENT-部门ROLE-角色PRIVATE-私有
* @param deptIds 部门ID列表DEPARTMENT类型需要
* @param roleIds 角色ID列表ROLE/PRIVATE类型需要
* @return 创建结果
*/
ResultDomain<TbAiKnowledge> getKnowledgeList(TbAiKnowledge filter);
ResultDomain<TbAiKnowledge> createKnowledge(
TbAiKnowledge knowledge,
String permissionType,
List<String> deptIds,
List<String> roleIds
);
/**
* @description 根据ID获取知识详情
* @param knowledgeID 知识ID
* @return ResultDomain<TbAiKnowledge> 知识详情
* @author yslg
* @since 2025-10-15
*/
ResultDomain<TbAiKnowledge> getKnowledgeById(String knowledgeID);
/**
* @description 创建知识
* @param knowledge 知识信息
* @return ResultDomain<TbAiKnowledge> 创建结果
* @author yslg
* @since 2025-10-15
*/
ResultDomain<TbAiKnowledge> createKnowledge(TbAiKnowledge knowledge);
/**
* @description 更新知识
* @param knowledge 知识信息
* @return ResultDomain<TbAiKnowledge> 更新结果
* @author yslg
* @since 2025-10-15
* 更新知识库
* @param knowledge 知识库信息
* @return 更新结果
*/
ResultDomain<TbAiKnowledge> updateKnowledge(TbAiKnowledge knowledge);
/**
* @description 删除知识
* @param knowledgeID 知识ID
* @return ResultDomain<Boolean> 删除结果
* @author yslg
* @since 2025-10-15
* 删除知识同时删除Dify中的知识库
* @param knowledgeId 知识ID
* @return 删除结果
*/
ResultDomain<Boolean> deleteKnowledge(String knowledgeID);
ResultDomain<Boolean> deleteKnowledge(String knowledgeId);
/**
* @description 更新知识状态
* @param knowledgeID 知识ID
* @param status 状态
* @return ResultDomain<TbAiKnowledge> 更新结果
* @author yslg
* @since 2025-10-15
* 根据ID查询知识库带权限校验
* @param knowledgeId 知识ID
* @return 知识库信息
*/
ResultDomain<TbAiKnowledge> updateKnowledgeStatus(String knowledgeID, Integer status);
ResultDomain<TbAiKnowledge> getKnowledgeById(String knowledgeId);
/**
* @description 更新知识向量ID
* @param knowledgeID 知识ID
* @param vectorID 向量ID
* @return ResultDomain<TbAiKnowledge> 更新结果
* @author yslg
* @since 2025-10-15
* 查询用户有权限的知识库列表
* @param filter 过滤条件
* @return 知识库列表
*/
ResultDomain<TbAiKnowledge> updateKnowledgeVector(String knowledgeID, String vectorID);
ResultDomain<List<TbAiKnowledge>> listKnowledges(TbAiKnowledge filter);
/**
* @description 搜索知识
* @param keyword 关键词
* @param category 分类(可选)
* @param status 状态(可选)
* @return ResultDomain<TbAiKnowledge> 搜索结果
* @author yslg
* @since 2025-10-15
* 分页查询知识
* @param filter 过滤条件
* @param pageParam 分页参数
* @return 分页结果
*/
ResultDomain<TbAiKnowledge> searchKnowledge(String keyword, String category, Integer status);
PageDomain<TbAiKnowledge> pageKnowledges(TbAiKnowledge filter, PageParam pageParam);
/**
* @description 根据分类获取知识
* @param category 分类
* @return ResultDomain<TbAiKnowledge> 知识列表
* @author yslg
* @since 2025-10-15
* 同步Dify知识库信息到本地
* @param knowledgeId 知识库ID
* @return 同步结果
*/
ResultDomain<TbAiKnowledge> getKnowledgeByCategory(String category);
ResultDomain<TbAiKnowledge> syncFromDify(String knowledgeId);
/**
* @description 根据标签获取知识
* @param tag 标签
* @return ResultDomain<TbAiKnowledge> 知识列表
* @author yslg
* @since 2025-10-15
* 更新知识库权限
* @param knowledgeId 知识库ID
* @param permissionType 权限类型
* @param deptIds 部门ID列表
* @param roleIds 角色ID列表
* @return 更新结果
*/
ResultDomain<TbAiKnowledge> getKnowledgeByTag(String tag);
ResultDomain<Boolean> updateKnowledgePermission(
String knowledgeId,
String permissionType,
List<String> deptIds,
List<String> roleIds
);
/**
* @description 向量检索知识
* @param query 查询内容
* @param limit 限制数量
* @return ResultDomain<TbAiKnowledge> 检索结果
* @author yslg
* @since 2025-10-15
* 检查用户是否有知识库访问权限
* @param knowledgeId 知识库ID
* @param permissionType 权限类型read/write/execute
* @return 是否有权限
*/
ResultDomain<TbAiKnowledge> vectorSearchKnowledge(String query, Integer limit);
ResultDomain<Boolean> checkKnowledgePermission(String knowledgeId, String permissionType);
/**
* @description 批量删除知识
* @param knowledgeIDs 知识ID列表
* @return ResultDomain<Boolean> 删除结果
* @author yslg
* @since 2025-10-15
* 查询知识库的文档数量和分段数量从Dify同步
* @param knowledgeId 知识ID
* @return 统计信息
*/
ResultDomain<Boolean> batchDeleteKnowledge(List<String> knowledgeIDs);
/**
* @description 获取知识统计
* @param category 分类(可选)
* @return ResultDomain<TbAiKnowledge> 知识统计
* @author yslg
* @since 2025-10-15
*/
ResultDomain<TbAiKnowledge> getKnowledgeStatistics(String category);
ResultDomain<TbAiKnowledge> getKnowledgeStats(String knowledgeId);
}

View File

@@ -0,0 +1,14 @@
package org.xyzh.api.system.config;
/**
* @description 系统配置服务
* @filename SysConfigService.java
* @author AI Assistant
* @copyright xyzh
* @since 2025-11-04
*/
public interface SysConfigService {
/** */
String getSysConfig(String key);
}