-
Notifications
You must be signed in to change notification settings - Fork 189
/
WeaviateEmbeddingStoreExample.java
48 lines (39 loc) · 2.36 KB
/
WeaviateEmbeddingStoreExample.java
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
import dev.langchain4j.data.embedding.Embedding;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.embedding.AllMiniLmL6V2EmbeddingModel;
import dev.langchain4j.model.embedding.EmbeddingModel;
import dev.langchain4j.store.embedding.EmbeddingMatch;
import dev.langchain4j.store.embedding.EmbeddingStore;
import dev.langchain4j.store.embedding.weaviate.WeaviateEmbeddingStore;
import org.testcontainers.weaviate.WeaviateContainer;
import java.util.List;
public class WeaviateEmbeddingStoreExample {
public static void main(String[] args) {
try (WeaviateContainer weaviate = new WeaviateContainer("semitechnologies/weaviate:1.22.4")) {
weaviate.start();
EmbeddingStore<TextSegment> embeddingStore = WeaviateEmbeddingStore.builder()
.scheme("http")
.host(weaviate.getHttpHostAddress())
// "Default" class is used if not specified. Must start from an uppercase letter!
.objectClass("Test")
// If true (default), then WeaviateEmbeddingStore will generate a hashed ID based on provided
// text segment, which avoids duplicated entries in DB. If false, then random ID will be generated.
.avoidDups(true)
// Consistency level: ONE, QUORUM (default) or ALL.
.consistencyLevel("ALL")
.build();
EmbeddingModel embeddingModel = new AllMiniLmL6V2EmbeddingModel();
TextSegment segment1 = TextSegment.from("I like football.");
Embedding embedding1 = embeddingModel.embed(segment1).content();
embeddingStore.add(embedding1, segment1);
TextSegment segment2 = TextSegment.from("The weather is good today.");
Embedding embedding2 = embeddingModel.embed(segment2).content();
embeddingStore.add(embedding2, segment2);
Embedding queryEmbedding = embeddingModel.embed("What is your favourite sport?").content();
List<EmbeddingMatch<TextSegment>> relevant = embeddingStore.findRelevant(queryEmbedding, 1);
EmbeddingMatch<TextSegment> embeddingMatch = relevant.get(0);
System.out.println(embeddingMatch.score()); // 0.8144288063049316
System.out.println(embeddingMatch.embedded().text()); // I like football.
}
}
}