Gaokun Wang 5 mēneši atpakaļ
vecāks
revīzija
305f02caee

+ 4 - 8
eco-ai/ai-knowledge-biz/pom.xml

@@ -27,17 +27,13 @@
         </dependency>
 
         <dependency>
-            <groupId>io.github.pig-mesh.ai</groupId>
-            <artifactId>deepseek-spring-boot-starter</artifactId>
+            <groupId>org.eco.vip</groupId>
+            <artifactId>com-orm</artifactId>
         </dependency>
 
         <dependency>
-            <groupId>io.milvus</groupId>
-            <artifactId>milvus-sdk-java</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.eco.vip</groupId>
-            <artifactId>com-orm</artifactId>
+            <groupId>org.springframework.ai</groupId>
+            <artifactId>spring-ai-milvus-store</artifactId>
         </dependency>
 
     </dependencies>

+ 4 - 59
eco-ai/ai-knowledge-biz/src/main/java/org/eco/vip/ai/knowledge/controller/KnowledgeController.java

@@ -6,25 +6,13 @@
 package org.eco.vip.ai.knowledge.controller;
 
 
-import io.github.pigmesh.ai.deepseek.core.DeepSeekClient;
-import io.github.pigmesh.ai.deepseek.core.EmbeddingClient;
-import io.github.pigmesh.ai.deepseek.core.chat.ChatCompletionRequest;
-import io.github.pigmesh.ai.deepseek.core.chat.ChatCompletionResponse;
-import io.milvus.v2.client.ConnectConfig;
-import io.milvus.v2.client.MilvusClientV2;
-import io.milvus.v2.service.vector.request.SearchReq;
-import io.milvus.v2.service.vector.request.data.FloatVec;
-import io.milvus.v2.service.vector.response.SearchResp;
 import jakarta.annotation.Resource;
 import org.eco.vip.ai.knowledge.domain.knowledge.Knowledge;
 import org.eco.vip.ai.knowledge.service.IKnowledgeService;
-import org.springframework.http.MediaType;
-import org.springframework.web.bind.annotation.*;
-import reactor.core.publisher.Flux;
-
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.List;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
 
 /**
  * @description KnowledgeController
@@ -36,12 +24,6 @@ import java.util.List;
 @RequestMapping("/ai/knowledge")
 public class KnowledgeController {
 
-    @Resource
-    private EmbeddingClient embeddingClient;
-
-    @Resource
-    private DeepSeekClient deepSeekClient;
-
     @Resource
     private IKnowledgeService knowledgeService;
 
@@ -52,41 +34,4 @@ public class KnowledgeController {
         return null;
     }
 
-
-    @GetMapping(value = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
-    public Flux<ChatCompletionResponse> chat(String prompt) {
-        ConnectConfig connectConfig = ConnectConfig.builder()
-                .uri("") // 1.2 获取的 Milvus 链接端点
-                .token("")  // 1.2 获取的 Milvus 链接信息
-                .build();
-
-
-        MilvusClientV2 milvusClientV2 = new MilvusClientV2(connectConfig);
-
-        List<Float> floatList = embeddingClient.embed(prompt);
-
-        SearchReq searchReq = SearchReq.builder()
-                .collectionName("deepseek4j_test")
-                .data(Collections.singletonList(new FloatVec(floatList)))
-                .outputFields(Collections.singletonList("text"))
-                .topK(3)
-                .build();
-
-        SearchResp searchResp = milvusClientV2.search(searchReq);
-
-        List<String> resultList = new ArrayList<>();
-        List<List<SearchResp.SearchResult>> searchResults = searchResp.getSearchResults();
-        for (List<SearchResp.SearchResult> results : searchResults) {
-            System.out.println("TopK results:");
-            for (SearchResp.SearchResult result : results) {
-                resultList.add(result.getEntity().get("text").toString());
-            }
-        }
-
-
-        ChatCompletionRequest request = ChatCompletionRequest.builder()
-                .addUserMessage(String.format("你要根据用户输入的问题:%s \n \n 参考如下内容: %s  \n\n 整理处理最终结果", prompt, resultList)).build();
-
-        return deepSeekClient.chatFluxCompletion(request);
-    }
 }

+ 1 - 1
eco-ai/ai-knowledge-biz/src/main/java/org/eco/vip/ai/knowledge/vectorstore/MilvusVectorStore.java → eco-ai/ai-knowledge-biz/src/main/java/org/eco/vip/ai/knowledge/vectorstore/MilvusVectorStores.java

@@ -19,7 +19,7 @@ import java.util.Collections;
  * @description MilvusVectorStore
  * @date 2025/3/17 00:21
  */
