You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

132 lines
4.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package Tools.MaxKb.Service;
import Tools.MaxKb.Service.Impl.MaxKbImpl;
import Tools.MaxKb.Model.MaxKbModel;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.Record;
import java.io.File;
import java.util.List;
public class MaxKbService {
public static MaxKbModel mm = new MaxKbModel();
/**
* 获取数据集ID
*
* @param zskName 知识库名称
* @return
*/
public static String getZskId(String zskName) {
List<Record> list = mm.getDataSetList(zskName);
if (list.size() > 1) {
System.out.println("数据集:【" + zskName + "】名称重复,请检查后重新运行!");
return null;
}
if (list.isEmpty()) {
System.out.println("数据集:【" + zskName + "】不存在,请检查后重新运行!");
return null;
}
//数据集ID
return list.getFirst().getStr("id");
}
/**
* 上传文件到知识库
*
* @param zskName 数据集名称
* @param uploadFile 文件路径
*/
public static String uploadQA(String zskName, String uploadFile) {
//数据集ID
String zskId = getZskId(zskName);
//在上传文档前,需要删除掉旧的同名文档
File fi = new File(uploadFile);
String fileName = fi.getName();
//获取身份识别
String authCode = MaxKbImpl.getAuthorization();
//上传文档
List<Record> listDocuments = mm.getDocumentListByDataSetId(zskId);
for (Record record : listDocuments) {
String documentName = record.getStr("name");
if (documentName.equals(fileName)) {
String documentId = record.getStr("id");
//1、需要找出根据此文档有哪些已经生成的问题并且需要删除掉所有已经生成的问题
mm.delDocumentProblem(documentId);
//准备删除掉旧的文档
MaxKbImpl.delDocument(authCode, zskId, documentId);
System.out.println("删除旧的文档成功:" + documentName);
}
}
//上传新的文档
return MaxKbImpl.uploadQA(authCode, zskId, uploadFile);
}
/**
* 根据模型名称获取模型ID
*
* @param modelName 模型名称
* @return
*/
public static String getModelIdByModelName(String modelName) {
List<Record> list = mm.getModel(modelName);
if (list.isEmpty()) return null;
return list.getFirst().getStr("id");
}
/**
* 分割文档
*
* @param uploadFile
* @return
*/
public static JSONObject splitDocument(String uploadFile) {
return MaxKbImpl.uploadDocumentSplit(MaxKbImpl.getAuthorization(), uploadFile);
}
/**
* 上传文档
*/
public static String _bach(String zskName, String uploadFile) {
//数据集ID
String zskId = getZskId(zskName);
//上传文件
JSONObject jo = splitDocument(uploadFile);
JSONArray ja = jo.getJSONArray("data");
JSONArray jaRes = new JSONArray();
for (Object o : ja) {
JSONObject j = (JSONObject) (o);
j.put("paragraphs", j.getJSONArray("content"));
j.remove("content");
jaRes.add(j);
}
return MaxKbImpl._bach(MaxKbImpl.getAuthorization(), zskId, jaRes.toString());
}
/**
* 批量生成相关问题
*
* @param documentId 文档id
* @return
*/
public static String batch_generate_related(String zskName, String documentId) {
//数据集ID
String zskId = getZskId(zskName);
return MaxKbImpl.batch_generate_related(MaxKbImpl.getAuthorization(), zskId, documentId);
}
/**
* 生成问题
* @param zskName 知识库名称
* @param modelName 模型名称
* @param documentId 文档Id
* @return
*/
public static JSONObject generateQuestion(String zskName, String modelName, String documentId){
return MaxKbImpl.generateQuestion(getZskId(zskName), getModelIdByModelName(modelName), documentId);
}
}