package com.supervision.handler.gpt; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONUtil; import com.supervision.ai.AiUtil; import com.supervision.ai.dto.MessageDTO; import com.supervision.exception.ItemExtractException; import lombok.extern.slf4j.Slf4j; import org.springframework.stereotype.Component; import java.util.*; /** * 意图提取Handler */ @Slf4j @Component public class ItemExtractHandler { /** * 提供示例的实体提取 * * @param question 问题 * @param possible 可能的实体 */ public List itemExtractByPossibleItemWithExample(String question, List possible) { String template = "请根据以下事项列表,从句子中识别并标注出对应的社保业务事项名称。若句子中不能直接对应到任何事项,就找可能性最高的事项。" + "请确保只识别并标注一种可能性最高的社保业务事项。不要识别出事项列表之外的事项。\n" + "事项列表:{}\n" + "我现在有一些示例,可供你学习。\n" + "输入:企业职工多少岁可以退休?输出:企业职工退休\n" + "输入:深圳的职工退休手续怎么办?输出:深圳企业职工退休\n" + "输入:如果我是广州人,我在深圳应该怎么办退休手续?输出:广东省其他地区企业职工退休\n" + "输入:退休的要求是什么?输出:退休\n" + "输入:本地的农民,如果退休有什么限制?输出:深圳城乡居民退休\n" + "输入:我是香港企业的法人,如果我想在深圳退休可以吗?输出:港澳台和外籍人员企业职工退休\n" + "输入:企业的女性干部退休有什么要求吗?输出:企业职工退休\n" + "输入:普通居民可以退休吗?输出:城乡居保退休\n" + "输入:单位延缴或个人延缴的情况下,办理退休有哪些注意事项?输出:企业职工退休\n" + "输入:我是南京市户口,可以在深圳办理退休吗?输出:省外户口企业职工退休\n" + "输入:我是澳门人,在深圳好多年了,可以根据城乡居民来办理退休吗?输出:港澳台和外籍人员城乡居民退休\n" + "输入:今天中午吃什么?输出:无关问题\n" + "现在我给你一句话,请给我输出:\n" + "输入:{}\n" + "请直接回答输出:"; List 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); } }