Quellcode durchsuchen

DeepSeek RAG接口代码提交

S0025136190 vor 7 Monaten
Ursprung
Commit
1a25add6da

+ 91 - 12
takai-admin/src/main/java/com/takai/web/controller/takaiai/TakaiAiController.java

@@ -2,9 +2,13 @@ package com.takai.web.controller.takaiai;
 
 import com.alibaba.fastjson2.JSONObject;
 import com.github.pagehelper.PageHelper;
+import com.takai.ai.domain.dto.TakaiDialogReqDTO;
+import com.takai.ai.domain.dto.TakaiQuestionDTO;
 import com.takai.ai.domain.entity.*;
 import com.takai.ai.service.ITakaiAiService;
+import com.takai.bigmodel.domain.dto.DialogReqDTO;
 import com.takai.bigmodel.domain.dto.DialogRespDTO;
+import com.takai.bigmodel.domain.dto.QuestionDTO;
 import com.takai.bigmodel.domain.entity.PageParams;
 import com.takai.common.core.controller.BaseController;
 import com.takai.common.core.domain.AjaxResult;
@@ -21,6 +25,7 @@ import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
@@ -52,18 +57,6 @@ public class TakaiAiController extends BaseController {
         return success(takaiAisService.asyncCompletions(params));
     }
 
-    /**
-     * 对话详情
-     * @param dialogId
-     * @return
-     */
-    @GetMapping("/dialog/detail/{dialogId}")
-    public AjaxResult dialogDetail(@PathVariable String dialogId)
-    {
-        List<TakaiDialogRespDTO> detail = takaiAisService.getDialogDetail(dialogId);
-        return AjaxResult.success(detail);
-    }
-
     /**
      * 应用列表
      * @param params
@@ -381,6 +374,92 @@ public class TakaiAiController extends BaseController {
     }
 
 
+    /**
+     * 应用列表
+     * @return
+     */
+    @GetMapping("/application/list")
+    public AjaxResult index(){
+        List<TakaiApplication> appList = takaiAisService.getApplicationList();
+        return success(appList);
+    }
+
+    /**
+     * 保存聊天记录
+     * @param dialogReqDTO
+     * @return
+     */
+    @PostMapping("/dialog/save")
+    public AjaxResult saveDialog(@RequestBody TakaiDialogReqDTO dialogReqDTO)
+    {
+        takaiAisService.saveDialog(dialogReqDTO);
+        return success();
+    }
+
+    /**
+     * 聊天集合
+     * @return
+     */
+    @GetMapping("/dialog/list/{appId}")
+    public AjaxResult dialogList(@PathVariable String appId)
+    {
+        List<Object> dialogs = takaiAisService.getDialogList(appId);
+        return success(dialogs);
+    }
+
+    /**
+     * 聊天详情
+     * @param dialogId
+     * @return
+     */
+    @GetMapping("/dialog/detail/{dialogId}")
+    public AjaxResult dialogDetail(@PathVariable String dialogId)
+    {
+        List<TakaiDialogRespDTO> detail = takaiAisService.getDialogDetail(dialogId);
+        return success(detail);
+    }
+
+    /**
+     * 删除聊天记录
+     * @param id
+     * @return
+     */
+    @DeleteMapping("/dialog/del/{id}")
+    public AjaxResult delDialog(@PathVariable String id)
+    {
+        takaiAisService.DelDialogDetail(id);
+        return success();
+    }
+
+    /**
+     * 聊天标题重命名
+     * @param dialogReqDTO
+     * @return
+     */
+    @PutMapping("/dialog/update")
+    public AjaxResult updateDialog(@RequestBody TakaiDialogReqDTO dialogReqDTO)
+    {
+        takaiAisService.updateDialog(dialogReqDTO);
+        return success();
+    }
+
+    /**
+     * 预设问题
+     * @param appId
+     * @return
+     */
+    @GetMapping("/presets/{appId}")
+    public AjaxResult presets(@PathVariable String appId){
+        List<TakaiQuestionDTO> list = takaiAisService.selectQuestionByAppId(appId);
+        List<String> strList = new ArrayList();
+        for (TakaiQuestionDTO vo: list){
+            strList.add(vo.getQuestion());
+        }
+        return success(strList);
+    }
+
+
+
 
 
 

