You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 17:39:49