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

Chromadb 0.4.8+Langchain 0.0.276中SentenceTransformerEmbeddingFunction报错无embed_documents属性

问题解决:AttributeError: 'SentenceTransformerEmbeddingFunction' object has no attribute 'embed_documents'

问题原因

你使用的chromadb.utils.embedding_functions.SentenceTransformerEmbeddingFunction是ChromaDB原生客户端的嵌入函数,它的接口与LangChain要求的Embeddings抽象类不兼容——LangChain要求嵌入对象必须具备embed_documents和embed_query方法,而这个ChromaDB原生函数并未实现这些方法。

修复方案

改用LangChain自带的SentenceTransformerEmbeddings类,它完全符合LangChain的接口规范,修改后的代码如下:

from langchain.vectorstores import Chroma
from langchain.embeddings import SentenceTransformerEmbeddings

# 初始化符合LangChain规范的嵌入模型
embedding = SentenceTransformerEmbeddings(model_name="all-MiniLM-L6-v2")

# 后续正常初始化Chroma向量库
db = Chroma(embedding_function=embedding, persist_directory="./chroma_db")

备选方案(原生函数适配)

如果一定要使用ChromaDB原生的嵌入函数,需要手动封装一层,实现LangChain要求的方法:

from langchain.vectorstores import Chroma
from chromadb.utils import embedding_functions
from langchain.embeddings.base import Embeddings
from typing import List

class ChromaEmbeddingAdapter(Embeddings):
    def __init__(self, chroma_embedding_fn):
        self.chroma_embedding_fn = chroma_embedding_fn
    
    def embed_documents(self, texts: List[str]) -> List[List[float]]:
        return self.chroma_embedding_fn(texts)
    
    def embed_query(self, text: str) -> List[float]:
        return self.chroma_embedding_fn([text])[0]

# 使用适配器包装原生函数
chroma_embedding = embedding_functions.SentenceTransformerEmbeddingFunction(model_name="all-MiniLM-L6-v2")
embedding = ChromaEmbeddingAdapter(chroma_embedding)

但更推荐直接使用LangChain自带的SentenceTransformerEmbeddings,代码更简洁且不易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 05:12:05