1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
| package com.lixiang;
import static dev.langchain4j.data.document.loader.FileSystemDocumentLoader.loadDocuments;
import java.util.List;
import dev.langchain4j.community.model.dashscope.QwenChatModel; import dev.langchain4j.community.model.dashscope.QwenEmbeddingModel; import dev.langchain4j.data.document.Document; import dev.langchain4j.data.document.DocumentSplitter; import dev.langchain4j.data.document.splitter.DocumentSplitters; import dev.langchain4j.data.embedding.Embedding; import dev.langchain4j.data.segment.TextSegment; import dev.langchain4j.model.chat.ChatLanguageModel; import dev.langchain4j.rag.content.retriever.ContentRetriever; import dev.langchain4j.rag.content.retriever.EmbeddingStoreContentRetriever; import dev.langchain4j.service.AiServices; import dev.langchain4j.store.embedding.EmbeddingStore; import dev.langchain4j.store.embedding.milvus.MilvusEmbeddingStore; import io.milvus.client.MilvusServiceClient; import io.milvus.param.ConnectParam; import io.milvus.param.IndexType;
public class NaiveRagDemo {
static ChatLanguageModel chatLanguageModel = QwenChatModel.builder() .apiKey("sk-937aee4c3e654d04b84634d363f5a770") .modelName("qwen-plus") .build();
static QwenEmbeddingModel embeddingModel = QwenEmbeddingModel.builder() .apiKey("sk-937aee4c3e654d04b84634d363f5a770") .modelName("text-embedding-v1") .build();
static MilvusServiceClient customMilvusClient = new MilvusServiceClient( ConnectParam.newBuilder() .withHost("192.168.31.230") .withPort(19530) .build());
static EmbeddingStore<TextSegment> embeddingStore = MilvusEmbeddingStore.builder() .milvusClient(customMilvusClient) .databaseName("default") .collectionName("text_collection") .indexType(IndexType.FLAT) .vectorFieldName("embedding") .dimension(1536) .build();
static ContentRetriever contentRetriever = EmbeddingStoreContentRetriever.builder() .embeddingStore(embeddingStore) .embeddingModel(embeddingModel) .maxResults(100) .minScore(0.7) .build();
public static void main(String[] args) { Assistant assistant = createAssistant(); init();
String input = "鲁智深做了什么?"; System.out.println("> " + input); String chat = assistant.chat(input); System.out.println("< " + chat);
input = "唐僧做了什么?"; System.out.println("> " + input); chat = assistant.chat("唐僧做了什么?"); System.out.println("< " + chat); }
private static void init() { DocumentSplitter splitter = DocumentSplitters.recursive(1000, 0); List<Document> documents = loadDocuments("D:/Temp/txt");
documents.forEach(document -> { List<TextSegment> segments = splitter.split(document); List<Embedding> embeddings = embeddingModel.embedAll(segments).content(); System.out.println(embeddings.size()); embeddingStore.addAll(embeddings, segments); }); }
private static Assistant createAssistant() { return AiServices.builder(Assistant.class) .chatLanguageModel(chatLanguageModel) .contentRetriever(contentRetriever) .build(); } }
|