Преглед изворни кода

Merge remote-tracking branch 'origin/master'

yys пре 2 месеци
родитељ
комит
8b8ee159e4

+ 3 - 0
fs-service/src/main/java/com/fs/fastGpt/domain/FastGptChatSession.java

@@ -73,4 +73,7 @@ public class FastGptChatSession extends BaseEntity
 
     private Integer isReply;
 
+    //客户和销售对话中实际收集到的信息
+    private String userInfo;
+
 }

+ 3 - 0
fs-service/src/main/java/com/fs/fastGpt/domain/FastGptRole.java

@@ -84,4 +84,7 @@ public class FastGptRole extends BaseEntity
 
     //课程Id
     private Long courseId;
+
+    //需要获取的客户信息
+    private String userInfo;
 }

+ 1 - 1
fs-service/src/main/java/com/fs/fastGpt/mapper/FastGptRoleMapper.java

@@ -90,7 +90,7 @@ public interface FastGptRoleMapper
 
     @Select("select id dictValue,name dictLabel from fastgpt_role_type ")
     List<OptionsVO> selectFastGptRoleType();
-    @Select("select r.role_id, r.role_name,t.contact_info,r.company_id, r.create_time, r.update_time, r.role_type, r.mode_config_json, r.mode, r.kf_id, r.kf_url, r.avatar, r.kf_media_id,r.reminder_words, r.bind_corp_id,r.channel_type,r.send_course_status,r.course_id from fastgpt_role r LEFT JOIN fastgpt_role_type t on t.id =r.role_type where role_id = #{roleId}")
+    @Select("select r.role_id, r.role_name,t.contact_info,r.company_id, r.create_time, r.update_time, r.role_type, r.mode_config_json, r.mode, r.kf_id, r.kf_url, r.avatar, r.kf_media_id,r.reminder_words, r.bind_corp_id,r.channel_type,r.send_course_status,r.course_id,r.user_info from fastgpt_role r LEFT JOIN fastgpt_role_type t on t.id =r.role_type where role_id = #{roleId}")
     FastGptRole selectFastGptRoleTypeByRoleId(Long roleId);
 
     List<FastGptRole> selectFastGptRoleByRoleIds(@Param("roleIds") List<Long> roleIds);

+ 136 - 48
fs-service/src/main/java/com/fs/fastGpt/service/impl/AiHookServiceImpl.java

