Weaviate
本節將引導您設定 Weaviate VectorStore 以儲存文件嵌入並執行相似性搜尋。
Weaviate 是一個開源向量資料庫,允許您儲存資料物件和來自您偏好的 ML 模型向量嵌入,並無縫擴充套件到數十億個資料物件。它提供了儲存文件嵌入、內容和元資料以及搜尋這些嵌入的工具,包括元資料過濾功能。
先決條件
-
正在執行的 Weaviate 例項。以下選項可用
-
Weaviate 雲服務(需要建立賬戶和 API 金鑰)
-
-
如果需要,EmbeddingModel 的 API 金鑰用於生成由
WeaviateVectorStore
儲存的嵌入。
依賴
Spring AI 自動配置、starter 模組的 artifact 名稱發生了重大變化。有關更多資訊,請參閱升級說明。 |
將 Weaviate Vector Store 依賴新增到您的專案
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-weaviate-store</artifactId>
</dependency>
或新增到您的 Gradle build.gradle
構建檔案。
dependencies {
implementation 'org.springframework.ai:spring-ai-weaviate-store'
}
請參閱依賴管理章節,將 Spring AI BOM 新增到您的構建檔案。 |
配置
要連線到 Weaviate 並使用 WeaviateVectorStore
,您需要提供例項的訪問詳細資訊。可以透過 Spring Boot 的 application.properties 提供簡單的配置,
spring.ai.vectorstore.weaviate.host=<host_of_your_weaviate_instance>
spring.ai.vectorstore.weaviate.scheme=<http_or_https>
spring.ai.vectorstore.weaviate.api-key=<your_api_key>
# API key if needed, e.g. OpenAI
spring.ai.openai.api-key=<api-key>
環境變數,
export SPRING_AI_VECTORSTORE_WEAVIATE_HOST=<host_of_your_weaviate_instance>
export SPRING_AI_VECTORSTORE_WEAVIATE_SCHEME=<http_or_https>
export SPRING_AI_VECTORSTORE_WEAVIATE_API_KEY=<your_api_key>
# API key if needed, e.g. OpenAI
export SPRING_AI_OPENAI_API_KEY=<api-key>
或者可以混合使用。
如果您選擇建立一個 shell 指令碼以便於將來的工作,請務必在啟動應用程式之前透過“source”檔案來執行它,例如 source <您的指令碼名稱>.sh 。 |
自動配置
Spring AI 為 Weaviate Vector Store 提供了 Spring Boot 自動配置。要啟用它,請將以下依賴項新增到您的專案的 Maven pom.xml
檔案中
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-vector-store-weaviate</artifactId>
</dependency>
或新增到您的 Gradle build.gradle
構建檔案。
dependencies {
implementation 'org.springframework.ai:spring-ai-starter-vector-store-weaviate'
}
請參閱依賴管理章節,將 Spring AI BOM 新增到您的構建檔案。 |
請檢視向量儲存的配置引數列表,瞭解預設值和配置選項。
請參閱倉庫章節,將 Maven Central 和/或 Snapshot 倉庫新增到您的構建檔案。 |
此外,您還需要一個配置好的 EmbeddingModel
bean。有關更多資訊,請參閱EmbeddingModel章節。
以下是所需 bean 的示例
@Bean
public EmbeddingModel embeddingModel() {
// Can be any other Embeddingmodel implementation.
return new OpenAiEmbeddingModel(new OpenAiApi(System.getenv("SPRING_AI_OPENAI_API_KEY")));
}
現在您可以在應用程式中將 WeaviateVectorStore
自動注入為向量儲存。
手動配置
您可以使用 builder 模式手動配置 WeaviateVectorStore
,而不是使用 Spring Boot 自動配置
@Bean
public WeaviateClient weaviateClient() {
return new WeaviateClient(new Config("http", "localhost:8080"));
}
@Bean
public VectorStore vectorStore(WeaviateClient weaviateClient, EmbeddingModel embeddingModel) {
return WeaviateVectorStore.builder(weaviateClient, embeddingModel)
.objectClass("CustomClass") // Optional: defaults to "SpringAiWeaviate"
.consistencyLevel(ConsistentLevel.QUORUM) // Optional: defaults to ConsistentLevel.ONE
.filterMetadataFields(List.of( // Optional: fields that can be used in filters
MetadataField.text("country"),
MetadataField.number("year")))
.build();
}
元資料過濾
您也可以在 Weaviate 儲存中使用通用、可移植的元資料過濾器。
例如,您可以使用文字表示式語言
vectorStore.similaritySearch(
SearchRequest.builder()
.query("The World")
.topK(TOP_K)
.similarityThreshold(SIMILARITY_THRESHOLD)
.filterExpression("country in ['UK', 'NL'] && year >= 2020").build());
或使用 Filter.Expression
DSL 以程式設計方式實現
FilterExpressionBuilder b = new FilterExpressionBuilder();
vectorStore.similaritySearch(SearchRequest.builder()
.query("The World")
.topK(TOP_K)
.similarityThreshold(SIMILARITY_THRESHOLD)
.filterExpression(b.and(
b.in("country", "UK", "NL"),
b.gte("year", 2020)).build()).build());
這些(可移植的)過濾器表示式會自動轉換為 Weaviate 專有的where 過濾器。 |
例如,這個可移植的過濾器表示式
country in ['UK', 'NL'] && year >= 2020
被轉換為 Weaviate 專有的 GraphQL 過濾器格式
operator: And
operands:
[{
operator: Or
operands:
[{
path: ["meta_country"]
operator: Equal
valueText: "UK"
},
{
path: ["meta_country"]
operator: Equal
valueText: "NL"
}]
},
{
path: ["meta_year"]
operator: GreaterThanEqual
valueNumber: 2020
}]
在 Docker 中執行 Weaviate
要快速啟動本地 Weaviate 例項,您可以在 Docker 中執行它
docker run -it --rm --name weaviate \
-e AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true \
-e PERSISTENCE_DATA_PATH=/var/lib/weaviate \
-e QUERY_DEFAULTS_LIMIT=25 \
-e DEFAULT_VECTORIZER_MODULE=none \
-e CLUSTER_HOSTNAME=node1 \
-p 8080:8080 \
semitechnologies/weaviate:1.22.4
這將啟動一個可透過 localhost:8080 訪問的 Weaviate 例項。
WeaviateVectorStore 屬性
您可以在 Spring Boot 配置中使用以下屬性來自定義 Weaviate 向量儲存。
屬性 | 描述 | 預設值 |
---|---|---|
|
Weaviate 伺服器的主機 |
localhost:8080 |
|
連線 schema |
http |
|
用於認證的 API 金鑰 |
|
|
spring.ai.vectorstore.weaviate.object-class |
用於儲存文件的類名 |
|
一致性與速度之間的預期權衡 |
ConsistentLevel.ONE |
|
配置可在過濾器中使用的元資料欄位。格式:spring.ai.vectorstore.weaviate.filter-field.<欄位名>=<欄位型別> |
訪問原生客戶端
Weaviate Vector Store 實現透過 getNativeClient()
方法提供對底層原生 Weaviate 客戶端 (WeaviateClient
) 的訪問
WeaviateVectorStore vectorStore = context.getBean(WeaviateVectorStore.class);
Optional<WeaviateClient> nativeClient = vectorStore.getNativeClient();
if (nativeClient.isPresent()) {
WeaviateClient client = nativeClient.get();
// Use the native client for Weaviate-specific operations
}
原生客戶端允許您訪問 Weaviate 特定的功能和操作,這些功能和操作可能不會透過 VectorStore
介面暴露。