Skip to content
LangChain4j 文档版本 1.22.0 源快照 9bda17cf 更新于 2026-10-14

Chroma

https://www.trychroma.com/

Maven 依赖

xml
<dependency>
    <groupId>dev.langchain4j</groupId>
    <artifactId>langchain4j-chroma</artifactId>
    <version>1.22.0-beta32</version>
</dependency>

API

  • ChromaEmbeddingStore

示例

支持的 API 版本

Chroma 有多个 REST API 版本:

  • 直到 0.5.16 版本:仅支持 API V1
  • 0.5.16 到 0.6.3 版本:支持 API V1 和 V2(V1 API 在 0.6.2 前后引入了一些 bug)
  • 0.7.0 之后的版本:仅支持 API V2,因此你需要选择正确的版本 在配置 ChromaEmbeddingStore 时:
java
ChromaEmbeddingStore.builder()
    .apiVersion(ChromaApiVersion.V2)
    .baseUrl(...)
    .tenantName(...)
    .databaseName(...)
    .collectionName(...)
    .build();

距离度量

创建 Chroma 集合时会指定一个距离度量,它决定如何衡量两个嵌入之间的距离。Chroma 支持 cosine、l2(平方欧氏)与 ip(内积),除非另行请求,否则默认使用 l2。

当 ChromaEmbeddingStore 创建集合时,它以 cosine 距离度量创建。 当集合已存在时,则按其创建时所用的距离度量原样使用:

java
ChromaEmbeddingStore store = ChromaEmbeddingStore.builder()
    .baseUrl("http://localhost:8000")
    .collectionName("my-collection")
    .build();

EmbeddingMatch.score() 返回的相关性分数始终落在 [0, 1] 区间,1 表示最 相关。它由集合的距离度量推导而来,因此来自具有不同 距离度量的集合所得到的分数彼此不可比较。同样的道理也适用于 EmbeddingSearchRequest 的 minScore,它是与集合自身度量的分数相比较的。

对于 ip,只有当嵌入被归一化时分数才准确,而大多数嵌入模型都是如此。

当前限制

  • Chroma 无法按字母数字元数据的大于/小于进行过滤,仅支持 int 和 float
  • Chroma 的 not 过滤行为如下:如果你按 "key" 不等于 "a" 过滤, 那么实际上会返回所有 "key" != "a" 的条目,但不包含没有 "key" 元数据的条目!

BytesRouter 是社区翻译站点,所有译文仅供参考,一切以官方英文原文为准。