如何修改 ChromaDB 集合的元数据?

问题描述 投票:0回答:1

我使用 ChromaDB 进行简单的问答和 RAG。我想在集合元数据对象中存储一些信息(作为缓存)。例如,一些默认设置与集合相关。我需要根据用户设置不时更新它们。问题是我想使用余弦距离进行相似性搜索而不是默认的 L2。

让我们看看我是否要修改元数据。我唯一能找到的就是调用 collection.metadata.modify([meta_data_dictionary])。 (注意。直接修改元数据对象是不行的)

使用修改方法时,必须复制原始元数据并进行更改。无法对单个元素进行更改,至少我无法做到。问题是我无法更改元数据,因为如果我更改元数据,即使您设置相同的距离函数:“hnsw:space”:“cosine”。您将得到以下异常:

ValueError:当前不支持在创建集合后更改集合的距离函数。

我在这里做错了什么吗?

一些示例代码:

import chromadb
client = chromadb.Client()

collection = client.get_or_create_collection(name = "my_collection", metadata={"hnsw:space": "cosine", "other_data": "test1"})
client.list_collections()

colleccollection.modify(metadata={"hnsw:space": "cosine", "other_data": "test2"})`enter 

结果: ValueError:当前不支持在创建集合后更改集合的距离函数。

注意

直接修改元数据也不起作用,因为可能会出现元数据被更改的情况。但是,它不会被保存。我使用内存客户端作为示例,但我想保留更改:

collection.metadata["other_data"] = "test2"
print(collection.metadata) # this will set the value to test 2
collection = client.get_or_create_collection("my_collection")
print(collection.metadata) # this will reset the value to test 1
database vector metadata chromadb
1个回答
0
投票

基于 ChromaDB 文档 https://cookbook.chromadb.dev/core/collections/#cloning-a-collection,直接更新集合的 HNSW 参数和重新索引不是一个选项。相反,该过程需要克隆集合,在克隆过程中更新参数,然后替换原始集合

© www.soinside.com 2019 - 2024. All rights reserved.