LangChain OpenSearchVectorSearch实例创建时连接中止问题求助
LangChain OpenSearchVectorSearch 连接中止问题解决
问题背景
本地OpenSearch客户端通过client.bulk(bulk_data)可正常存储文档与嵌入向量,但使用LangChain的OpenSearchVectorSearch实例调用from_embeddings方法时,出现连接中止错误。
错误信息
error: raise ConnectionError("N/A", str(e), e) opensearchpy.exceptions.ConnectionError: ConnectionError(('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))) caused by: ProtocolError(('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')))
原代码
index_instance = OpenSearchVectorSearch( client=client, index_name=index_name, opensearch_url="http://localhost:9200", embedding_function=OpenAIEmbeddings, engine="faiss" ) print("instance created") texts = [d.page_content for d in chunks] metadatas = [d.metadata for d in chunks] embedder = OpenAIEmbeddings() embeddings = embedder.embed_documents(texts) doc_store = index_instance.from_embeddings(embeddings=embeddings, texts=texts, embedding=embedder, metadatas=metadatas, opensearch_url="http://localhost:9200")
解决步骤
- 避免重复初始化连接:
from_embeddings是类方法,无需先创建index_instance实例,直接通过OpenSearchVectorSearch.from_embeddings调用即可,防止重复传递连接参数引发冲突。 - 修正embedding参数传递:
embedding_function需要传入实例而非类,或者直接在from_embeddings中指定embedding参数即可,无需在实例化时重复设置。 - 统一连接参数:如果已经传入预先初始化好的
client,就不要再传递opensearch_url,避免客户端重复创建连接导致异常。 - 排查engine配置:若指定
engine="faiss",需确保OpenSearch已正确安装faiss插件;也可以先移除engine参数,用默认引擎测试是否能正常连接。
修正后的代码示例
texts = [d.page_content for d in chunks] metadatas = [d.metadata for d in chunks] embedder = OpenAIEmbeddings() embeddings = embedder.embed_documents(texts) # 直接调用类方法from_embeddings,传入已有的client和必要参数 doc_store = OpenSearchVectorSearch.from_embeddings( embeddings=embeddings, texts=texts, embedding=embedder, metadatas=metadatas, client=client, index_name=index_name, # 若确认faiss插件已安装,可添加engine="faiss",否则先注释 # engine="faiss" )
内容的提问来源于stack exchange,提问作者Faizan Ahmad
相关产品推荐
相关产品推荐

