使用LangChain、Chroma与Vertex AI构建QA Chain时Embedding接口报错求解决
解决Chroma与LangChain VertexAIEmbeddings的接口兼容问题
Chroma 0.4.16及以上版本重构了EmbeddingFunction接口,改为支持多模态输入(可处理任意类型文件),旧版LangChain的VertexAIEmbeddings实现不符合该新接口,因此出现报错。以下是两种可行的解决办法:
方法一:升级LangChain到最新版本
LangChain已适配Chroma的新接口,升级后直接运行原有代码即可解决问题。执行以下命令完成升级:
pip install --upgrade langchain langchain-google-vertexai chromadb
方法二:手动适配Embedding接口(适用于无法升级的场景)
若无法升级LangChain,可自定义包装类,将VertexAIEmbeddings适配为符合Chroma新接口的实现:
from langchain.embeddings.vertexai import VertexAIEmbeddings from langchain.vectorstores import Chroma from langchain_core.documents import Document from chromadb import EmbeddingFunction from chromadb.api.types import Documents, Embeddings class VertexAIChromaEmbeddingFunction(EmbeddingFunction): def __init__(self, embedding: VertexAIEmbeddings): self.embedding = embedding def embed_documents(self, documents: Documents) -> Embeddings: # 提取文档中的文本内容,适配Chroma的多模态输入要求 texts = [doc.page_content if hasattr(doc, 'page_content') else str(doc) for doc in documents] return self.embedding.embed_documents(texts) def embed_query(self, query: str) -> Embeddings: return self.embedding.embed_query(query) # 使用适配后的类创建向量存储 embedding = VertexAIEmbeddings() chroma_embedding = VertexAIChromaEmbeddingFunction(embedding) vectorstore = Chroma.from_documents( documents=[Document(content="test")], embedding=chroma_embedding )
内容的提问来源于stack exchange,提问作者sergio.azevedo
相关产品推荐
相关产品推荐

