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

LangChain中创建FAISS对象时遭遇AttributeError问题求助

问题解决:FAISS.from_documents 触发 AttributeError 错误

执行代码db = FAISS.from_documents(documents=documents, embedding=embedding)时出现以下错误:

AttributeError: 'google.protobuf.pyext._message.RepeatedCompositeCo' object has no attribute 'WhichOneof'

问题代码

自定义Embedding类:

class MyVertexAIEmbeddings(VertexAIEmbeddings, Embeddings):
    model_name = 'textembedding-gecko'
    max_batch_size = 5
    
    def embed_segments(self, segments: List) -> List:
        embeddings = []
        for i in tqdm(range(0, len(segments), self.max_batch_size)):
            batch = segments[i: i+self.max_batch_size]
            embeddings.extend(self.client.get_embeddings(batch))
        return [embedding.values for embedding in embeddings]
    
    def embed_query(self, query: str) -> List:
        embeddings = self.client.get_embeddings([query])
        return embeddings[0].values

加载数据与初始化:

documents = JSONLoader(file_path='./data/rag-schema/tables.jsonl', jq_schema='.', text_content=False, json_lines=True).load()
embedding = MyVertexAIEmbeddings()

触发错误的代码:

db = FAISS.from_documents(documents=documents, embedding=embedding)

解决方法

1. 转换Embedding结果为原生Python列表

错误根源是Vertex AI返回的embedding.values是protobuf的RepeatedComposite对象,FAISS无法直接处理该类型,需转换为普通列表:
修改自定义Embedding类的两个方法:

class MyVertexAIEmbeddings(VertexAIEmbeddings, Embeddings):
    model_name = 'textembedding-gecko'
    max_batch_size = 5
    
    def embed_segments(self, segments: List) -> List:
        embeddings = []
        for i in tqdm(range(0, len(segments), self.max_batch_size)):
            batch = segments[i: i+self.max_batch_size]
            embeddings.extend(self.client.get_embeddings(batch))
        # 转换为原生列表
        return [list(embedding.values) for embedding in embeddings]
    
    def embed_query(self, query: str) -> List:
        embeddings = self.client.get_embeddings([query])
        # 转换为原生列表
        return list(embeddings[0].values)

2. 确保Protobuf版本兼容

若修改后仍报错,检查protobuf版本,高版本可能与Vertex AI SDK存在兼容性问题,可安装指定版本:

pip install protobuf==3.20.3

内容的提问来源于stack exchange,提问作者shaquille.oatmeal

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 18:03:26