🚀 PIG AI 新版来袭:AI能力全面升级! 点击了解一下?
# 下载推理模型 - 用于理解和生成回答 ollama run deepseek-r1:14b # 下载向量模型 - 用于文本向量化 ollama pull bge-m3:latest
# 1. 下载安装脚本 curl -sfL https://raw.githubusercontent.com/milvus-io/milvus/master/scripts/standalone_embed.sh -o standalone_embed.sh # 2. 启动 Docker 容器 bash standalone_embed.sh start
注意:如果选择 Docker 安装方式,请确保你的网络环境能够正常访问 Github。
<!-- 链接 milvus SDK--> <dependency> <groupId>io.milvus</groupId> <artifactId>milvus-sdk-java</artifactId> <version>2.5.3</version> </dependency>
# 推理模型链接信息 deepseek: base-url: http://127.0.0.1:11434/v1 model: deepseek-r1:14b api-key: ollama-local # 向量模型链接信息 embedding: api-key: ${deepseek.api-key} base-url: ${deepseek.base-url} model: bge-m3:latest
// 1. Connect to Milvus server ConnectConfig connectConfig = ConnectConfig.builder() .uri(CLUSTER_ENDPOINT) // 1.2 获取的 Milvus 链接端点 .token(TOKEN) // 1.2 获取的 Milvus 链接信息 .build(); MilvusClientV2 milvusClientV2 = new MilvusClientV2(connectConfig);
@Autowired EmbeddingClient embeddingClient; { // 这里以 2025最新的我司保密条例演示,可以换成你自己的 String law = FileUtil.readString("/Users/lengleng/Downloads/law.txt", Charset.defaultCharset()); String[] lawSplits = StrUtil.split(law, 400); List<JsonObject> data = new ArrayList<>(); for (String lawSplit : lawSplits) { List<Float> floatList = embeddingClient.embed(lawSplit); JsonObject jsonObject = new JsonObject(); // 将 List<Float> 转换为 JsonArray JsonArray jsonArray = new JsonArray(); for (Float value : floatList) { jsonArray.add(value); } jsonObject.add("vector", jsonArray); jsonObject.addProperty("text", lawSplit); data.add(jsonObject); } InsertReq insertReq = InsertReq.builder() .collectionName("deepseek4j_test") .data(data) .build(); milvusClientV2.insert(insertReq); }
@GetMapping(value = "/chat", produces = MediaType.TEXT_EVENT_STREAM_VALUE) public Flux<ChatCompletionResponse> chat(String prompt) { 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() // 根据渠道模型名称动态修改这个参数 .model("deepseek-r1:14b") .addUserMessage(String.format("你要根据用户输入的问题:%s \n \n 参考如下内容: %s \n\n 整理处理最终结果", prompt, resultList)).build(); return deepSeekClient.chatFluxCompletion(request); }