+ 18 - 7
takai-admin/src/main/resources/application-dev.yml

@@ -6,16 +6,19 @@ spring:
         druid:
             # 主库数据源
             master:
-                url: jdbc:mysql://localhost:3306/tk-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                url: jdbc:mysql://localhost:3306/ai_master?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                 username: root
-                password: root
+                password: password
+                hikari:
+                    pool-name: master-Pool
             # 从库数据源
             slave:
                 # 从数据源开关/默认关闭
-                enabled: false
-                url: 
-                username: 
-                password: 
+                url: jdbc:mysql://localhost:3306/tk-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                username: root
+                password: password
+                hikari:
+                    pool-name: slave-Pool
             # 初始连接数
             initialSize: 5
             # 最小连接池数量
@@ -58,4 +61,12 @@ spring:
                     merge-sql: true
                 wall:
                     config:
-                        multi-statement-allow: true
+                        multi-statement-allow: true
+    jpa:
+        hibernate:
+            ddl-auto: update
+        show-sql: true
+        properties:
+            hibernate:
+                dialect: org.hibernate.dialect.MySQL8Dialect
+                format_sql: true

+ 12 - 5
takai-admin/src/main/resources/application-prd.yml

@@ -6,16 +6,15 @@ spring:
         druid:
             # 主库数据源
             master:
-                url: jdbc:mysql://localhost:3306/chat?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                url: jdbc:mysql://localhost:3306/rag_master?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
                 username: chat
                 password: DZzx6ACMhinTtTtS
             # 从库数据源
             slave:
                 # 从数据源开关/默认关闭
-                enabled: false
-                url: 
-                username: 
-                password: 
+                url: jdbc:mysql://localhost:3306/chat?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
+                username: chat
+                password: DZzx6ACMhinTtTtS
             # 初始连接数
             initialSize: 5
             # 最小连接池数量
@@ -59,6 +58,14 @@ spring:
                 wall:
                     config:
                         multi-statement-allow: true
+    jpa:
+        hibernate:
+            ddl-auto: update
+        show-sql: true
+        properties:
+            hibernate:
+                dialect: org.hibernate.dialect.MySQL8Dialect
+                format_sql: true
 
 # 日志配置
 logging:

+ 50 - 0
takai-ai/src/main/java/com/takai/ai/mapper/TakaiDialogMapper.java

@@ -1,5 +1,7 @@
 package com.takai.ai.mapper;
 
+import com.takai.ai.domain.dto.TakaiDialogDetailReqDTO;
+import com.takai.ai.domain.dto.TakaiDialogReqDTO;
 import com.takai.ai.domain.dto.TakaiDialogRespDTO;
 import org.apache.ibatis.annotations.Param;
 
@@ -19,4 +21,52 @@ public interface TakaiDialogMapper
 
     List<TakaiDialogRespDTO> selectDialogExport(String appId);
 
+    /**
+     * 查询消息信息
+     * @return 消息信息
+     */
+    public List<TakaiDialogRespDTO> selectDialogList(String appId);
+
+
+    /**
+     * 查询对话消息头表信息
+     * @param dialogId
+     * @return
+     */
+    public String selectDialogById(String dialogId);
+
+    /**
+     * 查询对话消息明细表信息
+     * @param dialogId
+     * @return
+     */
+    public String selectDialogDetailById(String dialogId);
+
+
+    /**
+     * 新增对话消息头表信息
+     *
+     * @param dto
+     * @return 结果
+     */
+    public void insertDialog(TakaiDialogReqDTO dto);
+
+    /**
+     * 新增对话消息头表信息
+     *
+     * @param dialogId
+     * @return 结果
+     */
+    public void insertDialogDetail(TakaiDialogDetailReqDTO dialogId);
+
+    int delDialog(String id);
+
+    int delDialogDetail(String dialogId);
+
+    void updateDialog(TakaiDialogReqDTO dialogReqDTO);
+
+    List<TakaiDialogRespDTO> selectDialogListByAppId(String appId);
+
+    List<TakaiDialogRespDTO> selectDialog(String appId);
+
 }

