跳转到主要内容
Chroma 允许您使用 collection 原语来管理嵌入集合。集合是 Chroma 中存储和查询的基本单位。

创建集合

Chroma 集合是带名称创建的。集合名称会用于 URL 中,因此对其有一些限制:
  • 名称长度必须在 3 到 512 个字符之间。
  • 名称必须以小写字母或数字开头和结尾,中间可以包含点、连字符和下划线。
  • 名称不得包含两个连续的点。
  • 名称不得是有效的 IP 地址。
collection = client.create_collection(name="my_collection")
请注意,集合名称在 Chroma 数据库内必须是唯一的。如果您尝试创建与现有集合同名的集合,将会看到异常。

嵌入函数

当您向集合添加文档时,Chroma 将使用集合的 嵌入函数 (embedding function) 为您进行嵌入。Chroma 默认使用 sentence transformer 嵌入函数。 Chroma 还提供各种嵌入函数,您可以在创建集合时提供。例如,您可以使用 OpenAIEmbeddingFunction 创建集合:
安装 openai
pip install openai
使用 OpenAIEmbeddingFunction 创建集合
import os
from chromadb.utils.embedding_functions import OpenAIEmbeddingFunction

collection = client.create_collection(
    name="my_collection",
    embedding_function=OpenAIEmbeddingFunction(
        api_key=os.getenv("OPENAI_API_KEY"),
        model_name="text-embedding-3-small"
    )
)
除了让 Chroma 嵌入文档外,您还可以在向集合 添加数据 时直接提供嵌入。在这种情况下,您的集合将不会设置嵌入函数,您将负责在添加数据和查询时直接提供嵌入。
collection = client.create_collection(
    name="my_collection",
    embedding_function=None
)

集合元数据

在创建集合时,您可以传递可选的 metadata 参数,向集合添加元数据键值对映射。这对于添加关于集合的常规信息非常有用,例如创建时间、集合中存储的数据描述等。
from datetime import datetime

collection = client.create_collection(
    name="my_collection",
    embedding_function=emb_fn,
    metadata={
        "description": "my first Chroma collection",
        "created": str(datetime.now())
    }
)

获取集合

集合创建后,有几种方法可以获取它。get_collection 函数将根据名称从 Chroma 获取集合。它返回一个包含 namemetadataconfigurationembedding_functionCollection 对象。
collection = client.get_collection(name="my-collection")
get_or_create_collection 函数的行为类似,但如果集合不存在则会创建它。您可以向其传递 create_collection 预期的相同参数,如果集合已存在,客户端将忽略这些参数。
collection = client.get_or_create_collection(
    name="my-collection",
    metadata={"description": "..."}
)
list_collections 函数返回您 Chroma 数据库中的所有集合。集合将按创建时间从旧到新排序。
collections = client.list_collections()
默认情况下,list_collections 最多返回 100 个集合。如果您有超过 100 个集合,或者只需要获取集合的一个子集,可以使用 limitoffset 参数。
first_collections_batch = client.list_collections(limit=100) # get the first 100 collections
second_collections_batch = client.list_collections(limit=100, offset=100) # get the next 100 collections
collections_subset = client.list_collections(limit=20, offset=50) # get 20 collections starting from the 50th
当前版本的 Chroma 会在服务器上存储您用于创建集合的嵌入函数,以便客户端在后续的“获取”操作中为您解析它。如果您运行的是较旧版本的 Chroma 客户端或服务器(早于 1.1.13),则在使用 get_collection 时需要提供与创建集合时相同的嵌入函数。
collection = client.get_collection(
    name='my-collection',
    embedding_function=ef
)

修改集合

集合创建后,您可以使用 modify 方法修改其名称、元数据以及 索引配置 的元素。
collection.modify(
   name="new-name",
   metadata={"description": "new description"}
)

删除集合

您可以按名称删除集合。此操作将删除集合、其所有嵌入以及关联的文档和记录元数据。
删除集合具有破坏性且不可逆。
client.delete_collection(name="my-collection")

便捷方法

集合还提供了一些有用的便捷方法:
  • count - 返回集合中的记录数量。
  • peek - 返回集合中的前 10 条记录。
collection.count()
collection.peek()