Java LangChain4j 集成 Milvus 向量数据库及与 Chroma 区别
Java LangChain4j 集成 Milvus 向量数据库需完成环境部署、依赖引入、配置连接及核心操作。Milvus 为分布式云原生架构,支持亿级数据与高并发,适合生产环境;Chroma 为轻量嵌入式存储,适合开发测试与小规模应用。两者在 LangChain4j 中接口统一,可根据数据规模、运维成本及扩展需求进行选型,开发阶段可用 Chroma 快速验证,生产环境切换至 Milvus。

Java LangChain4j 集成 Milvus 向量数据库需完成环境部署、依赖引入、配置连接及核心操作。Milvus 为分布式云原生架构,支持亿级数据与高并发,适合生产环境;Chroma 为轻量嵌入式存储,适合开发测试与小规模应用。两者在 LangChain4j 中接口统一,可根据数据规模、运维成本及扩展需求进行选型,开发阶段可用 Chroma 快速验证,生产环境切换至 Milvus。

Milvus 是一款云原生、高性能的分布式向量数据库,LangChain4j 提供了官方适配层,集成核心分为「环境准备→配置连接→核心操作」三步。
milvus_cli 确认服务可用。部署 Milvus:推荐用 Docker Compose 快速部署(适合开发/测试),生产环境用 K8s 集群:
# 下载 Milvus Docker Compose 配置
wget https://github.com/milvus-io/milvus/releases/download/v2.4.3/milvus-standalone-docker-compose.yml -O docker-compose.yml
# 启动 Milvus
docker-compose up -d
在 pom.xml 中添加 LangChain4j-Milvus 适配库及核心依赖:
<dependencies>
<!-- LangChain4j 核心 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-core</artifactId>
<version>0.32.0</version>
</dependency>
<!-- LangChain4j Milvus 适配库 -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-milvus</artifactId>
<version>0.32.0</version>
</dependency>
<!-- Milvus Java SDK(适配层依赖) -->
<dependency>
<groupId>io.milvus</groupId>
<artifactId>milvus-sdk-java</artifactId>
<version>2.4.3</version>
</dependency>
<!-- 嵌入模型(可选,用于生成向量) -->
<dependency>
<groupId>dev.langchain4j</groupId>
<artifactId>langchain4j-embeddings-all-minilm-l6-v2</artifactId>
<version>0.32.0</version>
</dependency>
</dependencies>
LangChain4j 通过 MilvusEmbeddingStore 封装 Milvus 的操作,核心配置包括连接信息、集合(表)参数、索引策略等:
import dev.langchain4j.store.embedding.milvus.MilvusEmbeddingStore;
import dev.langchain4j.store.embedding.milvus.MilvusEmbeddingStoreConfiguration;
import io.milvus.param.IndexType;
import io.milvus.param.MetricType;
public class MilvusConfig {
public static MilvusEmbeddingStore createMilvusStore() {
// 1. 构建 Milvus 配置
MilvusEmbeddingStoreConfiguration config = MilvusEmbeddingStoreConfiguration.builder()
// 连接配置
.host("localhost") // Milvus 服务地址
.port(19530) // Milvus 默认端口
.databaseName("default") // 数据库名(Milvus 2.x 支持多库)
.collectionName("document_embeddings") // 向量集合名(类似表)
// 向量参数
.dimension(384) // 向量维度(与嵌入模型匹配,AllMiniLmL6V2 为 384)
.metricType(MetricType.COSINE) // 距离计算方式:COSINE/IP/L2
// 索引配置(核心,影响检索性能)
.indexType(IndexType.IVF_FLAT) // 索引类型:IVF_FLAT(平衡性能/精度)
.indexParam("nlist=100") // 索引参数:nlist=数据量平方根(如 10 万条设 100)
// 其他配置
.createCollectionIfNotExists(true) // 自动创建集合
.dropCollectionIfExists(false) // 启动时不删除已有集合
.build();
// 2. 创建 Milvus 向量存储实例
return new (config);
}
}
LangChain4j 统一了向量存储的操作接口,Milvus 的使用方式与其他向量库(如 pgvector)完全一致:
import dev.langchain4j.data.embedding.Embedding;
import dev.langchain4j.data.embedding.EmbeddingMatch;
import dev.langchain4j.data.segment.TextSegment;
import dev.langchain4j.model.embedding.AllMiniLmL6V2EmbeddingModel;
import java.util.List;
public class MilvusOperations {
public static void main(String[] args) {
// 1. 初始化 Milvus 存储和嵌入模型
MilvusEmbeddingStore vectorStore = MilvusConfig.createMilvusStore();
AllMiniLmL6V2EmbeddingModel embeddingModel = new AllMiniLmL6V2EmbeddingModel();
// 2. 新增向量:文本→嵌入向量→存储
String text1 = "LangChain4j 支持 Milvus、Chroma、pgvector 等多种向量存储";
String text2 = "Milvus 是分布式向量数据库,适合大规模向量检索";
Embedding embedding1 = embeddingModel.embed(text1).content();
Embedding embedding2 = embeddingModel.embed(text2).content();
TextSegment segment1 = TextSegment.from(text1);
TextSegment segment2 = TextSegment.from(text2);
// 批量新增(推荐,性能更高)
vectorStore.addAll(List.of(embedding1, embedding2), List.of(segment1, segment2));
// 3. 相似性检索:按查询向量找最相似结果
;
embeddingModel.embed(query).content();
List<EmbeddingMatch<TextSegment>> matches = vectorStore.findRelevant(queryEmbedding, , );
(EmbeddingMatch<TextSegment> match : matches) {
System.out.println( + match.score());
System.out.println( + match.embeddedObject().text());
}
}
}
HNSW 索引(IndexType.HNSW),参数设 M=16, efConstruction=200,检索性能比 IVF_FLAT 提升 10 倍以上;MilvusClientConfig 调整连接数(默认 10);Milvus 和 Chroma 是 LangChain4j 中最常用的两款向量存储,但定位、架构、适用场景差异显著,面试中需重点说明选型逻辑:
| 对比维度 | Milvus | Chroma |
|---|---|---|
| 架构类型 | 分布式、云原生向量数据库(独立服务) | 轻量级、嵌入式向量存储(库/进程内) |
| 部署形态 | 需独立部署(Docker/K8s),支持集群化 | 无需独立部署,可嵌入 Java 进程,或轻量服务部署 |
| 数据规模 | 支持亿级 + 向量检索,水平扩展能力强 | 适合百万级以内向量,大规模性能下降明显 |
| 性能特性 | 分布式索引、GPU 加速,高并发/高吞吐 | 单机索引,轻量查询快,高并发弱 |
| 功能丰富度 | 支持多索引、TTL、数据分片、权限控制、监控 | 功能极简,仅核心向量增删查,无高级特性 |
| 运维成本 | 中高(需维护集群、索引、监控) | 极低(嵌入使用无运维,轻量服务仅需基础监控) |
| LangChain4j 适配 | 官方适配,支持全量操作 | 官方适配,操作更简单,配置更少 |
| 适用场景 | 生产环境、大规模向量检索、高并发场景 | 开发/测试、小规模应用、嵌入式场景 |
| 存储依赖 | 依赖 ETCD(元数据)、MinIO(对象存储) | 支持内存/本地文件/SQLite,无外部依赖 |
LangChain4j 集成 Milvus 及与 Chroma 对比的核心要点:
MilvusEmbeddingStore 调用统一向量操作接口,生产环境重点调优索引和分布式配置;
微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online
JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online
使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online
Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online
生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online