@@ -654,7 +654,7 @@ public class AiHookServiceImpl implements AiHookService {
                 }*/
                 if (result.isLongText()){
                     //新增用户信息
-                    addUserInfo(contentKh, qwExternalContacts.getId(),fastGptChatSession);
+                    addUserInfoNew(contentKh, qwExternalContacts.getId(),fastGptChatSession);
                     if (type==16){
                         sendAiVoiceMsg(content,sender,uid,serverId,user);
                     }else {
@@ -665,7 +665,7 @@ public class AiHookServiceImpl implements AiHookService {
 
                     List<String> countList = countString(content);
                     //新增用户信息
-                    addUserInfo(contentKh, qwExternalContacts.getId(),fastGptChatSession);
+                    addUserInfoNew(contentKh, qwExternalContacts.getId(),fastGptChatSession);
                     for (String msg : countList) {
                         if (type==16){
                             sendAiVoiceMsg(msg,sender,uid,serverId,user);
@@ -1537,7 +1537,7 @@ public class AiHookServiceImpl implements AiHookService {
             }
 
             //添加关键词
-            addPromptWord(messageList,msgC,qwExternalContactsId,role.getReminderWords(), role.getContactInfo(),fastGptChatSession.getSessionId());
+            addPromptWordNew(messageList,msgC,qwExternalContactsId,role,fastGptChatSession);
             R r = chatService.initiatingTakeChat(param, "http://1.95.196.10:3000/api/", appKey);
             Object data1 = r.get("data");
             if(!(data1 instanceof KnowledgeBaseResult)){
@@ -1590,6 +1590,70 @@ public class AiHookServiceImpl implements AiHookService {
         }
     }
     /** 组装发送AI内容 **/
+    private void addPromptWordNew(List<ChatParam.Message> messageList,String count,Long extId,FastGptRole role,FastGptChatSession fastGptChatSession){
+
+        FastGptChatConversation conversation = new FastGptChatConversation();
+        conversation.setAiInfo(new com.alibaba.fastjson.JSONObject());
+        conversation.setUserInfo(new com.alibaba.fastjson.JSONObject());
+        conversation.setHistory(new com.alibaba.fastjson.JSONObject());
+
+        //组装客户信息
+        String sessionUserInfo = fastGptChatSession.getUserInfo();
+        String[] split = role.getUserInfo().split(",");
+        com.alibaba.fastjson.JSONObject userInfo = conversation.getUserInfo();
+        if(sessionUserInfo != null){
+            Map<String,String> map = com.alibaba.fastjson.JSONObject.parseObject(sessionUserInfo, HashMap.class);
+            if(role.getUserInfo() != null){
+                for (String name : split) {
+                    if (name != null) {
+                        String value = map.get(name);
+                        if(value != null){
+                            userInfo.put(name,value);
+                        }else{
+                            userInfo.put(name,"");
+                        }
+                    }
+                }
+            }
+        }else{
+            for (String name : split) {
+                if (name != null) {
+                    userInfo.put(name,"");
+                }
+            }
+        }
+
+
+        List<FastGptChatMsg> msgs=fastGptChatMsgService.selectFastGptChatMsgByMsgSessionIdAndExtId(fastGptChatSession.getSessionId(),extId);
+        if (!msgs.isEmpty()){
+            com.alibaba.fastjson.JSONObject history = conversation.getHistory();
+            Collections.reverse(msgs);
+            msgs.remove(msgs.size() - 1);
+            for (FastGptChatMsg msg : msgs) {
+                Integer sendType = msg.getSendType();
+                String content = msg.getContent();
+                if(sendType!=1){
+                    if (content!=null&&content.length()>150){
+                        continue;
+                    }
+                }
+                history.put(sendType==1?"user":"ai",content);
+            }
+        }
+
+        if (count!=null&& !count.isEmpty()){
+            conversation.setUserContent(count);
+        }
+
+
+        ChatParam.Message message1=new ChatParam.Message();
+        message1.setRole("user");
+        Gson gson = new Gson();
+        String jsonStr = gson.toJson(conversation);
+        message1.setContent(jsonStr);
+        messageList.add(message1);
+    }
+    /** 组装发送AI内容 **/
     private void addPromptWord(List<ChatParam.Message> messageList,String count,Long extId,String words,String countInfo,Long sessionId){
 
         FastGptChatConversation conversation = new FastGptChatConversation();
@@ -1683,7 +1747,10 @@ public class AiHookServiceImpl implements AiHookService {
 
         List<String> stringList = new ArrayList<>();
         // 所有的回车都分段发送
-        String[] split = input.split("\n");
+        String[] split = input.split("\n\n");
+        if(split.length == 1){
+            split = input.split("\n");
+        }
         for (String s : split) {
             List<String> sList = subCount(s);
             stringList.addAll(sList);
@@ -1733,36 +1800,57 @@ public class AiHookServiceImpl implements AiHookService {
 
         return stringList;
     }
+
+    private static final Pattern SENTENCE_PATTERN = Pattern.compile("([~。!?]+)");
     /** 内容分段 **/
     static List<String> subCount(String s){
-        ArrayList<String> a = new ArrayList<>();
-        if (s.length()>30){
-            String substring = s.substring(30);
-            Pattern pattern = Pattern.compile("([~。!?]+)");
-            String[] segments = pattern.split(substring);
-            Matcher matcher = pattern.matcher(substring);
-            if (matcher.find()&&segments.length>1) {
-                int dh=0;
-                String group = matcher.group();
-                if (group.equals("。")){
-                    group="";
-                    dh=1;
-                }
-                String s1 = s.substring(0, 30) + segments[0] + group;
-                a.addAll(Arrays.asList(s1));
-                if (s.substring(s1.length())!=null&&!s.substring(s1.length()+dh).equals("")){
-                    List<String> add = subCount(s.substring(s1.length()+dh));
-                    a.addAll(add);
+        List<String> result = new ArrayList<>();
+
+        if (s == null || s.isEmpty()) {
+            return result;
+        }
+
+        int start = 0;
+        while (start < s.length()) {
+            if (s.length() - start <= 30) {
+                result.add(s.substring(start));
+                break;
+            }
+
+            String remainingText = s.substring(start + 30);
+            Matcher matcher = SENTENCE_PATTERN.matcher(remainingText);
+
+            if (matcher.find()) {
+                String delimiter = matcher.group();
+                int delimiterEndPos = matcher.end();
+                String firstSegment = remainingText.substring(0, delimiterEndPos - delimiter.length());
+                String completeSegment = s.substring(start, start + 30) + firstSegment;
+
+                if ("。".equals(delimiter)) {
+                    result.add(completeSegment);
+                    start = start + 30 + (delimiterEndPos - delimiter.length()) + 1;
+                } else {
+                    result.add(completeSegment + delimiter);
+                    start = start + 30 + delimiterEndPos;
                 }
-            }else {
-                a.add(s);
-                return  a;
+            } else {
+                result.add(s.substring(start));
+                break;
             }
-        }else {
-            a.add(s);
         }
-        return  a;
+
+        return result;
     }
+
+    private void addUserInfoNew(String word,Long extId,FastGptChatSession fastGptChatSession)  {
+        com.alibaba.fastjson.JSONObject jsonObject = com.alibaba.fastjson.JSONObject.parseObject(word);
+        String userInfo = jsonObject.getString("userInfo");
+        FastGptChatSession chatSession = new FastGptChatSession();
+        chatSession.setSessionId(fastGptChatSession.getSessionId());
+        chatSession.setUserInfo(userInfo);
+        fastGptChatSessionMapper.updateFastGptChatSession(chatSession);
+    }
+
     /** 增加用户信息以及打标签 **/
     private void addUserInfo(String word,Long extId,FastGptChatSession fastGptChatSession)  {
         Pattern pattern = Pattern.compile("【用户状态信息(.*?)】", Pattern.DOTALL);
@@ -2098,28 +2186,28 @@ public class AiHookServiceImpl implements AiHookService {
             }else {
 
                 if(qwExternalContacts.getType()!=null&&qwExternalContacts.getType()==1){
-                    if(sendUser.getFastGptRoleId()!=null){
-                        fastGptChatSession = new FastGptChatSession();
-                        String chatId = UUID.randomUUID().toString();
-                        fastGptChatSession.setChatId(chatId);
+                    fastGptChatSession = new FastGptChatSession();
+                    String chatId = UUID.randomUUID().toString();
+                    fastGptChatSession.setChatId(chatId);
+                    if(sendUser.getFastGptRoleId() != null){
                         fastGptChatSession.setKfId(sendUser.getFastGptRoleId().toString());
-                        fastGptChatSession.setStatus(1);
-                        fastGptChatSession.setRemindCount(0);
-                        fastGptChatSession.setRemindStatus(0);
-                        fastGptChatSession.setCreateTime(new Date());
-                        fastGptChatSession.setQwExtId(qwExternalContacts.getId());
-                        fastGptChatSession.setQwUserId(sendUser.getId());
-                        fastGptChatSession.setIsArtificial(0);
-                        fastGptChatSession.setAvatar(qwExternalContacts.getAvatar());
-                        fastGptChatSession.setNickName(qwExternalContacts.getName());
-                        fastGptChatSession.setCompanyId(sendUser.getCompanyId());
-                        fastGptChatSession.setLastTime(new Date());
-                        fastGptChatSession.setIsReply(0);
-                        fastGptChatSession.setUserId(String.valueOf(sender));
-                        fastGptChatSessionMapper.insertFastGptChatSession(fastGptChatSession);
-                        addUserSex(qwExternalContacts);
-                        saveQwUserMsg(fastGptChatSession,2,count,sendUser);
                     }
+                    fastGptChatSession.setStatus(1);
+                    fastGptChatSession.setRemindCount(0);
+                    fastGptChatSession.setRemindStatus(0);
+                    fastGptChatSession.setCreateTime(new Date());
+                    fastGptChatSession.setQwExtId(qwExternalContacts.getId());
+                    fastGptChatSession.setQwUserId(sendUser.getId());
+                    fastGptChatSession.setIsArtificial(0);
+                    fastGptChatSession.setAvatar(qwExternalContacts.getAvatar());
+                    fastGptChatSession.setNickName(qwExternalContacts.getName());
+                    fastGptChatSession.setCompanyId(sendUser.getCompanyId());
+                    fastGptChatSession.setLastTime(new Date());
+                    fastGptChatSession.setIsReply(0);
+                    fastGptChatSession.setUserId(String.valueOf(sender));
+                    fastGptChatSessionMapper.insertFastGptChatSession(fastGptChatSession);
+                    addUserSex(qwExternalContacts);
+                    saveQwUserMsg(fastGptChatSession,2,count,sendUser);
                 }
             }
         }

+ 3 - 1
fs-service/src/main/resources/mapper/fastGpt/FastGptChatSessionMapper.xml

@@ -25,10 +25,11 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         <result property="qwUserId"    column="qw_user_id"    />
         <result property="lastTime"    column="last_time"    />
         <result property="isReply"    column="is_reply"    />
+        <result property="userInfo"    column="user_info"    />
     </resultMap>
 
     <sql id="selectFastGptChatSessionVo">
-        select session_id,remind_time,is_reply,last_time,remind_status,remind_count,qw_ext_id,qw_user_id,chat_id,is_artificial, user_id, kf_id, create_time, update_time, status, company_id, is_look, user_type, nick_name, avatar from fastgpt_chat_session
+        select session_id,remind_time,is_reply,last_time,remind_status,remind_count,qw_ext_id,qw_user_id,chat_id,is_artificial, user_id, kf_id, create_time, update_time, status, company_id, is_look, user_type, nick_name, avatar,userInfo from fastgpt_chat_session
     </sql>
 
     <select id="selectFastGptChatSessionList" parameterType="FastGptChatSession" resultMap="FastGptChatSessionResult">
@@ -121,6 +122,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
             <if test="qwUserId != null">qw_user_id = #{qwUserId},</if>
             <if test="lastTime != null">last_time = #{lastTime},</if>
             <if test="isReply != null">is_reply = #{isReply},</if>
+            <if test="userInfo != null">user_info = #{userInfo},</if>
         </trim>
         where session_id = #{sessionId}
     </update>