package Tools.MaxKb.Service.Impl; import cn.hutool.core.util.StrUtil; import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpResponse; import com.alibaba.fastjson.JSONObject; import com.jfinal.kit.PropKit; import java.io.File; import java.util.ArrayList; import java.util.List; public class MaxKbImpl { //MaxKB的url static final String baseUrl = PropKit.get("baseUrl"); //获取身份识别码接口 static final String Authorization_URL = baseUrl + "/api/user/login"; /** * 上传QA文件到知识库 * * @param authCode 身份识别码 * @param uploadFile 上传文件路径 */ public static String uploadQA(String authCode, String zskId, String uploadFile) { //知识库url上传地址 String qaUrl = baseUrl + "/api/dataset/" + zskId + "/document/qa"; //使用hutool工具箱里面的httpPost功能,向指定的接口发起上传文件的请求,在Header中携带参数authCode HttpResponse response = HttpRequest.post(qaUrl) .header("Accept", "application/json, text/plain, */*") .header("Accept-Encoding", "gzip,deflate") .header("Accept-Language", "zh-CN,zh;q=0.9") .header("Authorization", authCode)// 添加header .header("Connection", "keep-alive") .header("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundaryhEiEDpZDka6byweA") .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36") .form("file", new File(uploadFile)).execute();// 添加文件 // 获取响应内容 String result = response.body(); JSONObject jo = JSONObject.parseObject(result); int code = jo.getInteger("code"); if (code != 200) { System.out.println("请求失败"); return null; } return jo.getJSONArray("data").getJSONObject(0).getString("id"); } /** * 上传文档并分段 * * @param authCode 验证码 * @param uploadFile 上传的文件 * @return */ public static JSONObject uploadDocumentSplit(String authCode, String uploadFile) { //知识库url上传地址 String qaUrl = baseUrl + "/api/dataset/document/split"; //使用hutool工具箱里面的httpPost功能,向指定的接口发起上传文件的请求,在Header中携带参数authCode HttpResponse response = HttpRequest.post(qaUrl) .header("Accept", "application/json, text/plain, */*") .header("Accept-Encoding", "gzip,deflate") .header("Accept-Language", "zh-CN,zh;q=0.9") .header("Authorization", authCode)// 添加header .header("Connection", "keep-alive") .header("Content-Type", "multipart/form-data; boundary=----WebKitFormBoundaryhEiEDpZDka6byweA") .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36") .form("file", new File(uploadFile)).execute();// 添加文件 // 获取响应内容 String result = response.body(); JSONObject jo = JSONObject.parseObject(result); int code = jo.getInteger("code"); if (code != 200) { System.out.println("请求失败"); return null; } return jo; } /** * 发送请求获取识别码 * * @throws Exception */ public static String getAuthorization() { //管理员账号与密码 String username = PropKit.get("MaxKBUsername"); String password = PropKit.get("MaxKBPassword"); JSONObject requestBody = new JSONObject(); requestBody.put("username", username); requestBody.put("password", password); HttpResponse response = HttpRequest.post(Authorization_URL) .header("Content-Type", "application/json") .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36") .header("Origin", baseUrl) .header("Referer", baseUrl + "/ui/login") .body(requestBody.toString()) .timeout(10000) // 可选:设置超时时间(毫秒) .execute(); //System.out.println(response); // 详细的状态处理 if (response.isOk()) { String body = response.body(); if (StrUtil.isBlank(body)) { throw new RuntimeException("响应内容为空"); } try { JSONObject responseJson = JSONObject.parseObject(body); String data = responseJson.getString("data"); if (StrUtil.isBlank(data)) { throw new RuntimeException("未获取到data字段"); } return data; } catch (Exception e) { throw new RuntimeException("解析响应JSON失败: " + e.getMessage()); } } else { String errorBody = response.body(); throw new RuntimeException(String.format("请求失败 [%d]: %s", response.getStatus(), StrUtil.isBlank(errorBody) ? "无错误信息" : errorBody)); } } /** * 删除知识库文档 * * @param authCode 身份识别码 * @param zskId 知识库id * @param documentId 文档id * @return */ public static com.alibaba.fastjson.JSONObject delDocument(String authCode, String zskId, String documentId) { String url = baseUrl + "/api/dataset/" + zskId + "/document/" + documentId + "?dep=[object+Object]&__v_isRef=true&__v_isShallow=false&_rawValue=false&_value=false"; HttpResponse response = HttpRequest.delete(url) .header("Accept", "application/json, text/plain, */*") .header("Accept-Encoding", "gzip,deflate") .header("Accept-Language", "zh-CN,zh;q=0.9") .header("Authorization", authCode)// 添加header .header("Connection", "keep-alive") .header("Content-Type", "application/json") .header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/131.0.0.0 Safari/537.36") .execute(); return com.alibaba.fastjson.JSONObject.parseObject(response.body()); } /** * 生成问题 * * @param authCode 身份识别码 * @param zskId 知识库id * @param modelId 模型id * @param documentId 文档id * @return */ public static com.alibaba.fastjson.JSONObject generateQuestion(String authCode, String zskId, String modelId, String documentId) { String url = baseUrl + "/api/dataset/" + zskId + "/document/batch_generate_related"; com.alibaba.fastjson.JSONObject jo = new com.alibaba.fastjson.JSONObject(); jo.put("model_id", modelId); jo.put("prompt", "内容:{data}\\n\\n请总结上面的内容,并根据内容总结生成 5 个问题。\\n回答要求:\\n- 请只输出问题;\\n- 请将每个问题放置标签中。"); List list = new ArrayList<>(); list.add(documentId); jo.put("document_id_list", list); HttpResponse response = HttpRequest.put(url) .header("Accept", "application/json, text/plain, */*") .header("Accept-Encoding", "gzip,deflate") .header("Accept-Language", "zh-CN,zh;q=0.9") .header("Authorization", authCode)// 添加header .header("Connection", "keep-alive") .header("Content-Type", "application/json") .body(jo.toJSONString()).execute(); return com.alibaba.fastjson.JSONObject.parseObject(response.body()); } /** * 向知识库批量上传文档 * * @param authCode 授权码 * @param zskId 知识库ID * @param body 分段后的文字内容 * @return */ public static String _bach(String authCode, String zskId, String body) { String url = baseUrl + "/api/dataset/" + zskId + "/document/_bach"; HttpResponse response = HttpRequest.post(url) .header("Accept", "application/json, text/plain, */*") .header("Accept-Encoding", "gzip,deflate") .header("Accept-Language", "zh-CN,zh;q=0.9") .header("Authorization", authCode)// 添加header .header("Connection", "keep-alive") .header("Content-Type", "application/json") .body(body).execute(); return response.body(); } }