ChromaDB from_documents函数报错:EmbeddingFunction接口兼容问题求助
解决ChromaDB 0.4.16 EmbeddingFunction接口迁移问题
问题根源
ChromaDB 0.4.16对EmbeddingFunction接口做了强制规范,要求__call__方法必须使用(self, input)的固定签名,旧代码中用*args, **kwargs这类模糊参数的写法不再兼容,因此触发ValueError。
具体修改方案
假设你之前的自定义嵌入函数代码是类似这样的:
from chromadb import EmbeddingFunction class CustomEmbedding(EmbeddingFunction): def __call__(self, *args, **kwargs): texts = kwargs.get("input") # 原嵌入生成逻辑 return generated_embeddings
需要调整为严格匹配新接口的形式:
from chromadb import EmbeddingFunction class CustomEmbedding(EmbeddingFunction): def __call__(self, input: list[str]) -> list[list[float]]: # 直接使用input参数(它是待嵌入的文本列表) # 替换为你的嵌入生成逻辑,比如调用预训练模型 embeddings = [your_model.encode(text) for text in input] return embeddings
核心注意事项
- 必须显式声明
input参数,类型为list[str](对应待嵌入的文本集合) - 返回值必须是
list[list[float]]结构,即每个文本对应的浮点型嵌入向量列表 - 彻底移除
*args、**kwargs这类不定参数,严格遵循(self, input)的签名要求
验证方法
修改完成后重新调用create_chromadb函数,确认不再抛出签名错误,同时检查嵌入向量的生成结果是否符合预期。
内容的提问来源于stack exchange,提问作者Dhruv
相关产品推荐
相关产品推荐

