Merge remote-tracking branch 'origin/main'

main
xueqingkun 10 months ago
commit b057d3d7cc

@ -24,6 +24,7 @@ public class ItemExtractHandler {
* @param question
* @return
*/
@Deprecated
public String itemExtract(String question) {
List<MessageDTO> messageList = new ArrayList<>();
messageList.add(new MessageDTO("system", "假设你是一个命名实体识别模型且精通社保实体识别." +
@ -43,6 +44,7 @@ public class ItemExtractHandler {
* @param question
* @return
*/
@Deprecated
public List<String> itemExtractByPossibleItem(String question, List<String> possible) {
String template = "请根据以下事项列表,从句子中识别并标注出对应的社保业务事项名称。若句子中不能直接对应到任何事项,就找可能性最高的事项。请确保只识别并标注一种可能性最高的社保业务事项。" +
"事项名称列表:\n" +
@ -60,6 +62,46 @@ public class ItemExtractHandler {
return Collections.singletonList(item);
}
/**
*
*
* @param question
* @param possible
*/
public List<String> itemExtractByPossibleItemWithExample(String question, List<String> possible) {
String template = "请根据以下事项列表,从句子中识别并标注出对应的社保业务事项名称。若句子中不能直接对应到任何事项,就找可能性最高的事项。" +
"请确保只识别并标注一种可能性最高的社保业务事项。\n" +
"事项列表:{}" +
"我现在有一些示例,可供你学习。\n" +
"输入:企业职工多少岁可以退休?输出:企业职工退休\n" +
"输入:深圳的职工退休手续怎么办?输出:深圳企业职工退休\n" +
"输入:如果我是广州人,我在深圳应该怎么办退休手续?输出:广东省其他地区企业职工退休\n" +
"输入:退休的要求是什么?输出:退休\n" +
"输入:本地的农民,如果退休有什么限制?输出:深圳城乡居民退休\n" +
"输入:我是香港企业的法人,如果我想在深圳退休可以吗?输出:港澳台和外籍人员企业职工退休\n" +
"输入:企业的女性干部退休有什么要求吗?输出:企业职工退休\n" +
"输入:普通居民可以退休吗?输出:城乡居保退休\n" +
"输入:单位延缴或个人延缴的情况下,办理退休有哪些注意事项?输出:企业职工退休\n" +
"输入:我是南京市户口,可以在深圳办理退休吗?输出:省外户口企业职工退休\n" +
"输入:我是澳门人,在深圳好多年了,可以根据城乡居民来办理退休吗?输出:港澳台和外籍人员城乡居民退休\n" +
"输入:今天中午吃什么?输出:无关问题\n" +
"现在我给你一句话,请给我输出:\n" +
"输入:{}\n" +
"请直接回答输出:";
List<MessageDTO> messageList = new ArrayList<>();
messageList.add(new MessageDTO("user", StrUtil.format(template, CollUtil.join(possible, ";"), question)));
log.info("itemExtractByPossibleItemWithExample查询语句为:{}", JSONUtil.toJsonStr(messageList));
String item = AiUtil.chatByMessage(messageList);
log.info("itemExtractByPossibleItemWithExample结果为:{}", item);
if (StrUtil.equals("无关问题", item)) {
throw new ItemExtractException("无关事项");
}
return Collections.singletonList(item);
}
@Deprecated
public String itemExtractBusiness(String question) {
List<MessageDTO> messageList = new ArrayList<>();
messageList.add(new MessageDTO("user", "我现在是要进行实体抽取任务,并且精通社保业务,现在需要抽取[业务]这个实体类型的内容。\n" +

@ -317,20 +317,17 @@ public class AskServiceImpl implements AskService {
public SingleTalkResVO singleTalk(SingleTalkReqVO singleTalkReqVO) {
// 单轮对话,直接根据用户的问题去找意图
String intent = identifyIntentHandler.identifyIntent(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(extractValue);
// 然后根据叶子节点,还有意图,去找到所有的对应数据
// 根据用户的意图找到对应的节点
IdentifyIntentEnum intentEnum = IdentifyIntentEnum.getEnumByIntent(intent);
if (ObjectUtil.isEmpty(intentEnum) || null == intentEnum) {
throw new BusinessException("暂不支持该意图的问答");
}
List<String> allItemNode = findItemNodeHandler.findAllItemNode();
List<String> extractValue = itemExtractHandler.itemExtractByPossibleItemWithExample(singleTalkReqVO.getUserTalk(), allItemNode);
// String extractValue = itemExtractHandler.itemExtractBusiness(singleTalkReqVO.getUserTalk());
// 根据提取的内容,开始在知识图谱中寻找节点(首先找叶子节点,如果叶子节点有数据,直接返回,如果叶子节点没数据,再去找分支节点)
List<ItemLeaf> allMatchLeafNode = findItemNodeHandler.findAllMatchLeafNode(extractValue);
// 然后根据叶子节点,还有意图,去找到所有的对应数据
Map<String, List<String>> detailMap = new HashMap<>();
for (ItemLeaf itemLeaf : allMatchLeafNode) {
try {

Loading…
Cancel
Save