Milvus
Milvus 是一个开源向量数据库,在数据科学和机器学习领域备受关注。其一个突出的特点是对向量索引和查询的强大支持。Milvus 采用最先进的算法来加速搜索过程,使其在检索相似向量时具有极高的效率,即使处理的是大型数据集。
先决条件
-
正在运行的 Milvus 实例。以下选项可用
-
如果需要,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 PGVector
vectorStore.add(documents);
// Retrieve documents similar to a query
List<Document> results = vectorStore.similaritySearch(SearchRequest.query("Spring").withTopK(5));
手动配置
您可以手动配置 MilvusVectorStore
,而不是使用 Spring Boot 自动配置。将以下依赖项添加到您的项目
<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 数据库的名称。 |
default |
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 集合要使用的度量类型。 |
余弦 |
spring.ai.vectorstore.milvus.index-parameters |
Milvus 集合要使用的索引参数。 |
{"nlist":1024} |
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 |
用作识别和身份验证目的的密钥令牌。 |
- |
spring.ai.vectorstore.milvus.client.connect-timeout-ms |
客户端通道的连接超时值。超时值必须大于零。 |
10000 |
spring.ai.vectorstore.milvus.client.keep-alive-time-ms |
客户端通道的保持活动时间值。保持活动值必须大于零。 |
55000 |
spring.ai.vectorstore.milvus.client.keep-alive-timeout-ms |
客户端通道的保持活动超时值。超时值必须大于零。 |
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 |
客户端通道的空闲超时值。超时值必须大于零。 |
24h |
spring.ai.vectorstore.milvus.client.username |
此连接的用户名和密码。 |
root |
spring.ai.vectorstore.milvus.client.password |
此连接的密码。 |
milvus |
启动 Milvus Store
在 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
)