AI修改
This commit is contained in:
@@ -1,9 +0,0 @@
|
||||
package org.xyzh.api.ai;
|
||||
|
||||
/**
|
||||
* Agent服务接口
|
||||
* 用于知识库和文档管理
|
||||
*/
|
||||
public interface AgentService {
|
||||
|
||||
}
|
||||
@@ -19,6 +19,9 @@ public class TbChat extends BaseDTO{
|
||||
@Schema(description = "用户ID")
|
||||
private String userId;
|
||||
|
||||
@Schema(description = "用户类型 true-系统内部人员 false-系统外部人员")
|
||||
private Boolean userType;
|
||||
|
||||
@Schema(description = "对话标题")
|
||||
private String title;
|
||||
|
||||
|
||||
@@ -27,4 +27,7 @@ public class TbChatMessage extends BaseDTO{
|
||||
@Schema(description = "文件ID数组")
|
||||
private List<String> files;
|
||||
|
||||
@Schema(description = "评价")
|
||||
private String comment;
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
package org.xyzh.api.ai.service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
import org.xyzh.api.ai.dto.TbKnowledgeFile;
|
||||
import org.xyzh.common.core.domain.ResultDomain;
|
||||
import org.xyzh.common.core.page.PageDomain;
|
||||
import org.xyzh.common.core.page.PageParam;
|
||||
|
||||
public interface AIFileUploadService {
|
||||
|
||||
// ============================ 对话文件管理 ============================
|
||||
/**
|
||||
* 上传文件用于对话(图文多模态)
|
||||
* @param file 上传的文件
|
||||
* @param agentId 智能体ID
|
||||
* @return Dify文件信息(包含id、name、size等)
|
||||
*/
|
||||
ResultDomain<Map<String, Object>> uploadFileForChat(
|
||||
MultipartFile file,
|
||||
String agentId
|
||||
);
|
||||
|
||||
|
||||
|
||||
// ============================ 知识库文件管理 ============================
|
||||
|
||||
/**
|
||||
* 上传文件到知识库(同步到Dify)
|
||||
* @param knowledgeId 知识库ID
|
||||
* @param file 上传的文件
|
||||
* @param indexingTechnique 索引方式(可选)
|
||||
* @return 上传结果
|
||||
*/
|
||||
ResultDomain<TbKnowledgeFile> uploadToKnowledge(
|
||||
String knowledgeId,
|
||||
MultipartFile file,
|
||||
String indexingTechnique
|
||||
);
|
||||
|
||||
/**
|
||||
* 批量上传文件到知识库
|
||||
* @param knowledgeId 知识库ID
|
||||
* @param files 上传的文件列表
|
||||
* @param indexingTechnique 索引方式(可选)
|
||||
* @return 上传结果列表
|
||||
*/
|
||||
ResultDomain<TbKnowledgeFile> batchUploadToKnowledge(
|
||||
String knowledgeId,
|
||||
List<MultipartFile> files,
|
||||
String indexingTechnique
|
||||
);
|
||||
|
||||
/**
|
||||
* 同时删除Dify中的文档
|
||||
* @param fileId dify的文件ID
|
||||
* @return 删除结果
|
||||
*/
|
||||
ResultDomain<Boolean> deleteKnowledgeFile(String fileId);
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,98 @@
|
||||
package org.xyzh.api.ai.service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
|
||||
import org.xyzh.api.ai.dto.DifyFileInfo;
|
||||
import org.xyzh.api.ai.dto.TbChat;
|
||||
import org.xyzh.api.ai.dto.TbChatMessage;
|
||||
import org.xyzh.common.core.domain.ResultDomain;
|
||||
|
||||
public interface AgentChatService {
|
||||
|
||||
// ====================== 智能体会话管理 ======================
|
||||
/**
|
||||
* 创建新会话
|
||||
* @param agentId 智能体ID
|
||||
* @param title 会话标题(可选)
|
||||
* @return 会话信息
|
||||
*/
|
||||
ResultDomain<TbChat> createChat(String agentId, String title);
|
||||
|
||||
/**
|
||||
* 更新会话名称
|
||||
* @param agentId 智能体ID
|
||||
* @param chatId 会话ID
|
||||
* @param title 会话标题(可选)
|
||||
* @return 会话信息
|
||||
*/
|
||||
ResultDomain<TbChat> updateChat(String agentId, String chatId, String title);
|
||||
|
||||
/**
|
||||
* 删除会话
|
||||
* @param agentId 智能体ID
|
||||
* @param chatId 会话ID
|
||||
* @return 会话信息
|
||||
*/
|
||||
ResultDomain<TbChat> deleteChat(String agentId, String chatId);
|
||||
|
||||
/**
|
||||
* 获取会话列表
|
||||
* @param agentId 智能体ID
|
||||
* @return 会话列表
|
||||
*/
|
||||
ResultDomain<TbChat> getChatList(String agentId);
|
||||
|
||||
|
||||
// ====================== 智能体聊天管理 ======================
|
||||
|
||||
/**
|
||||
* 获取会话消息列表
|
||||
* @param agentId 智能体ID
|
||||
* @param chatId 会话ID
|
||||
* @return 会话消息列表
|
||||
*/
|
||||
ResultDomain<TbChatMessage> getChatMessageList(String agentId, String chatId);
|
||||
|
||||
/**
|
||||
* 准备聊天数据(POST传递复杂参数)
|
||||
* @param agentId 智能体ID
|
||||
* @param chatId 会话ID(可选,为空则创建新会话)
|
||||
* @param query 用户问题
|
||||
* @param filesData 上传的文件列表(Dify文件信息)
|
||||
* @return ResultDomain<String> 返回sessionId
|
||||
*/
|
||||
ResultDomain<String> prepareChatMessageSession(
|
||||
String agentId,
|
||||
String chatId,
|
||||
String query,
|
||||
List<DifyFileInfo> filesData
|
||||
);
|
||||
|
||||
/**
|
||||
* 流式对话(SSE)- 使用sessionId建立SSE连接 产生chatMessage
|
||||
* @param sessionId 会话标识
|
||||
* @return SseEmitter 流式推送对象
|
||||
*/
|
||||
SseEmitter streamChatMessageWithSse(String sessionId);
|
||||
|
||||
/**
|
||||
* 停止对话生成(通过Dify TaskID)
|
||||
* @param taskId Dify任务ID
|
||||
* @param agentId 智能体ID
|
||||
* @return 停止结果
|
||||
*/
|
||||
ResultDomain<Boolean> stopChatMessageByTaskId(String taskId, String agentId);
|
||||
|
||||
/**
|
||||
* 评价
|
||||
* @param agentId 智能体ID
|
||||
* @param chatId 会话ID
|
||||
* @param messageId 消息ID
|
||||
* @param comment 评价
|
||||
* @return 评价结果
|
||||
*/
|
||||
ResultDomain<Boolean> commentChatMessage(String agentId, String chatId, String messageId, String comment);
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package org.xyzh.api.ai.service;
|
||||
|
||||
import org.xyzh.api.ai.dto.TbAgent;
|
||||
import org.xyzh.common.core.domain.ResultDomain;
|
||||
|
||||
/**
|
||||
* Agent服务接口
|
||||
* 用于知识库和文档管理
|
||||
*/
|
||||
public interface AgentService {
|
||||
|
||||
/**
|
||||
* 添加Agent, 用户自己在dify搭建发布后,在本服务进行接入
|
||||
* @param tbAgent
|
||||
* @return
|
||||
*/
|
||||
ResultDomain<TbAgent> addAgent(TbAgent tbAgent);
|
||||
|
||||
/**
|
||||
* 更新Agent
|
||||
* @param tbAgent
|
||||
* @return
|
||||
*/
|
||||
ResultDomain<TbAgent> updateAgent(TbAgent tbAgent);
|
||||
|
||||
/**
|
||||
* 删除Agent
|
||||
* @param tbAgent
|
||||
* @return
|
||||
*/
|
||||
ResultDomain<TbAgent> deleteAgent(TbAgent tbAgent);
|
||||
}
|
||||
@@ -0,0 +1,62 @@
|
||||
package org.xyzh.api.ai.service;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import org.xyzh.common.core.domain.ResultDomain;
|
||||
|
||||
import com.alibaba.fastjson2.JSONObject;
|
||||
|
||||
/**
|
||||
* @description Dify代理服务接口
|
||||
* @filename DifyProxyService.java
|
||||
* @author yslg
|
||||
* @copyright xyzh
|
||||
* @since 2025-12-15
|
||||
*/
|
||||
public interface DifyProxyService {
|
||||
|
||||
/**
|
||||
* 获取某个知识库的某个文档的所有分段
|
||||
* @param datasetId 数据集ID
|
||||
* @param documentId 文档ID
|
||||
* @return 文档分段列表
|
||||
*/
|
||||
ResultDomain<JSONObject> getDocumentSegments(String datasetId, String documentId);
|
||||
|
||||
/**
|
||||
* @description 更新某个知识库的某个文档的某个分段
|
||||
* @param datasetId 数据集ID
|
||||
* @param documentId 文档ID
|
||||
* @param segmentId 分段ID
|
||||
* @param requestBody 更新请求体
|
||||
* @return 更新结果
|
||||
*/
|
||||
ResultDomain<String> updateSegment(String datasetId, String documentId, String segmentId, Map<String, Object> requestBody);
|
||||
|
||||
/**
|
||||
* @description 创建某个知识库的某个文档的某个分段
|
||||
* @param datasetId 数据集ID
|
||||
* @param documentId 文档ID
|
||||
* @param requestBody 创建请求体
|
||||
* @return 创建结果
|
||||
*/
|
||||
ResultDomain<String> createSegment(String datasetId, String documentId, Map<String, Object> requestBody);
|
||||
|
||||
/**
|
||||
* @description 删除某个知识库的某个文档的某个分段
|
||||
* @param datasetId 数据集ID
|
||||
* @param documentId 文档ID
|
||||
* @param segmentId 分段ID
|
||||
* @return 删除结果
|
||||
*/
|
||||
ResultDomain<String> deleteSegment(String datasetId, String documentId, String segmentId);
|
||||
|
||||
/**
|
||||
* @description 更新文档启用/禁用状态
|
||||
* @param datasetId Dify数据集ID
|
||||
* @param action 操作类型(enable/disable/archive/un_archive)
|
||||
* @param requestBody 请求体(包含document_ids数组)
|
||||
* @return ResultDomain<String> 更新结果
|
||||
*/
|
||||
ResultDomain<String> updateDocumentStatus(String datasetId, String action, Map<String, Object> requestBody);
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
package org.xyzh.api.ai.service;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import org.xyzh.api.ai.dto.TbKnowledge;
|
||||
import org.xyzh.api.ai.dto.TbKnowledgeFile;
|
||||
import org.xyzh.common.core.domain.ResultDomain;
|
||||
import org.xyzh.common.core.page.PageParam;
|
||||
|
||||
public interface KnowledgeService {
|
||||
|
||||
// ================================= 知识库管理 =================================
|
||||
/**
|
||||
* 创建知识库(同步到Dify)
|
||||
* @param knowledge 知识库信息
|
||||
* @param permissionType 权限类型:PUBLIC-公开,DEPARTMENT-部门,ROLE-角色,PRIVATE-私有
|
||||
* @param deptIds 部门ID列表(DEPARTMENT类型需要)
|
||||
* @param roleIds 角色ID列表(ROLE/PRIVATE类型需要)
|
||||
* @return 创建结果
|
||||
*/
|
||||
ResultDomain<TbKnowledge> createKnowledge(
|
||||
TbKnowledge knowledge,
|
||||
String permissionType,
|
||||
List<String> deptIds,
|
||||
List<String> roleIds
|
||||
);
|
||||
|
||||
/**
|
||||
* 更新知识库
|
||||
* @param knowledge 知识库信息
|
||||
* @return 更新结果
|
||||
*/
|
||||
ResultDomain<TbKnowledge> updateKnowledge(TbKnowledge knowledge);
|
||||
|
||||
/**
|
||||
* 删除知识库(同时删除Dify中的知识库)
|
||||
* @param knowledgeId 知识库ID
|
||||
* @return 删除结果
|
||||
*/
|
||||
ResultDomain<Boolean> deleteKnowledge(String knowledgeId);
|
||||
|
||||
/**
|
||||
* 根据ID查询知识库(带权限校验)
|
||||
* @param knowledgeId 知识库ID
|
||||
* @return 知识库信息
|
||||
*/
|
||||
ResultDomain<TbKnowledge> getKnowledgeById(String knowledgeId);
|
||||
|
||||
/**
|
||||
* 查询用户有权限的知识库列表
|
||||
* @param filter 过滤条件
|
||||
* @return 知识库列表
|
||||
*/
|
||||
ResultDomain<TbKnowledge> listKnowledges(TbKnowledge filter);
|
||||
|
||||
/**
|
||||
* 分页查询知识库
|
||||
* @param filter 过滤条件
|
||||
* @param pageParam 分页参数
|
||||
* @return 分页结果
|
||||
*/
|
||||
ResultDomain<TbKnowledge> pageKnowledges(TbKnowledge filter, PageParam pageParam);
|
||||
|
||||
/**
|
||||
* 查询知识库的文档数量和分段数量(从Dify同步)
|
||||
* @param knowledgeId 知识库ID
|
||||
* @return 统计信息
|
||||
*/
|
||||
ResultDomain<TbKnowledge> getKnowledgeStats(String knowledgeId);
|
||||
|
||||
/**
|
||||
* 获取可用的嵌入模型列表
|
||||
* @return 嵌入模型列表
|
||||
*/
|
||||
ResultDomain<Map<String, Object>> getAvailableEmbeddingModels();
|
||||
|
||||
/**
|
||||
* 获取可用的Rerank模型列表
|
||||
* @return Rerank模型列表
|
||||
*/
|
||||
ResultDomain<Map<String, Object>> getAvailableRerankModels();
|
||||
|
||||
/**
|
||||
* 获取Dify知识库文档列表
|
||||
* @param knowledgeId 知识库ID
|
||||
* @param page 页码(从1开始)
|
||||
* @param limit 每页数量
|
||||
* @return 文档列表
|
||||
*/
|
||||
ResultDomain<Map<String, Object>> getDocumentList(String knowledgeId, Integer page, Integer limit);
|
||||
|
||||
// ================================= 文件管理 =================================
|
||||
/**
|
||||
* 添加知识库文件
|
||||
* @param knowledgeFile 文件信息
|
||||
* @return 添加结果
|
||||
*/
|
||||
ResultDomain<TbKnowledgeFile> addKnowledgeFile(TbKnowledgeFile knowledgeFile);
|
||||
|
||||
/**
|
||||
* 更新知识库文件, 产生一个新version, 删除dify中旧版本的文件的document,并上传新文件重新索引
|
||||
* @param knowledgeFile 文件信息
|
||||
* @return 更新结果
|
||||
*/
|
||||
ResultDomain<TbKnowledgeFile> updateKnowledgeFile(TbKnowledgeFile knowledgeFile);
|
||||
|
||||
/**
|
||||
* 删除知识库文件
|
||||
* @param knowledgeFile 文件信息
|
||||
* @return 删除结果
|
||||
*/
|
||||
ResultDomain<TbKnowledgeFile> deleteKnowledgeFile(TbKnowledgeFile knowledgeFile);
|
||||
|
||||
/**
|
||||
* @description 获取一个文件的所有历史版本
|
||||
* @param fileId 文件ID
|
||||
* @author yslg
|
||||
* @since 2025-12-15
|
||||
*/
|
||||
ResultDomain<TbKnowledgeFile> getKnowledgeFileHistory(String fileId);
|
||||
|
||||
|
||||
}
|
||||
@@ -1,12 +0,0 @@
|
||||
package org.xyzh.api.ai.vo;
|
||||
|
||||
import org.xyzh.common.vo.BaseVO;
|
||||
|
||||
import lombok.Data;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
|
||||
@Data
|
||||
@Schema(description = "智能体VO")
|
||||
public class AgentVO extends BaseVO{
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user