+ 2 - 0
takai-ai/src/main/java/com/takai/ai/mapper/TakaiDocumentMapper.java

@@ -47,4 +47,6 @@ public interface TakaiDocumentMapper
 
     int delDocument(String documentId);
 
+    int delDocumentByKnowledgeId(String knowledgeId);
+
 }

+ 2 - 0
takai-ai/src/main/java/com/takai/ai/mapper/TakaiDocumentSettingsMapper.java

@@ -12,4 +12,6 @@ public interface TakaiDocumentSettingsMapper {
 
     int deleteDocumentSettings(String id);
 
+    int deleteDocumentSettingsByKnowledgeId(String knowledgeId);
+
 }

+ 192 - 135
takai-ai/src/main/java/com/takai/ai/service/impl/TakaiAiServiceImpl.java

@@ -4,6 +4,7 @@ import com.alibaba.fastjson2.JSON;
 import com.alibaba.fastjson2.JSONArray;
 import com.alibaba.fastjson2.JSONObject;
 import com.takai.ai.domain.TakaiSysOss;
+import com.takai.ai.domain.dto.TakaiDialogDetailReqDTO;
 import com.takai.ai.domain.entity.*;
 import com.takai.ai.mapper.*;
 import com.takai.ai.service.ITakaiAiService;
@@ -32,7 +33,9 @@ import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;
 import javax.validation.constraints.NotNull;
 import java.io.File;
 import java.io.IOException;
+import java.time.LocalDate;
 import java.time.LocalDateTime;
+import java.time.temporal.ChronoUnit;
 import java.util.*;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
@@ -87,124 +90,131 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
     public static final String END_SIGN = "】";
     public static final String SYMBOL = "【示意图序号";
 
