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

集成Cohere嵌入到ChromaDB时添加文档触发ValueError问题求助

解决Cohere嵌入集成ChromaDB时的数组形状不匹配问题

问题原因

你遇到的错误源于ChromaDB 0.5.11内置的CohereEmbeddingFunction仅适配Cohere ClientV1,但你使用的Cohere 5.10.0默认采用ClientV2,两者的嵌入返回格式结构存在差异:

  • ClientV1返回的嵌入是直接的数组列表
  • ClientV2的embed响应中,嵌入数据嵌套在embeddings.float字段下,默认的Chroma嵌入函数无法正确解析,最终导致生成的嵌入形状不一致。

解决方案

方案1:自定义适配ClientV2的嵌入函数

替换默认的CohereEmbeddingFunction,实现一个兼容ClientV2的版本:

from chromadb import EmbeddingFunction
from chromadb.api.types import Documents, Embeddings
import cohere

class CohereV2EmbeddingFunction(EmbeddingFunction):
    def __init__(self, api_key: str, model_name: str = "embed-english-v3.0"):
        self.client = cohere.ClientV2(api_key)
        self.model_name = model_name

    def __call__(self, texts: Documents) -> Embeddings:
        response = self.client.embed(
            texts=texts,
            model=self.model_name,
            input_type="search_document",
            embedding_types=["float"]
        )
        # 正确提取ClientV2返回的float嵌入数组
        return response.embeddings.float

# 使用自定义嵌入函数
co_ef = CohereV2EmbeddingFunction(api_key=CO_API_KEY, model_name="embed-english-v3.0")

path = "root/data"
client = chromadb.PersistentClient(path=path)
collection = client.get_or_create_collection(
    name="vector_db", 
    embedding_function=co_ef,
    metadata={"hnsw:space": "cosine"}
)

collection.add(documents=["hello", "goodbye"], ids=["0", "1"])

方案2:降级Cohere到兼容ClientV1的版本

如果不需要Cohere v5.x的新特性,可以直接将Cohere版本降级到v4.x系列(比如4.3.2),该版本默认使用ClientV1,与Chroma 0.5.11的内置嵌入函数完全兼容:

pip install cohere==4.3.2

降级后直接运行你原来的代码即可正常工作。

验证说明

两种方案均可解决数组形状不匹配问题:

  • 方案1保留Cohere v5.x的新特性,适合需要使用ClientV2功能的场景
  • 方案2操作更简单,适合快速适配的场景

内容的提问来源于stack exchange,提问作者Marco Palombo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 21:43:15