dify
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
Reference in New Issue
Block a user