+    public static final String USER_STR = "user";
+
+    public static final String TODAY = "今天";
+
+    public static final String BEFOR = "天前";
+
     @Override
     public SseEmitter sseInvoke(TakaiSseInfoParams sseParams) {
-        SseEmitter sseEmitter = new SseEmitter(0L);
-        String url = deepseekConfig.getBaseurl() + deepseekConfig.getChat();
-        TakaiAppInfo info = takaiAppInfoMapper.selectAppInfoByAppId(sseParams.getAppId());
-        JSONObject json = JSONObject.parseObject(info.getAppInfo());
-        json.put("query", "在上海建科集团业务管理平台中,登记和退款流程是什么样的。");
-        json.put("embeddingId", "multilingual-e5-large-instruct");
-
-        RequestBody requestBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), json.toJSONString());
-        Request request = buildPostRequest(url, requestBody);
-        // 使用EventSourceListener处理来自服务器的SSE事件
-        EventSourceListener listener = new EventSourceListener() {
-            private String preData = "";
-            //图片识别
-            private String symbolData = "";
-
-            @Override
-            public void onOpen(@NotNull EventSource eventSource, @NotNull Response response) {
-                log.info("deepseek Connection opened. Headers: {}", response.headers());
-                log.info("deepseek Request URL: {}", response.request().url());
-            }
-            @Override
-            public void onClosed(@NotNull EventSource eventSource) {
-                log.info("deepseek Connection closed.");
-                sseEmitter.complete();
-            }
+        TakaiApplication appInfo = takaiApplicationMapper.selectTargetApplication(TakaiApplication.builder().appId(sseParams.getAppId()).build());
+        if(appInfo != null) {
+            TakaiKnowledge knowledge = takaiKnowledgeMapper.selectTargetKnowledge(TakaiKnowledge.builder().knowledgeId(appInfo.getKnowledgeIds()).build());
+            if (knowledge != null) {
+                SseEmitter sseEmitter = new SseEmitter(0L);
+                String url = deepseekConfig.getBaseurl() + deepseekConfig.getChat();
+                TakaiAppInfo info = takaiAppInfoMapper.selectAppInfoByAppId(sseParams.getAppId());
+                JSONObject json = JSONObject.parseObject(info.getAppInfo());
+                json.put("query", sseParams.getPrompt().get(0).getContent());
+                json.put("embeddingId", knowledge.getEmbeddingId());
+
+                RequestBody requestBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), json.toJSONString());
+                Request request = buildPostRequest(url, requestBody);
+                // 使用EventSourceListener处理来自服务器的SSE事件
+                EventSourceListener listener = new EventSourceListener() {
+                    private String preData = "";
+                    //图片识别
+                    private String symbolData = "";
+
+                    @Override
+                    public void onOpen(@NotNull EventSource eventSource, @NotNull Response response) {
+                        log.info("deepseek Connection opened. Headers: {}", response.headers());
+                        log.info("deepseek Request URL: {}", response.request().url());
+                    }
 
-            @Override
-            public void onEvent(@NotNull EventSource eventSource, String id, String type, @NotNull String data) {
-                if(StringUtils.isEmpty(data)){
-                    return;
-                }
-                String newData = data.substring(preData.length());
-                preData = data;
-                if (newData.indexOf(START_SIGN) > -1 || symbolData.length() > 0) {
-                    symbolData = symbolData + newData;
-                    //接收到了完整的图片标识
-                    if (newData.indexOf(END_SIGN) > -1) {
-                        //是图片
-                        if (symbolData.indexOf(SYMBOL) > -1) {
-                            String documentId = symbolData.substring(SYMBOL.length() + 1, symbolData.lastIndexOf("_"));
-                            TakaiMediaReplacement mrParams = TakaiMediaReplacement.builder()
-                                    .documentId(documentId)
-                                    .originText(symbolData)
-                                    .mediaType("image").build();
-                            TakaiMediaReplacement mrVo = takaiMediaReplacementMapper.selectTargetMedia(mrParams);
-                            symbolData = mrVo.getMediaUrl();
+                    @Override
+                    public void onClosed(@NotNull EventSource eventSource) {
+                        log.info("deepseek Connection closed.");
+                        sseEmitter.complete();
+                    }
+
+                    @Override
+                    public void onEvent(@NotNull EventSource eventSource, String id, String type, @NotNull String data) {
+                        if (StringUtils.isEmpty(data)) {
+                            return;
+                        }
+                        String newData = data.substring(preData.length());
+                        logger.info("deepseek聊天返回消息:" + data);
+                        preData = data;
+                        if (newData.indexOf(START_SIGN) > -1 || symbolData.length() > 0) {
+                            symbolData = symbolData + newData;
+                            //接收到了完整的图片标识
+                            if (newData.indexOf(END_SIGN) > -1) {
+                                //是图片
+                                if (symbolData.indexOf(SYMBOL) > -1) {
+                                    String documentId = symbolData.substring(SYMBOL.length() + 1, symbolData.lastIndexOf("_"));
+                                    TakaiMediaReplacement mrParams = TakaiMediaReplacement.builder()
+                                            .documentId(documentId)
+                                            .originText(symbolData)
+                                            .mediaType("image").build();
+                                    TakaiMediaReplacement mrVo = takaiMediaReplacementMapper.selectTargetMedia(mrParams);
+                                    symbolData = mrVo.getMediaUrl();
+                                }
+                                JSONObject json = new JSONObject();
+                                json.put("id", id);
+                                json.put("event", "add");
+                                json.put("data", symbolData);
+                                log.info("deepseek返回信息:" + json);
+                                symbolData = "";
+                                send(sseEmitter, json);
+                            }
+                        } else {
+                            JSONObject json = new JSONObject();
+                            json.put("id", id);
+                            json.put("event", type);
+                            json.put("data", newData);
+                            log.info("deepseek返回信息:" + json);
+                            send(sseEmitter, json);
                         }
-                        JSONObject json = new JSONObject();
-                        json.put("id", id);
-                        json.put("event", "add");
-                        json.put("data", symbolData);
-                        log.info("deepseek返回信息:" + json);
-                        symbolData = "";
-                        send(sseEmitter, json);
                     }
-                } else {
-//                        if(com.takai.common.utils.StringUtils.isNotEmpty(type) && "finish".equals(type)){
-//                            if(com.takai.common.utils.StringUtils.isNotEmpty(data)){
-//                                JSONObject json = new JSONObject();
-//                                json.put("id", id);
-//                                json.put("event", "add");
-//                                json.put("data", data);
-//                                log.info("deepseek返回切片消息:" + data);
-//                                send(sseEmitter, json);
-//                            }
-//                        }
-                    JSONObject json = new JSONObject();
-                    json.put("id", id);
-                    json.put("event", type);
-                    json.put("data", newData);
-                    log.info("deepseek返回信息:" + json);
-                    send(sseEmitter, json);
-                }
-            }
 
-            @Override
-            public void onFailure(@NotNull EventSource eventSource, Throwable t, Response response) {
-                if (response != null) {
-                    log.error("deepseek Connection failed. Response code: {}, message: {}, body: {}",
-                            response.code(), response.message(), response.body() != null ? response.body().toString() : "null");
-                } else {
-                    log.error("deepseek Connection failed with no response", t);
-                }
-                sseEmitter.completeWithError(t);
-            }
+                    @Override
+                    public void onFailure(@NotNull EventSource eventSource, Throwable t, Response response) {
+                        if (response != null) {
+                            log.error("deepseek Connection failed. Response code: {}, message: {}, body: {}",
+                                    response.code(), response.message(), response.body() != null ? response.body().toString() : "null");
+                        } else {
+                            log.error("deepseek Connection failed with no response", t);
+                        }
+                        sseEmitter.completeWithError(t);
+                    }
 
-            private void send(SseEmitter sseEmitter, Object obj) {
-                try {
-                    sseEmitter.send(obj);
-                } catch (IOException e) {
-                    log.error("deepseek 推送数据失败", e);
-                }
+                    private void send(SseEmitter sseEmitter, Object obj) {
+                        try {
+                            sseEmitter.send(obj);
+                        } catch (IOException e) {
+                            log.error("deepseek 推送数据失败", e);
+                        }
+                    }
+                };
+                OkHttpClient client = buildOkHttpClient();
+                EventSource.Factory factory = EventSources.createFactory(client);
+                factory.newEventSource(request, listener);
+                return sseEmitter;
             }
-        };
-        OkHttpClient client = buildOkHttpClient();
-        EventSource.Factory factory = EventSources.createFactory(client);
-        factory.newEventSource(request, listener);
-        return sseEmitter;
+        }
+        return null;
     }
 
     @Override
     public List<String> asyncCompletions(TakaiCompletionsParams params) {
         List<String> list = new ArrayList<>();
         TakaiApplication vo = takaiApplicationMapper.selectTargetApplication(TakaiApplication.builder().appId(params.getAppId()).build());
-        TakaiPromptInfo info = new TakaiPromptInfo();
-        info.setContent(deepseekConfig.getPrompt());
-        info.setRole("user");
-        params.getMessages().add(info);
-
-        JSONObject jsonObject = new JSONObject();
-        jsonObject.put("model", "DeepSeek-R1-Distill-Qwen-14B");
-        jsonObject.put("messages", params.getMessages());
-        JSONObject result = getasyncCompletions(jsonObject);
-        if(result != null && result.getInteger("code") == 200){
-            JSONArray array = result.getJSONArray("data");
-            list.addAll(array.toJavaList(String.class));
+        if(vo != null){
+            TakaiPromptInfo info = new TakaiPromptInfo();
+            info.setContent(deepseekConfig.getPrompt());
+            info.setRole("user");
+            params.getMessages().add(info);
+
+            JSONObject jsonObject = new JSONObject();
+            jsonObject.put("model", vo.getModel());
+            jsonObject.put("messages", params.getMessages());
+            JSONObject result = getasyncCompletions(jsonObject);
+            if(result != null && result.getInteger("code") == 200){
+                JSONArray array = result.getJSONArray("data");
+                list.addAll(array.toJavaList(String.class));
+            }
         }
         return list;
     }
@@ -236,22 +246,68 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
 
     @Override
     public void saveDialog(TakaiDialogReqDTO dialogReqDTO) {
+        String dialogId = null;
+        String id = null;
+        if(com.takai.common.utils.StringUtils.isNotEmpty(dialogReqDTO.getId())){
+            id = takaiDialogMapper.selectDialogById(dialogReqDTO.getId());
+        }
 
+        if(id == null){
+            takaiDialogMapper.insertDialog(dialogReqDTO);
+            dialogId = dialogReqDTO.getId();
+        }else{
+            dialogId = dialogReqDTO.getId();
+        }
+
+        for(TakaiDialogDetailReqDTO dto  : dialogReqDTO.getMessages()) {
+            dto.setDialogId(dialogId);
+            String detailId = takaiDialogMapper.selectDialogDetailById(dto.getId());
+            if(detailId == null) {
+                takaiDialogMapper.insertDialogDetail(dto);
+            }
+        }
     }
 
     @Override
     public List<Object> getDialogList(String appId) {
-        return null;
+        List<TakaiDialogRespDTO> dialogRespDTOS = takaiDialogMapper.selectDialogList(appId);
+        //当前日期
+        LocalDate today = LocalDate.now();
+        //根据时间分组降序排序
+        NavigableMap<LocalDateTime, List<TakaiDialogRespDTO>> groupList = dialogRespDTOS.stream().collect(Collectors.groupingBy(TakaiDialogRespDTO::getCreate_time, TreeMap::new, Collectors.toList())).descendingMap();
+        List<Object> obj = new ArrayList();
+        if(!groupList.isEmpty()){
+            for(Map.Entry<LocalDateTime, List<TakaiDialogRespDTO>> entry: groupList.entrySet()){
+                // 对比两个时间相差多少天
+                long daysBetween = ChronoUnit.DAYS.between(today, entry.getKey());
+                Map<String, Object> m = new HashMap();
+                m.put("key", System.nanoTime());
+                m.put("type", "group");
+                if(daysBetween == 0l){
+                    m.put("label", TODAY);
+                    m.put("children", setValue(entry.getValue()));
+                    obj.add(m);
+                }else{
+                    m.put("label", -daysBetween+BEFOR);
+                    m.put("children", setValue(entry.getValue()));
+                    obj.add(m);
+                }
+            }
+        }
+        return obj;
     }
 
     @Override
     public void DelDialogDetail(String id) {
-
+        int result = takaiDialogMapper.delDialog(id);
+        if(result > 0){
+            takaiDialogMapper.delDialogDetail(id);
+        }
     }
 
     @Override
     public void updateDialog(TakaiDialogReqDTO dialogReqDTO) {
-
+        takaiDialogMapper.updateDialog(dialogReqDTO);
     }
 
     @Override
@@ -285,7 +341,7 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
                             .embeddingId(knowledge.getEmbeddingId())
                             .description(knowledge.getDescription())
                             .build();
-                    int i = takaiKnowledgeMapper.insertKnowledge(params);
+                    return takaiKnowledgeMapper.insertKnowledge(params);
                 }
             } else {
                 logger.error("创建知识库调用python接口失败,返回状态码:{}", response.code());
@@ -326,7 +382,12 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
                 Integer code = obj.getInteger("code");
                 if (code == 200) {
 //                    TakaiKnowledge info = takaiKnowledgeMapper.selectTargetKnowledge(TakaiKnowledge.builder().knowledgeId(knowledgeId).build());
-                    int i = takaiKnowledgeMapper.delKnowledge(knowledgeId);
+                    int knowledgeInt = takaiKnowledgeMapper.delKnowledge(knowledgeId);
+                    if(knowledgeInt > 0){
+                        takaiDocumentMapper.delDocumentByKnowledgeId(knowledgeId);
+                        takaiDocumentSettingsMapper.deleteDocumentSettingsByKnowledgeId(knowledgeId);
+                    }
+                    return knowledgeInt;
                 }
             }
         } catch (IOException e) {
@@ -422,6 +483,7 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
     public int createApplication(TakaiApplicationParams params) {
         SnowflakeDigitGenerator snowflakeDigitGenerator = new SnowflakeDigitGenerator(1, 1);
         long appId = snowflakeDigitGenerator.nextId();
+
         TakaiApplication info = TakaiApplication.builder().appId(String.valueOf(appId))
                 .name(params.getName())
                 .desc(params.getDesc())
@@ -521,7 +583,8 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
 
     @Override
     public List<TakaiQuestionDTO> selectQuestionByAppId(String appId) {
-        return null;
+        List<TakaiQuestionDTO> List= takaiQuestionMapper.getQuestionList(appId);
+        return List;
     }
 
     @Override
@@ -543,11 +606,11 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
 
     @Override
     public int updateDocumentSetting(TakaiDocumentSettings documentSettings, String documentId) {
-        if (StringUtils.isNotEmpty(documentSettings.getSetSlice()) && !"3".equals(documentSettings.getSetSlice())) {
-            documentSettings.setDocumentId(documentId);
-            int i = takaiDocumentSettingsMapper.updateDocumentSettings(documentSettings);
-            return i;
-        }
+//        if (StringUtils.isNotEmpty(documentSettings.getSetSlice()) && !"3".equals(documentSettings.getSetSlice())) {
+//            documentSettings.setDocumentId(documentId);
+//            int i = takaiDocumentSettingsMapper.updateDocumentSettings(documentSettings);
+//            return i;
+//        }
         TakaiSysOss ossVo = new TakaiSysOss();
         TakaiDocumentSettings settings = new TakaiDocumentSettings();
         TakaiDocumentSettings settingsVo = takaiDocumentSettingsMapper.selectById(documentId);
@@ -573,8 +636,8 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
     public JSONObject getSliceList(TakaiSliceParams params) {
         String url = deepseekConfig.getBaseurl() + deepseekConfig.getSlicePage();
         JSONObject jsonObject = new JSONObject();
-        jsonObject.put("document_id", "f62059be-a119-47ee-b07e-20970257e033");
-        jsonObject.put("knowledge_id", "milvus_hybrid");
+        jsonObject.put("document_id", params.getDocument_id());
+        jsonObject.put("knowledge_id", params.getKnowledge_id());
         jsonObject.put("text", params.getText());
         jsonObject.put("pageNum", params.getPageNum());
         jsonObject.put("pageSize", params.getPageSize());
@@ -604,9 +667,9 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
 
     @Override
     public int deleteSlice(String sliceId, String knowledgeId) {
-        TakaiKnowledge knowledge = takaiKnowledgeMapper.selectTargetKnowledge(TakaiKnowledge.builder().knowledgeId(knowledgeId).build());
+//        TakaiKnowledge knowledge = takaiKnowledgeMapper.selectTargetKnowledge(TakaiKnowledge.builder().knowledgeId(knowledgeId).build());
 
-        String url = deepseekConfig.getBaseurl() + deepseekConfig.getDeleteSlice() + "/" + sliceId + "/milvus_hybrid";
+        String url = deepseekConfig.getBaseurl() + deepseekConfig.getDeleteSlice() + "/" + sliceId + "/" + knowledgeId;
         Request request = buildDeleteRequest(url);
         OkHttpClient client = buildOkHttpClient();
         Response response = null;
@@ -628,7 +691,7 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
 
     @Override
     public JSONObject getSliceDetail(String sliceId, String knowledgeId) {
-        String url = deepseekConfig.getBaseurl() + deepseekConfig.getSliceDetail() + "/milvus_hybrid" + "/" + sliceId;
+        String url = deepseekConfig.getBaseurl() + deepseekConfig.getSliceDetail() + "/" + knowledgeId + "/" + sliceId;
         Request request = buildGetRequest(url);
 
         OkHttpClient client = buildOkHttpClient();
@@ -651,7 +714,7 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
     public int updateSliceInfo(TakaiSliceUpdateParams params) {
         String url = deepseekConfig.getBaseurl() + deepseekConfig.getUpdateSlice();
         JSONObject object = new JSONObject();
-        object.put("knowledge_id", "milvus_hybrid");
+        object.put("knowledge_id", params.getKnowledgeId());
         object.put("slice_id", params.getSliceId());
         object.put("slice_text", params.getSliceText());
         RequestBody requestBody = FormBody.create(MediaType.parse("application/json; charset=utf-8"), object.toJSONString());
@@ -740,21 +803,15 @@ public class TakaiAiServiceImpl implements ITakaiAiService {
         return obj;
     }
 
-    private String getMimeType(File file) {
-        if (!file.exists()) {
-            return null;
-        }
-
-        String fileName = file.getName().toLowerCase();
-        if (fileName.endsWith(".pdf")) {
-            return "application/json";
-        } else if (fileName.endsWith(".doc") || fileName.endsWith(".docx")) {
-            return "application/msword";
-        } else if (fileName.endsWith(".txt")) {
-            return "text/plain";
-        } else {
-            return null;
+    private List<Map<String, Object>> setValue(List<TakaiDialogRespDTO> list){
+        List<Map<String, Object>> l = new ArrayList();
+        for (TakaiDialogRespDTO vo : list) {
+            Map<String, Object> map = new HashMap();
+            map.put("key", vo.getId());
+            map.put("label", vo.getDialog_name());
+            l.add(map);
         }
+        return l;
     }
 
     private OkHttpClient buildOkHttpClient() {

+ 2 - 0
takai-ai/src/main/resources/mapper/takaiai/TakaiApplicationMapper.xml

@@ -99,6 +99,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 			<if test="iconType != null and iconType != ''">icon_type = #{iconType},</if>
 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
 			<if test="remark != null">remark = #{remark},</if>
+			<if test="knowledgeInfo != null and knowledgeInfo != ''">knowledge_info = #{knowledgeInfo},</if>
+			<if test="maxToken != null and maxToken != ''">max_token = #{maxToken},</if>
 			update_time = sysdate()
 		</set>
 		where appId = #{appId}

+ 4 - 0
takai-ai/src/main/resources/mapper/takaiai/TakaiDocumentMapper.xml

@@ -99,5 +99,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 	<delete id="delDocument" parameterType="String">
 		delete from bm_document where document_id = #{documentId}
 	</delete>
+
+	<delete id="delDocumentByKnowledgeId" parameterType="String">
+		delete from bm_document where knowledge_id = #{knowledgeId}
+	</delete>
 	
 </mapper> 

+ 4 - 0
takai-ai/src/main/resources/mapper/takaiai/TakaiDocumentSettingsMapper.xml

@@ -64,4 +64,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 		delete from document_settings where id = #{id}
 	</delete>
 
+	<delete id="deleteDocumentSettingsByKnowledgeId" parameterType="String">
+		delete from document_settings where knowledge_id = #{knowledgeId}
+	</delete>
+
 </mapper>