分段修改完成

This commit is contained in:
2025-11-07 15:17:49 +08:00
parent 8d87b00678
commit ab6c7c8576
3 changed files with 674 additions and 121 deletions

View File

@@ -6,9 +6,10 @@ import org.springframework.web.bind.annotation.*;
import org.xyzh.ai.client.DifyApiClient;
import org.xyzh.ai.mapper.AiUploadFileMapper;
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 com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import java.util.Date;
@@ -38,27 +39,60 @@ public class DifyProxyController {
// ===================== 文档分段管理 API =====================
/**
* @description 获取文档分段列表
* @description 获取文档分段列表(支持分页)
* @param datasetId Dify数据集ID
* @param documentId Dify文档ID
* @return ResultDomain<String> 分段列表JSON
* @param page 页码默认1
* @param limit 每页条数默认10
* @return ResultDomain<JSONObject> 分段列表JSON包含分页信息
* @author AI Assistant
* @since 2025-11-04
*/
@GetMapping("/datasets/{datasetId}/documents/{documentId}/segments")
public ResultDomain<JSONObject> getDocumentSegments(
@PathVariable(name = "datasetId") String datasetId,
@PathVariable(name = "documentId") String documentId) {
@PathVariable(name = "documentId") String documentId,
@RequestParam(name = "page", defaultValue = "1") int page,
@RequestParam(name = "limit", defaultValue = "20") int limit) {
ResultDomain<JSONObject> result = new ResultDomain<>();
log.info("获取文档分段列表: datasetId={}, documentId={}", datasetId, documentId);
log.info("获取文档分段列表: datasetId={}, documentId={}, page={}, limit={}",
datasetId, documentId, page, limit);
try {
// 调用Dify API使用默认配置的API Key
String path = "/datasets/" + datasetId + "/documents/" + documentId + "/segments";
// 调用Dify API使用默认配置的API Key,支持分页
String path = "/datasets/" + datasetId + "/documents/" + documentId +
"/segments?page=" + page + "&limit=" + limit;
String response = difyApiClient.get(path, null);
JSONObject jsonObject = JSONObject.parseObject(response);
result.success("获取文档分段列表成功", JSONArray.parseArray(jsonObject.getJSONArray("data").toJSONString(), JSONObject.class));
// 解析数据列表
List<JSONObject> data = jsonObject.getJSONArray("data").toList(JSONObject.class);
// 构建分页返回对象
PageDomain<JSONObject> pageDomain = new PageDomain<>();
pageDomain.setDataList(data);
// 设置分页参数(添加空值检查)
PageParam pageParam = new PageParam();
pageParam.setPageSize(limit);
pageParam.setPageNumber(page);
// 安全地获取 total如果不存在则使用 data.size()
Long total = jsonObject.getLong("total");
pageParam.setTotalElements(total != null ? total : (long) data.size());
// 安全地获取 total_pages如果不存在则计算
Integer totalPages = jsonObject.getInteger("total_pages");
if (totalPages == null) {
long totalElements = pageParam.getTotalElements();
totalPages = (int) Math.ceil((double) totalElements / limit);
}
pageParam.setTotalPages(totalPages);
pageDomain.setPageParam(pageParam);
// 返回完整的分页数据
result.success("获取文档分段列表成功", pageDomain);
return result;
} catch (Exception e) {
log.error("获取文档分段列表失败", e);
@@ -67,6 +101,108 @@ public class DifyProxyController {
}
}
/**
* @description 更新文档分段
* @param datasetId Dify数据集ID
* @param documentId Dify文档ID
* @param segmentId 分段ID
* @param requestBody 请求体包含segment对象
* @return ResultDomain<String> 更新结果
* @author AI Assistant
* @since 2025-11-07
*/
@PostMapping("/datasets/{datasetId}/documents/{documentId}/segments/{segmentId}")
public ResultDomain<String> updateSegment(
@PathVariable(name = "datasetId") String datasetId,
@PathVariable(name = "documentId") String documentId,
@PathVariable(name = "segmentId") String segmentId,
@RequestBody Map<String, Object> requestBody) {
log.info("更新文档分段: datasetId={}, documentId={}, segmentId={}",
datasetId, documentId, segmentId);
ResultDomain<String> result = new ResultDomain<>();
try {
// 调用Dify API使用默认配置的API Key
String path = "/datasets/" + datasetId + "/documents/" + documentId +
"/segments/" + segmentId;
String response = difyApiClient.post(path, requestBody, null);
result.success("更新分段成功", response);
return result;
} catch (Exception e) {
log.error("更新分段失败", e);
result.fail("更新分段失败: " + e.getMessage());
return result;
}
}
/**
* @description 创建文档分段
* @param datasetId Dify数据集ID
* @param documentId Dify文档ID
* @param requestBody 请求体包含segments数组
* @return ResultDomain<String> 创建结果
* @author AI Assistant
* @since 2025-11-07
*/
@PostMapping("/datasets/{datasetId}/documents/{documentId}/segments")
public ResultDomain<String> createSegment(
@PathVariable(name = "datasetId") String datasetId,
@PathVariable(name = "documentId") String documentId,
@RequestBody Map<String, Object> requestBody) {
log.info("创建文档分段: datasetId={}, documentId={}", datasetId, documentId);
ResultDomain<String> result = new ResultDomain<>();
try {
// 调用Dify API使用默认配置的API Key
String path = "/datasets/" + datasetId + "/documents/" + documentId + "/segments";
String response = difyApiClient.post(path, requestBody, null);
result.success("创建分段成功", response);
return result;
} catch (Exception e) {
log.error("创建分段失败", e);
result.fail("创建分段失败: " + e.getMessage());
return result;
}
}
/**
* @description 删除文档分段
* @param datasetId Dify数据集ID
* @param documentId Dify文档ID
* @param segmentId 分段ID
* @return ResultDomain<String> 删除结果
* @author AI Assistant
* @since 2025-11-07
*/
@DeleteMapping("/datasets/{datasetId}/documents/{documentId}/segments/{segmentId}")
public ResultDomain<String> deleteSegment(
@PathVariable(name = "datasetId") String datasetId,
@PathVariable(name = "documentId") String documentId,
@PathVariable(name = "segmentId") String segmentId) {
log.info("删除文档分段: datasetId={}, documentId={}, segmentId={}",
datasetId, documentId, segmentId);
ResultDomain<String> result = new ResultDomain<>();
try {
// 调用Dify API使用默认配置的API Key
String path = "/datasets/" + datasetId + "/documents/" + documentId +
"/segments/" + segmentId;
String response = difyApiClient.delete(path, null);
result.success("删除分段成功", response);
return result;
} catch (Exception e) {
log.error("删除分段失败", e);
result.fail("删除分段失败: " + e.getMessage());
return result;
}
}
/**
* @description 获取分段的子块列表
* @param datasetId Dify数据集ID