-public class MilvusVectorStore implements VectorStore {
+public class MilvusVectorStores implements VectorStores {
 
     private volatile Integer dimension;
     private volatile String collectionName;

+ 1 - 1
eco-ai/ai-knowledge-biz/src/main/java/org/eco/vip/ai/knowledge/vectorstore/VectorStore.java → eco-ai/ai-knowledge-biz/src/main/java/org/eco/vip/ai/knowledge/vectorstore/VectorStores.java

@@ -12,6 +12,6 @@ package org.eco.vip.ai.knowledge.vectorstore;
  * @author GaoKunW
  * @date 2025/3/17 00:21
  */
-public interface VectorStore {
+public interface VectorStores {
     void newSchema(String kid);
 }

+ 2 - 2
eco-ai/ai-ollama-api/src/main/java/org/eco/vip/ai/ollama/api/api/IOllamaApi.java → eco-ai/ai-ollama-api/src/main/java/org/eco/vip/ai/ollama/api/api/IAiOllamaApi.java

@@ -12,6 +12,6 @@ package org.eco.vip.ai.ollama.api.api;
  * @author GaoKunW
  * @date 2025/3/12 23:10
  */
-public interface IOllamaApi {
-    String syncChat(String prompt);
+public interface IAiOllamaApi {
+    String chat(String prompt);
 }

+ 8 - 2
eco-ai/ai-ollama-biz/pom.xml

@@ -31,8 +31,14 @@
         </dependency>
 
         <dependency>
-            <groupId>io.github.pig-mesh.ai</groupId>
-            <artifactId>deepseek-spring-boot-starter</artifactId>
+            <groupId>org.springframework.ai</groupId>
+            <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>org.slf4j</groupId>
+                    <artifactId>slf4j-simple</artifactId>
+                </exclusion>
+            </exclusions>
         </dependency>
     </dependencies>
 

+ 4 - 4
eco-ai/ai-ollama-biz/src/main/java/org/eco/vip/ai/ollama/api/OllamaApi.java → eco-ai/ai-ollama-biz/src/main/java/org/eco/vip/ai/ollama/api/AiOllamaApi.java

@@ -7,7 +7,7 @@ package org.eco.vip.ai.ollama.api;
 
 
 import jakarta.annotation.Resource;
-import org.eco.vip.ai.ollama.api.api.IOllamaApi;
+import org.eco.vip.ai.ollama.api.api.IAiOllamaApi;
 import org.eco.vip.ai.ollama.service.IOllamaService;
 import org.springframework.stereotype.Service;
 
@@ -18,13 +18,13 @@ import org.springframework.stereotype.Service;
  * @date 2025/3/12 23:11
  */
 @Service
-public class OllamaApi implements IOllamaApi {
+public class AiOllamaApi implements IAiOllamaApi {
 
     @Resource
     private IOllamaService ollamaService;
 
     @Override
-    public String syncChat(String prompt) {
-        return ollamaService.syncChatContent(prompt);
+    public String chat(String prompt) {
+        return ollamaService.chat(prompt);
     }
 }

+ 25 - 23
eco-ai/ai-ollama-biz/src/main/java/org/eco/vip/ai/ollama/controller/OllamaController.java

@@ -6,10 +6,9 @@
 package org.eco.vip.ai.ollama.controller;
 
 
-import cn.hutool.json.JSONArray;
-import io.github.pigmesh.ai.deepseek.core.chat.ChatCompletionResponse;
 import jakarta.annotation.Resource;
 import org.eco.vip.ai.ollama.service.IOllamaService;
+import org.springframework.ai.ollama.OllamaChatModel;
 import org.springframework.http.MediaType;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
@@ -29,32 +28,35 @@ public class OllamaController {
     @Resource
     private IOllamaService ollamaService;
 
-    @GetMapping(value = "/multiple/chat/advanced", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
-    public Flux<ChatCompletionResponse> chatAdvanced(String prompt, String cacheCode) {
-        return ollamaService.multipleRoundChatAdvanced(prompt, cacheCode);
-    }
-
-    @GetMapping(value = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
-    public Flux<ChatCompletionResponse> chat(String prompt) {
+    @GetMapping(value = "/chat")
+    public Object chat(String prompt) {
         return ollamaService.chat(prompt);
     }
-    @GetMapping(value = "/syncChat")
-    public String syncChat(String prompt) {
-        return ollamaService.syncChat(prompt);
-    }
 
-    @GetMapping(value = "/syncChatArr")
-    public JSONArray syncChatArr(String prompt) {
-        return ollamaService.syncChatArr(prompt);
+    @GetMapping(value = "/chat/stream", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
+    public Flux<String> chatStream(String prompt) {
+        return ollamaService.chatStream(prompt);
     }
 
-    @GetMapping(value = "/chatBase")
-    public String chat1(String prompt) {
-        return ollamaService.syncChatContent(prompt);
+    @GetMapping(value = "/chat/sql", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
+    public Object chatSql(String prompt) {
+        return ollamaService.chatSql(prompt);
     }
 
-    @GetMapping(value = "/chat/chatAdvanced", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
-    public Flux<ChatCompletionResponse> chatAdvanced(String prompt) {
-        return ollamaService.chatAdvanced(prompt);
-    }
+//    @GetMapping(value = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
+//    public Flux<ChatCompletionResponse> chat(String prompt) {
+//        return ollamaService.chat(prompt);
+//    }
+
+//    @GetMapping(value = "/syncChat")
+//    public String syncChat(String prompt) {
+//        return ollamaService.syncChat(prompt);
+//    }
+//
+//    @GetMapping(value = "/syncChatArr")
+//    public JSONArray syncChatArr(String prompt) {
+//        return ollamaService.syncChatArr(prompt);
+//    }
+
+
 }

+ 63 - 39
eco-ai/ai-ollama-biz/src/main/java/org/eco/vip/ai/ollama/service/IOllamaService.java

@@ -7,7 +7,6 @@ package org.eco.vip.ai.ollama.service;
 
 
 import cn.hutool.json.JSONArray;
-import io.github.pigmesh.ai.deepseek.core.chat.ChatCompletionResponse;
 import reactor.core.publisher.Flux;
 
 /**
@@ -17,59 +16,84 @@ import reactor.core.publisher.Flux;
  * @date 2025/3/12 23:02
  */
 public interface IOllamaService {
-    /**
-     * @description: 同步返回
-     *
-     * @param: prompt 问题
-     * @return String 内同
-     **/
-    String syncChatContent(String prompt);
 
     /**
-     * @description: 同步返回
+     * @description: 流式返回
      *
      * @param: prompt 问题
      * @return String 内同
      **/
-    String syncChat(String prompt);
+    Flux<String> chatStream(String prompt);
+
     /**
-     * @description: 同步返回
+     * @description: 流式返回
      *
      * @param: prompt 问题
      * @return String 内同
      **/
-    JSONArray syncChatArr(String prompt);
+    String chat(String prompt);
 
     /**
-     * @description: 流式输出多轮对话
+     * @description: 流式返回
      *
      * @param: prompt 问题
-     * @param: cacheCode 缓存
-     * @return Flux<ChatCompletionResponse> 流结构结果
-     **/
-    Flux<ChatCompletionResponse> multipleRoundChatAdvanced(String prompt, String cacheCode);
-
-    /**
-     * @description: 流式输出基础单轮对话
-     *
-     * @param: prompt  问题
-     * @return Flux<ChatCompletionResponse>
-     **/
-    Flux<ChatCompletionResponse> chatBase(String prompt);
-
-    /**
-     * @description: 流式输出基础单轮对话
-     *
-     * @param: prompt  问题
-     * @return Flux<ChatCompletionResponse>
+     * @return String 内同
      **/
-    Flux<ChatCompletionResponse> chat(String prompt);
+    JSONArray chatSql(String prompt);
 
-    /**
-     * @description: 流式输出高级单轮对话
-     *
-     * @param: prompt  问题
-     * @return Flux<ChatCompletionResponse>
-     **/
-    Flux<ChatCompletionResponse> chatAdvanced(String prompt);
+//    /**
+//     * @description: 同步返回
+//     *
+//     * @param: prompt 问题
+//     * @return String 内同
+//     **/
+//    String syncChatContent(String prompt);
+//
+//    /**
+//     * @description: 同步返回
+//     *
+//     * @param: prompt 问题
+//     * @return String 内同
+//     **/
+//    String syncChat(String prompt);
+//    /**
+//     * @description: 同步返回
+//     *
+//     * @param: prompt 问题
+//     * @return String 内同
+//     **/
+//    JSONArray syncChatArr(String prompt);
+//
+//    /**
+//     * @description: 流式输出多轮对话
+//     *
+//     * @param: prompt 问题
+//     * @param: cacheCode 缓存
+//     * @return Flux<ChatCompletionResponse> 流结构结果
+//     **/
+//    Flux<ChatCompletionResponse> multipleRoundChatAdvanced(String prompt, String cacheCode);
+//
+//    /**
+//     * @description: 流式输出基础单轮对话
+//     *
+//     * @param: prompt  问题
+//     * @return Flux<ChatCompletionResponse>
+//     **/
+//    Flux<ChatCompletionResponse> chatBase(String prompt);
+//
+//    /**
+//     * @description: 流式输出基础单轮对话
+//     *
+//     * @param: prompt  问题
+//     * @return Flux<ChatCompletionResponse>
+//     **/
+//    Flux<ChatCompletionResponse> chat(String prompt);
+//
+//    /**
+//     * @description: 流式输出高级单轮对话
+//     *
+//     * @param: prompt  问题
+//     * @return Flux<ChatCompletionResponse>
+//     **/
+//    Flux<ChatCompletionResponse> chatAdvanced(String prompt);
 }

+ 23 - 127
eco-ai/ai-ollama-biz/src/main/java/org/eco/vip/ai/ollama/service/OllamaService.java

@@ -8,23 +8,15 @@ package org.eco.vip.ai.ollama.service;
 
 import cn.hutool.json.JSONArray;
 import cn.hutool.json.JSONObject;
-import io.github.pigmesh.ai.deepseek.core.DeepSeekClient;
-import io.github.pigmesh.ai.deepseek.core.Json;
-import io.github.pigmesh.ai.deepseek.core.chat.ChatCompletionChoice;
-import io.github.pigmesh.ai.deepseek.core.chat.ChatCompletionRequest;
-import io.github.pigmesh.ai.deepseek.core.chat.ChatCompletionResponse;
 import jakarta.annotation.Resource;
 import lombok.extern.slf4j.Slf4j;
 import org.eco.vip.text2sql.api.IText2sqlApi;
 import org.eco.vip.text2sql.domain.ContentVo;
+import org.springframework.ai.ollama.OllamaChatModel;
 import org.springframework.stereotype.Service;
 import reactor.core.publisher.Flux;
 
 import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.function.Function;
-import java.util.stream.Collectors;
 
 
 /**
@@ -37,110 +29,11 @@ import java.util.stream.Collectors;
 @Service
 public class OllamaService implements IOllamaService {
 
-    public final static HashMap<String, String> CACHE = new HashMap<>();
-
-    Function<String, String> elt = s -> s.replaceAll("<think>[\\s\\S]*?</think>", "").replaceAll("\n", "");
-
-    Function<List<ChatCompletionChoice>, String> choicesProcess = list -> list.stream().map(e -> e.delta().content())
-            .collect(Collectors.joining());
-
-    @Resource
-    private DeepSeekClient deepSeekClient;
-
     @Resource
     private IText2sqlApi text2sqlApi;
 
-    @Override
-    public String syncChatContent(String prompt) {
-        ChatCompletionRequest request = ChatCompletionRequest.builder()
-                // 根据渠道模型名称动态修改这个参数
-//                .model("qwen2.5:1.5b")
-//                .addAssistantMessage("我是一个sql生成专家,根据用户需求,生成mysql可执行的sql语句,只输出sql语句不需要任何格式")
-                .addUserMessage(prompt).build();
-        ChatCompletionResponse response = deepSeekClient.chatCompletion(request).execute();
-        ChatCompletionChoice completionChoice = response.choices().getFirst();
-        return completionChoice.message().content();
-    }
-
-    @Override
-    public String syncChat(String prompt) {
-        ContentVo contentVo = text2sqlApi.getQuestion(prompt);
-        if (contentVo != null) {
-            String content = this.syncChatContent(contentVo.getContent());
-            contentVo.setContent(content);
-            JSONArray answer = text2sqlApi.getAnswer(contentVo);
-            log.info("\nanswer: {}", answer);
-            String md = convertJsonArrayToMd(answer);
-            log.info("\nmd {}", md);
-            return md;
-        }
-        return null;
-    }
-
-    @Override
-    public JSONArray syncChatArr(String prompt) {
-        ContentVo contentVo = text2sqlApi.getQuestion(prompt);
-        if (contentVo != null) {
-            String content = this.syncChatContent(contentVo.getContent());
-            contentVo.setContent(content);
-            return text2sqlApi.getAnswer(contentVo);
-        }
-        return null;
-    }
-
-    @Override
-    public Flux<ChatCompletionResponse> multipleRoundChatAdvanced(String prompt, String cacheCode) {
-        log.info("cacheCode {}", cacheCode);
-        ChatCompletionRequest request = ChatCompletionRequest.builder()
-                .addUserMessage(prompt)
-                .addAssistantMessage(elt.apply(CACHE.getOrDefault(cacheCode, "")))
-                .addSystemMessage("你是一个专业的助手").maxCompletionTokens(5000).build();
-        log.info("request {}", Json.toJson(request));
-        // 只保留上一次回答内容
-        CACHE.remove(cacheCode);
-        return deepSeekClient.chatFluxCompletion(request).doOnNext(i -> {
-            String content = choicesProcess.apply(i.choices());
-            // 其他ELT流程
-            CACHE.merge(cacheCode, content, String::concat);
-        }).doOnError(e -> log.error("chatAdvanced error:{}", e.getMessage()));
-    }
-
-    @Override
-    public Flux<ChatCompletionResponse> chatBase(String prompt) {
-        return deepSeekClient.chatFluxCompletion(prompt);
-    }
-
-    @Override
-    public Flux<ChatCompletionResponse> chat(String prompt) {
-        ContentVo contentVo = text2sqlApi.getQuestion(prompt);
-        if (contentVo != null) {
-            String content = this.syncChatContent(contentVo.getContent());
-            contentVo.setContent(content);
-            JSONArray answer = text2sqlApi.getAnswer(contentVo);
-            log.info("\nanswer {}", answer);
-            String md = convertJsonArrayToMd(answer);
-            log.info("\nmd {}", md);
-//            Flux<ChatCompletionResponse> flux = deepSeekClient.c
-//            return deepSeekClient.chatFluxCompletion("问题:" + prompt + ";\n答案:" + answer.toString() + "\n" + "请将问题和答案汇总,答案按照列表格式完整输出,不要输出其他内容");
-//            return deepSeekClient.chatFluxCompletion(answer.toString() + "\n" + "以上内容转换表格格式输出,不要输出其他内容");
-            return deepSeekClient.chatFluxCompletion(md + "\n直接输出以上内容,不要输出其他内容");
-//            return deepSeekClient.chatFluxCompletion(answer.toString() + "\n" + "请将以上 JSON 数据转换为规范的 Markdown 表格格式,要求:" +
-//                    "\n1. 第一行为表头(自动提取 JSON 的键名)\n" +
-//                    "2. 第二行为分隔符行(|---|---|...)\n" +
-//                    "3. 后续行展示数据内容\n" +
-//                    "4. 所有列保持左对齐\n" +
-//                    "5. 如果值为空则显示为 -" +
-//                    "6. 只输出数据内容,不要输出其他内容" +
-//                    "7. 以```Markdown 代码格式展示");
-//            return deepSeekClient.chatFluxCompletion(answer.toString() + "\n" + "请将以上 JSON 数据转换为规范的 Markdown 表格格式,要求:\n" +
-//                    "1. 所有列保持左对齐\n" +
-//                    "2. 不要修改原数据的值" +
-//                    "3. 如果值为空则''显示为 -" +
-//                    "4. 只输出数据内容,不要输出其他内容" +
-//                    "5. 以```Markdown 代码格式展示");
-        }
-        return null;
-    }
+    @Resource
+    private OllamaChatModel ollamaChatModel;
 
     public String convertJsonArrayToMd(JSONArray array) {
         if (array.isEmpty()) {
@@ -168,8 +61,8 @@ public class OllamaService implements IOllamaService {
             String[] row = Arrays.stream(headers)
                     // 空值默认显示为 "-"
                     .map(key -> obj.getStr(key, "-")
-//                            .replace("|", "\\|")
-//                            .replace("\n", "<br>")
+                            .replace("|", "\\|")
+                            .replace("\n", "<br>")
                     )
                     .toArray(String[]::new);
             md.append("|").append(String.join("|", row)).append("|\n");
@@ -179,20 +72,23 @@ public class OllamaService implements IOllamaService {
     }
 
     @Override
-    public Flux<ChatCompletionResponse> chatAdvanced(String prompt) {
-        ChatCompletionRequest request = ChatCompletionRequest.builder()
-                // 模型选择,支持 DEEPSEEK_CHAT、DEEPSEEK_REASONER 等
-//                .model("qwen2.5:1.5b")
-                // 添加用户消息
-                .addUserMessage(prompt)
-                // 设置最大生成 token 数,默认 2048
-                .maxCompletionTokens(1000)
-                // 设置响应格式,支持 JSON 结构化输出
-//                .responseFormat(...) // 可选
-                // function calling
-//        .tools(...) // 可选
-                .build();
-
-        return deepSeekClient.chatFluxCompletion(request);
+    public Flux<String> chatStream(String prompt) {
+        return ollamaChatModel.stream(prompt);
+    }
+
+    @Override
+    public String chat(String prompt) {
+        return ollamaChatModel.call(prompt);
+    }
+
+    @Override
+    public JSONArray chatSql(String prompt) {
+        ContentVo contentVo = text2sqlApi.getQuestion(prompt);
+        if (contentVo != null) {
+            String content = this.chat(contentVo.getContent());
+            contentVo.setContent(content);
+            return text2sqlApi.getAnswer(contentVo);
+        }
+        return null;
     }
 }

+ 9 - 15
eco-bom/pom.xml

@@ -27,10 +27,9 @@
         <easy-trans.version>3.0.6</easy-trans.version>
         <jackson.version>2.18.3</jackson.version>
         <easy-trans.version>3.0.6</easy-trans.version>
-        <deepseek4j.version>1.4.5</deepseek4j.version>
-        <milvus.version>2.5.5</milvus.version>
         <jsqlparser.version>5.1</jsqlparser.version>
         <DmJdbcDriver18.version>8.1.3.140</DmJdbcDriver18.version>
+        <spring-ai.version>1.0.0-M6</spring-ai.version>
     </properties>
 
     <!-- 全局的依赖配置-->
@@ -46,6 +45,14 @@
                 <scope>import</scope>
             </dependency>
 
+            <dependency>
+                <groupId>org.springframework.ai</groupId>
+                <artifactId>spring-ai-bom</artifactId>
+                <version>${spring-ai.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+
             <!-- com-web -->
             <dependency>
                 <groupId>org.eco.vip</groupId>
@@ -122,11 +129,6 @@
                 <artifactId>easy-trans-mybatis-flex-extend</artifactId>
                 <version>${easy-trans.version}</version>
             </dependency>
-            <dependency>
-                <groupId>io.github.pig-mesh.ai</groupId>
-                <artifactId>deepseek-spring-boot-starter</artifactId>
-                <version>${deepseek4j.version}</version>
-            </dependency>
 
             <!-- https://mvnrepository.com/artifact/com.github.jsqlparser/jsqlparser -->
             <dependency>
@@ -141,14 +143,6 @@
                 <artifactId>DmJdbcDriver18</artifactId>
                 <version>${DmJdbcDriver18.version}</version>
             </dependency>
-
-            <!-- https://mvnrepository.com/artifact/io.milvus/milvus-sdk-java -->
-            <dependency>
-                <groupId>io.milvus</groupId>
-                <artifactId>milvus-sdk-java</artifactId>
-                <version>${milvus.version}</version>
-            </dependency>
-
         </dependencies>
     </dependencyManagement>
 

+ 6 - 0
eco-start/pom.xml

@@ -31,6 +31,12 @@
             <groupId>org.eco.vip</groupId>
             <artifactId>ai-knowledge-biz</artifactId>
             <version>${revision}</version>
+            <exclusions>
+                <exclusion>
+                    <artifactId>spring-ai-milvus-store</artifactId>
+                    <groupId>org.springframework.ai</groupId>
+                </exclusion>
+            </exclusions>
         </dependency>
     </dependencies>
 

+ 8 - 8
eco-start/src/main/resources/application-local.yml

@@ -13,15 +13,15 @@ mybatis-flex:
     ds1:
       type: ${spring.datasource.type}
       # MySql
-#      driver-class-name: com.mysql.cj.jdbc.Driver
-#      url: jdbc:mysql://localhost:3306/eco-boot?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
-#      username: root
-#      password: root123
+      driver-class-name: com.mysql.cj.jdbc.Driver
+      url: jdbc:mysql://localhost:3306/eco-boot?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8&autoReconnect=true&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
+      username: root
+      password: root123
       #DM8数据库
-      driver-class-name: dm.jdbc.driver.DmDriver
-      url: jdbc:dm://127.0.0.1:5236?schema=eco-boot&useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
-      username: SYSDBA
-      password: SYSdba123
+#      driver-class-name: dm.jdbc.driver.DmDriver
+#      url: jdbc:dm://127.0.0.1:5236?schema=eco-boot&useUnicode=true&characterEncoding=utf8&useSSL=true&autoReconnect=true&reWriteBatchedInserts=true
+#      username: SYSDBA
+#      password: SYSdba123
       # 最大连接池数量
       maximum-pool-size: 20
       # 最小空闲线程数量

+ 9 - 1
eco-start/src/main/resources/application.yml

@@ -34,6 +34,13 @@ spring:
   threads:
     virtual:
       enabled: true
+  ai:
+    ollama:
+      base-url: http://localhost:11434
+      chat:
+        options:
+          # 选用模型
+          model: qwen2.5:1.5b
 
 # 开发环境配置
 server:
@@ -112,7 +119,8 @@ logging:
 --- #
 deepseek:
   api-key: local-ollama  # 必填项:你的 API 密钥
-  model: qwen2.5:3b
+  model: qwen2.5:1.5b
+#  model: qwen2.5:3b
   base-url: http://127.0.0.1:11434/v1  # 可选,默认为官方 API 地址
 # 向量模型链接信息
 embedding: