提交nebula graph数据更新

main
liu 11 months ago
parent 014906a488
commit 61d0046f9b

@ -29,8 +29,8 @@ import java.util.Map;
* @author :liu
* create :2020-11-16 10:50
**/
@Component
@Aspect
//@Component
//@Aspect
@Slf4j
public class RequestLogConfig {

@ -19,7 +19,7 @@ import java.util.Map;
@Slf4j
public class AiUtil {
private static final String API_KEY = "985ddf220e63f7f9fd3a038c93515724.7dKiAoSSm3JHqkTW";
private static final String API_KEY = "789c02fa1000afd951145efff01e0461.tGLSHnIsiEEiWNNN";
private static final String TOKEN;

@ -43,24 +43,21 @@ public class ItemExtractHandler {
* @param question
* @return
*/
public List<String> itemExtractByPossibleItem(String question, Collection<String> possible) {
// TODO 这里暂时没办法,暂时先当做是退休
// List<MessageDTO> messageList = new ArrayList<>();
// messageList.add(new MessageDTO("system", "假设你是一个命名实体识别模型且精通社保实体识别." +
// "现在我会给你一个句子,请根据我的要求识别出句子中的实体数据在社保业务中属于哪一类业务事项,并给我事项名称,同时,我会给你一些事项可供参考,尽量从这些事项中进行匹配.如果未找到事项,就回复:未找到;其他什么都不要说!"));
// messageList.add(new MessageDTO("assistant", "好的"));
// messageList.add(new MessageDTO("user", StrUtil.format("可能的事项有:[{}]", CollUtil.join(possible, ";"))));
// messageList.add(new MessageDTO("user", "句子是:" + question + ";请识别这句话中的社保业务事项,如果识别出多个,请用;分隔.除了识别到的业务事项,其他什么都不要说"));
// log.info("itemExtractByPossibleItem查询语句为:{}", JSONUtil.toJsonStr(messageList));
// String item = AiUtil.chatByMessage(messageList);
// if (StrUtil.equals("未找到", item)) {
// throw new ItemExtractException("未从问题中找到事项");
// }
// if (StrUtil.contains(item, ";")){
// return Arrays.asList(item.split(";"));
// }
// return Collections.singletonList(item);
return Collections.singletonList("退休");
public List<String> itemExtractByPossibleItem(String question, List<String> possible) {
String template = "请根据以下事项列表,从句子中识别并标注出对应的社保业务事项名称。若句子中不能直接对应到任何事项,就找可能性最高的事项。请确保只识别并标注一种可能性最高的社保业务事项。" +
"事项名称列表:\n" +
"{}" +
"句子是:{}";
List<MessageDTO> messageList = new ArrayList<>();
messageList.add(new MessageDTO("user", StrUtil.format(template, CollUtil.join(possible, ";"), question)));
log.info("itemExtractByPossibleItem查询语句为:{}", JSONUtil.toJsonStr(messageList));
String item = AiUtil.chatByMessage(messageList);
log.info("itemExtractByPossibleItem结果为:{}", item);
if (StrUtil.equals("未找到", item)) {
throw new ItemExtractException("未从问题中找到事项");
}
return Collections.singletonList(item);
}
public String itemExtractBusiness(String question) {

@ -318,9 +318,13 @@ public class AskServiceImpl implements AskService {
// 单轮对话,直接根据用户的问题去找意图
String intent = identifyIntentHandler.identifyIntent(singleTalkReqVO.getUserTalk());
// 提供用户问题中的业务
String extractValue = itemExtractHandler.itemExtractBusiness(singleTalkReqVO.getUserTalk());
List<String> allItemNode = findItemNodeHandler.findAllItemNode();
List<String> extractValue = itemExtractHandler.itemExtractByPossibleItem(singleTalkReqVO.getUserTalk(), allItemNode);
// String extractValue = itemExtractHandler.itemExtractBusiness(singleTalkReqVO.getUserTalk());
// 根据提取的内容,开始在知识图谱中寻找节点(首先找叶子节点,如果叶子节点有数据,直接返回,如果叶子节点没数据,再去找分支节点)
List<ItemLeaf> allMatchLeafNode = findItemNodeHandler.findAllMatchLeafNode(Collections.singletonList(extractValue));
List<ItemLeaf> allMatchLeafNode = findItemNodeHandler.findAllMatchLeafNode(extractValue);
// 然后根据叶子节点,还有意图,去找到所有的对应数据
// 根据用户的意图找到对应的节点
IdentifyIntentEnum intentEnum = IdentifyIntentEnum.getEnumByIntent(intent);

Loading…
Cancel
Save