|
@@ -0,0 +1,81 @@
|
|
|
+/*
|
|
|
+ * Copyright (c) 2025 GaoKunW
|
|
|
+ *
|
|
|
+ */
|
|
|
+
|
|
|
+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.springframework.http.MediaType;
|
|
|
+import org.springframework.web.bind.annotation.GetMapping;
|
|
|
+import org.springframework.web.bind.annotation.RequestMapping;
|
|
|
+import org.springframework.web.bind.annotation.RestController;
|
|
|
+import reactor.core.publisher.Flux;
|
|
|
+
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.List;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @description KnowledgeController
|
|
|
+ *
|
|
|
+ * @author GaoKunW
|
|
|
+ * @date 2025/3/16 22:41
|
|
|
+ */
|
|
|
+@RestController
|
|
|
+@RequestMapping("/ai/ollama")
|
|
|
+public class KnowledgeController {
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private EmbeddingClient embeddingClient;
|
|
|
+
|
|
|
+ @Resource
|
|
|
+ private DeepSeekClient deepSeekClient;
|
|
|
+
|
|
|
+ @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);
|
|
|
+ }
|
|
|
+}
|