Milvus
Milvus 是一個開源向量資料庫,在資料科學和機器學習領域引起了廣泛關注。其突出的特點之一在於對向量索引和查詢的強大支援。Milvus 採用最先進、尖端的演算法來加速搜尋過程,即使在處理大量資料集時,也能非常有效地檢索相似的向量。
先決條件
-
一個正在運行的 Milvus 實例。以下選項可用:
-
Milvus 單機版:Docker、Operator、Helm、DEB/RPM、Docker Compose。
-
Milvus 集群版:Operator、Helm。
-
-
如果需要,用於 EmbeddingModel 的 API 金鑰,以產生由
MilvusVectorStore
儲存的嵌入向量。
相依性
然後將 Milvus VectorStore 啟動器相依性新增到您的專案中
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-milvus-store-spring-boot-starter</artifactId>
</dependency>
或新增到您的 Gradle build.gradle
建置檔案中。
dependencies {
implementation 'org.springframework.ai:spring-ai-milvus-store-spring-boot-starter'
}
向量儲存實作可以為您初始化必要的結構描述,但您必須選擇加入,方法是在適當的建構子中指定 initializeSchema
布林值,或在 application.properties
檔案中設定 …initialize-schema=true
。
這是一個重大變更!在 Spring AI 的早期版本中,此結構描述初始化是預設發生的。 |
Vector Store 也需要一個 EmbeddingModel
實例來計算文件的嵌入向量。您可以選擇其中一個可用的EmbeddingModel 實作。
若要連線和設定 MilvusVectorStore
,您需要提供您的實例的存取詳細資訊。可以透過 Spring Boot 的 application.yml
提供簡單的組態
spring: ai: vectorstore: milvus: client: host: "localhost" port: 19530 username: "root" password: "milvus" databaseName: "default" collectionName: "vector_store" embeddingDimension: 1536 indexType: IVF_FLAT metricType: COSINE
查看組態參數列表,以了解預設值和組態選項。 |
現在您可以將 Milvus Vector Store 自動注入到您的應用程式中使用它
@Autowired VectorStore vectorStore;
// ...
List <Document> documents = List.of(
new Document("Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!!", Map.of("meta1", "meta1")),
new Document("The World is Big and Salvation Lurks Around the Corner"),
new Document("You walk forward facing the past and you turn back toward the future.", Map.of("meta2", "meta2")));
// Add the documents to Milvus Vector Store
vectorStore.add(documents);
// Retrieve documents similar to a query
List<Document> results = this.vectorStore.similaritySearch(SearchRequest.query("Spring").withTopK(5));
手動組態
除了使用 Spring Boot 自動組態之外,您還可以手動組態 MilvusVectorStore
。若要將以下相依性新增到您的專案
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-milvus-store</artifactId>
</dependency>
請參閱相依性管理章節,將 Spring AI BOM 新增到您的建置檔案中。 |
若要在您的應用程式中組態 MilvusVectorStore,您可以使用以下設定
@Bean
public VectorStore vectorStore(MilvusServiceClient milvusClient, EmbeddingModel embeddingModel) {
MilvusVectorStoreConfig config = MilvusVectorStoreConfig.builder()
.withCollectionName("test_vector_store")
.withDatabaseName("default")
.withIndexType(IndexType.IVF_FLAT)
.withMetricType(MetricType.COSINE)
.build();
return new MilvusVectorStore(milvusClient, embeddingModel, config);
}
@Bean
public MilvusServiceClient milvusClient() {
return new MilvusServiceClient(ConnectParam.newBuilder()
.withAuthorization("minioadmin", "minioadmin")
.withUri(milvusContainer.getEndpoint())
.build());
}
中繼資料篩選
您可以將通用的、可移植的 中繼資料篩選器 與 Milvus 儲存庫一起使用。
例如,您可以使用文字運算式語言
vectorStore.similaritySearch(
SearchRequest.defaults()
.withQuery("The World")
.withTopK(TOP_K)
.withSimilarityThreshold(SIMILARITY_THRESHOLD)
.withFilterExpression("author in ['john', 'jill'] && article_type == 'blog'"));
或以程式設計方式使用 Filter.Expression
DSL
FilterExpressionBuilder b = new FilterExpressionBuilder();
vectorStore.similaritySearch(SearchRequest.defaults()
.withQuery("The World")
.withTopK(TOP_K)
.withSimilarityThreshold(SIMILARITY_THRESHOLD)
.withFilterExpression(b.and(
b.in("author","john", "jill"),
b.eq("article_type", "blog")).build()));
這些篩選運算式會轉換為對等的 Milvus 篩選器。 |
Milvus VectorStore 屬性
您可以在您的 Spring Boot 組態中使用以下屬性來自訂 Milvus 向量儲存庫。
屬性 | 描述 | 預設值 |
---|---|---|
spring.ai.vectorstore.milvus.database-name |
要使用的 Milvus 資料庫名稱。 |
預設 |
spring.ai.vectorstore.milvus.collection-name |
用於儲存向量的 Milvus 集合名稱 |
vector_store |
spring.ai.vectorstore.milvus.initialize-schema |
是否初始化 Milvus 的後端 |
false |
spring.ai.vectorstore.milvus.embedding-dimension |
要儲存在 Milvus 集合中的向量維度。 |
1536 |
spring.ai.vectorstore.milvus.index-type |
要為 Milvus 集合建立的索引類型。 |
IVF_FLAT |
spring.ai.vectorstore.milvus.metric-type |
要用於 Milvus 集合的度量類型。 |
COSINE |
spring.ai.vectorstore.milvus.index-parameters |
要用於 Milvus 集合的索引參數。 |
{"nlist":1024} |
spring.ai.vectorstore.milvus.id-field-name |
集合的 ID 欄位名稱 |
doc_id |
spring.ai.vectorstore.milvus.is-auto-id |
布林標記,指示是否將自動 ID 用於 ID 欄位 |
false |
spring.ai.vectorstore.milvus.content-field-name |
集合的內容欄位名稱 |
content |
spring.ai.vectorstore.milvus.metadata-field-name |
集合的中繼資料欄位名稱 |
metadata |
spring.ai.vectorstore.milvus.embedding-field-name |
集合的嵌入向量欄位名稱 |
embedding |
spring.ai.vectorstore.milvus.client.host |
主機的名稱或位址。 |
localhost |
spring.ai.vectorstore.milvus.client.port |
連線埠。 |
19530 |
spring.ai.vectorstore.milvus.client.uri |
Milvus 實例的 URI |
- |
spring.ai.vectorstore.milvus.client.token |
作為身分驗證和授權用途的金鑰的 Token。 |
- |
spring.ai.vectorstore.milvus.client.connect-timeout-ms |
用戶端通道的連線逾時值。逾時值必須大於零。 |
10000 |
spring.ai.vectorstore.milvus.client.keep-alive-time-ms |
用戶端通道的 Keep-alive 時間值。Keep-alive 值必須大於零。 |
55000 |
spring.ai.vectorstore.milvus.client.keep-alive-timeout-ms |
用戶端通道的 Keep-alive 逾時值。逾時值必須大於零。 |
20000 |
spring.ai.vectorstore.milvus.client.rpc-deadline-ms |
您願意等待伺服器回覆的最長期限。透過期限設定,用戶端在遇到網路波動導致的快速 RPC 失敗時將會等待。期限值必須大於或等於零。 |
0 |
spring.ai.vectorstore.milvus.client.client-key-path |
用於 TLS 雙向驗證的 client.key 路徑,僅在 "secure" 為 true 時生效 |
- |
spring.ai.vectorstore.milvus.client.client-pem-path |
用於 TLS 雙向驗證的 client.pem 路徑,僅在 "secure" 為 true 時生效 |
- |
spring.ai.vectorstore.milvus.client.ca-pem-path |
用於 TLS 雙向驗證的 ca.pem 路徑,僅在 "secure" 為 true 時生效 |
- |
spring.ai.vectorstore.milvus.client.server-pem-path |
用於 TLS 單向驗證的 server.pem 路徑,僅在 "secure" 為 true 時生效。 |
- |
spring.ai.vectorstore.milvus.client.server-name |
設定 SSL 主機名稱檢查的目標名稱覆寫,僅在 "secure" 為 True 時生效。注意:此值會傳遞至 grpc.ssl_target_name_override |
- |
spring.ai.vectorstore.milvus.client.secure |
保護此連線的授權,設定為 True 以啟用 TLS。 |
false |
spring.ai.vectorstore.milvus.client.idle-timeout-ms |
用戶端通道的閒置逾時值。逾時值必須大於零。 |
24 小時 |
spring.ai.vectorstore.milvus.client.username |
此連線的使用者名稱和密碼。 |
root |
spring.ai.vectorstore.milvus.client.password |
此連線的密碼。 |
milvus |
啟動 Milvus 儲存庫
從 src/test/resources/
資料夾中執行
docker-compose up
以清除環境
docker-compose down; rm -Rf ./volumes
然後連線到 https://127.0.0.1:19530 上的向量儲存庫,或連線到 https://127.0.0.1:9001 進行管理 (使用者:minioadmin
,密碼:minioadmin
)