主题
Weaviate
Maven 依赖
xml
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-weaviate</artifactId>
<version>1.22.0-beta32</version>
</dependency>1
2
3
4
5
6
2
3
4
5
6
API
WeaviateEmbeddingStore
用量
| 参数 | 描述 | 必填/可选 |
|---|---|---|
apiKey | 你的 Weaviate API 密钥。本地部署时无需填写。 | 可选 |
scheme | 集群 URL 的协议,例如 "https"。可在 Weaviate 集群的 Details 下找到。 | 必填 |
host | 集群 URL 的主机名,例如 "langchain4j-4jw7ufd9.weaviate.network"。可在 Weaviate 集群的 Details 下找到。 | 必填 |
port | 端口,例如 8080。 | 可选 |
objectClass | 你想存储的对象类,例如 "MyGreatClass"。必须以大写字母开头。 | 可选(默认:Default) |
avoidDups | 若为 true(默认),则 WeaviateEmbeddingStore 会基于所提供的文本片段生成一个哈希 ID,从而避免数据库中重复的条目。若为 false,则生成随机 ID。 | 可选(默认:true) |
consistencyLevel | 一致性级别:ONE、QUORUM(默认)或 ALL。更多细节见这里。 | 可选(默认:QUORUM) |
useGrpcForInserts | 仅对批量插入使用 GRPC 而非 HTTP。检索仍需配置 HTTP。 | 可选 |
securedGrpc | GRPC 连接是加密的。 | 可选 |
grpcPort | 端口,例如 50051。 | 可选 |
textFieldName | 存放 TextSegment 文本的字段名。 | 可选(默认:text) |
metadataFieldName | 存放 Metadata 条目的字段名。若设为空字符串(""),Metadata 条目会存储在根对象中。使用根对象时建议配合 metadataKeys。 | 可选(默认:_metadata) |
metadataKeys | 需要持久化的元数据键。 | 可选 |
Weaviate 1.39 及更新版本
自 1.39 版本起,Weaviate 在自动创建集合时,会将对象的嵌入存储在一个具名向量 (名为 default)中。较旧版本的 Weaviate 则使用单个未命名向量。
langchain4j-weaviate 1.22.0-beta32 及更早版本只读取单个未命名向量。 当这样的版本搭配由 Weaviate 1.39 或更新版本创建的集合时, 每个搜索结果的 EmbeddingMatch.embedding() 都为空。分数、ID、 TextSegment 及其 Metadata 仍能正确返回,因此仅当你的应用 使用匹配结果的嵌入时才与此相关。
该问题在 1.22.0-beta32 中已修复,它同时读取两种布局:由更早版本存储的嵌入 也能被返回,无需任何更改。
在 1.22.0-beta32 及更早版本下,请在 使用 WeaviateEmbeddingStore 之前自行创建集合,并将其配置为不使用具名向量:
java
WeaviateClient client = new WeaviateClient(new Config("https", "my-cluster.weaviate.network"));
client.schema().classCreator()
.withClass(WeaviateClass.builder()
.className("MyGreatClass")
.vectorizer("none")
.build())
.run();1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
同样的操作也可以通过一个普通的 HTTP 请求完成:
shell
curl -X POST https://my-cluster.weaviate.network/v1/schema \
-H 'Content-Type: application/json' \
-d '{"class": "MyGreatClass", "vectorizer": "none"}'1
2
3
2
3
由 Weaviate 1.38 或更旧版本创建的集合不受影响。