主题
Vearch
https://github.com/vearch/vearch
Maven 依赖
NOTE
自 1.0.0-alpha1 起,langchain4j-vearch 已迁移至 langchain4j-community,并更名为 langchain4j-community-vearch。
0.36.2 及更早:
xml
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-vearch</artifactId>
<version>1.22.0-beta32</version>
</dependency>1
2
3
4
5
2
3
4
5
1.0.0-alpha1 及更高版本:
xml
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-community-vearch</artifactId>
<version>${latest version here}</version>
</dependency>1
2
3
4
5
2
3
4
5
或者,你可以使用 BOM 来统一管理依赖:
xml
<dependencyManagement>
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-community-bom</artifactId>
<version>${latest version here}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencyManagement>1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
API
1.0.0-alpha1 及更早
NOTE
1.0.0-alpha1及更早的langchain4j-vearch使用Vearch的旧 api,该 api 在 vearch 3.4.x 版本中已被弃用。1.0.0-alpha1及之后的langchain4j-community-vearch使用Vearch的最新 api,支持 3.5.x 与 3.4.x 版本。
我们推荐使用 langchain4j-community-vearch,它支持最新版本的 Vearch。
要使用 VearchEmbeddingStore,你需要实例化一个 VearchConfig:
java
String embeddingFieldName = "text_embedding";
String textFieldName = "text";
Map<String, Object> metadata = createMetadata().toMap();
// init properties
Map<String, SpacePropertyParam> properties = new HashMap<>(4);
properties.put(embeddingFieldName, SpacePropertyParam.VectorParam.builder()
.index(true)
.storeType(SpaceStoreType.MEMORY_ONLY)
.dimension(384)
.build());
properties.put(textFieldName, SpacePropertyParam.StringParam.builder().build());
// put metadata... e.g. properties.put("name", SpacePropertyParam.StringParam.builder().build());
VearchConfig vearchConfig = VearchConfig.builder()
.spaceEngine(SpaceEngine.builder()
.name("gamma")
.indexSize(1L)
.retrievalType(RetrievalType.FLAT)
.retrievalParam(RetrievalParam.FLAT.builder()
.build())
.build())
.properties(properties)
.embeddingFieldName(embeddingFieldName)
.textFieldName(textFieldName)
.databaseName(databaseName)
.spaceName(spaceName)
.modelParams(singletonList(ModelParam.builder()
.modelId("vgg16")
.fields(singletonList("string"))
.out("feature")
.build()))
.build();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
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
然后,即可创建 VearchEmbeddingStore:
java
VearchEmbeddingStore embeddingStore = VearchEmbeddingStore.builder()
.vearchConfig(vearchConfig)
.baseUrl(baseUrl)
.build();1
2
3
4
2
3
4
1.0.0-alpha1 及之后
要使用 VearchEmbeddingStore,你需要实例化一个 VearchConfig:
java
String embeddingFieldName = "text_embedding";
String textFieldName = "text";
String spaceName = "embedding_space_" + ThreadLocalRandom.current().nextInt(0, Integer.MAX_VALUE);
// init Fields
List<Field> fields = new ArrayList<>(4);
List<String> metadataFieldNames = new ArrayList<>();
fields.add(VectorField.builder()
.name(embeddingFieldName)
.dimension(embeddingModel.dimension())
.index(Index.builder()
.name("gamma")
.type(IndexType.HNSW)
.params(HNSWParam.builder()
.metricType(MetricType.INNER_PRODUCT)
.efConstruction(100)
.nLinks(32)
.efSearch(64)
.build())
.build())
.build()
);
fields.add(StringField.builder().name(textFieldName).fieldType(FieldType.STRING).build());
// put metadata... e.g. fields.add(StringField.builder().name("name").fieldType(FieldType.STRING).build());
VearchConfig vearchConfig = VearchConfig.builder()
.databaseName(databaseName)
.spaceName(spaceName)
.textFieldName(textFieldName)
.embeddingFieldName(embeddingFieldName)
.fields(fields)
.metadataFieldNames(metadataFieldNames)
.searchIndexParam(HNSWSearchParam.builder()
// Only support INNER_PRODUCT now
.metricType(MetricType.INNER_PRODUCT)
.efSearch(64)
.build())
.build();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
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
然后,即可创建 VearchEmbeddingStore:
java
VearchEmbeddingStore embeddingStore = VearchEmbeddingStore.builder()
.vearchConfig(vearchConfig)
.baseUrl(baseUrl)
.logRequests(true)
.logResponses(true)
.build();1
2
3
4
5
6
2
3
4
5
6