LangChain本地检索链报错:Ollama连接中断问题解析与解决
问题
在Ubuntu 22.04系统上跟随LangChain本地模型快速入门教程实现Retrieval Chain模块时,执行FAISS.from_documents代码出现连接失败问题。
运行代码
from langchain_community.llms import Ollama from langchain_core.prompts import ChatPromptTemplate from langchain_core.output_parsers import StrOutputParser from langchain_community.document_loaders import WebBaseLoader from langchain_community.embeddings import OllamaEmbeddings from langchain_community.vectorstores import FAISS from langchain_community.vectorstores import Chroma from langchain.text_splitter import RecursiveCharacterTextSplitter from langchain.chains.combine_documents import create_stuff_documents_chain from langchain.chains import create_retrieval_chain #Load document loader = WebBaseLoader("https://docs.smith.langchain.com/overview") docs = loader.load() #Embeddings embeddings = OllamaEmbeddings() #Documents + embeddings -> get vectors text_splitter = RecursiveCharacterTextSplitter() documents = text_splitter.split_documents(docs) vector = FAISS.from_documents(documents, embeddings) prompt = ChatPromptTemplate.from_template("""Answer the following question based only on the provided context: {context} Question: {input}""") llm = Ollama(model="mistral") #llm + prompts document_chain = create_stuff_documents_chain(llm, prompt) #vectors + llm + prompts retriever = vector.as_retriever() retrieval_chain = create_retrieval_chain(retriever, document_chain) response = retrieval_chain.invoke({"input": "how can langsmith help with testing?"}) print(response["answer"])
报错信息
Traceback (most recent call last): File "/home/pikachu/.local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 790, in urlopen response = self._make_request( File "/home/pikachu/.local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 536, in _make_request response = conn.getresponse() File "/home/pikachu/.local/lib/python3.10/site-packages/urllib3/connection.py", line 461, in getresponse httplib_response = super().getresponse() File "/usr/lib/python3.10/http/client.py", line 1375, in getresponse response.begin() File "/usr/lib/python3.10/http/client.py", line 318, in begin version, status, reason = self._read_status() File "/usr/lib/python3.10/http/client.py", line 287, in _read_status raise RemoteDisconnected("Remote end closed connection without" http.client.RemoteDisconnected: Remote end closed connection without response During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pikachu/.local/lib/python3.10/site-packages/requests/adapters.py", line 486, in send resp = conn.urlopen( File "/home/pikachu/.local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 844, in urlopen retries = retries.increment( File "/home/pikachu/.local/lib/python3.10/site-packages/urllib3/util/retry.py", line 470, in increment raise reraise(type(error), error, _stacktrace) File "/home/pikachu/.local/lib/python3.10/site-packages/urllib3/util/util.py", line 38, in reraise raise value.with_traceback(tb) File "/home/pikachu/.local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 790, in urlopen response = self._make_request( File "/home/pikachu/.local/lib/python3.10/site-packages/urllib3/connectionpool.py", line 536, in _make_request response = conn.getresponse() File "/home/pikachu/.local/lib/python3.10/site-packages/urllib3/connection.py", line 461, in getresponse httplib_response = super().getresponse() File "/usr/lib/python3.10/http/client.py", line 1375, in getresponse response.begin() File "/usr/lib/python3.10/http/client.py", line 318, in begin version, status, reason = self._read_status() File "/usr/lib/python3.10/http/client.py", line 287, in _read_status raise RemoteDisconnected("Remote end closed connection without" urllib3.exceptions.ProtocolError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pikachu/.local/lib/python3.10/site-packages/langchain_community/embeddings/ollama.py", line 157, in _process_emb_response res = requests.post( File "/home/pikachu/.local/lib/python3.10/site-packages/requests/api.py", line 115, in post return request("post", url, data=data, json=json, **kwargs) File "/home/pikachu/.local/lib/python3.10/site-packages/requests/api.py", line 59, in request return session.request(method=method, url=url, **kwargs) File "/home/pikachu/.local/lib/python3.10/site-packages/requests/sessions.py", line 589, in request resp = self.send(prep, **send_kwargs) File "/home/pikachu/.local/lib/python3.10/site-packages/requests/sessions.py", line 703, in send r = adapter.send(request, **kwargs) File "/home/pikachu/.local/lib/python3.10/site-packages/requests/adapters.py", line 501, in send raise ConnectionError(err, request=request) requests.exceptions.ConnectionError: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response')) During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/pikachu/Desktop/LangChain/RetrievalChain.py", line 21, in <module> vector = Chroma.from_documents(documents, embeddings) File "/home/pikachu/.local/lib/python3.10/site-packages/langchain_community/vectorstores/chroma.py", line 778, in from_documents return cls.from_texts( File "/home/pikachu/.local/lib/python3.10/site-packages/langchain_community/vectorstores/chroma.py", line 736, in from_texts chroma_collection.add_texts( File "/home/pikachu/.local/lib/python3.10/site-packages/langchain_community/vectorstores/chroma.py", line 275, in add_texts embeddings = self._embedding_function.embed_documents(texts) File "/home/pikachu/.local/lib/python3.10/site-packages/langchain_community/embeddings/ollama.py", line 204, in embed_documents embeddings = self._embed(instruction_pairs) File "/home/pikachu/.local/lib/python3.10/site-packages/langchain_community/embeddings/ollama.py", line 192, in _embed return [self._process_emb_response(prompt) for prompt in iter_] File "/home/pikachu/.local/lib/python3.10/site-packages/langchain_community/embeddings/ollama.py", line 192, in <listcomp> return [self._process_emb_response(prompt) for prompt in iter_] File "/home/pikachu/.local/lib/python3.10/site-packages/langchain_community/embeddings/ollama.py", line 163, in _process_emb_response raise ValueError(f"Error raised by inference endpoint: {e}") ValueError: Error raised by inference endpoint: ('Connection aborted.', RemoteDisconnected('Remote end closed connection without response'))
报错原因分析
核心问题是LangChain无法连接到本地Ollama服务生成嵌入向量:
- 代码中使用
OllamaEmbeddings()但未指定模型,默认会调用Ollama的nomic-embed-text模型,但前提是Ollama服务已启动且该模型已下载。 - 报错链最终指向
requests.exceptions.ConnectionError,说明无法和Ollama的本地API端点(默认http://localhost:11434)建立连接,可能是服务未启动、模型缺失或端口配置错误。 - 注意到报错中实际执行的是
Chroma.from_documents,但代码里写的是FAISS.from_documents,两者都依赖OllamaEmbeddings生成嵌入,所以问题根源在嵌入模型的连接环节。
解决方案
- 启动Ollama服务
打开终端执行:
若需要后台运行,可使用:ollama servenohup ollama serve & - 下载嵌入模型
执行以下命令下载默认的嵌入模型:
或在代码中明确指定已下载的模型:ollama pull nomic-embed-textembeddings = OllamaEmbeddings(model="nomic-embed-text") - 验证Ollama连接
用curl测试服务是否正常:
返回已下载模型列表则说明服务正常。curl http://localhost:11434/api/tags - 检查端口配置
若修改过Ollama默认端口,需在初始化时指定:embeddings = OllamaEmbeddings(base_url="http://localhost:自定义端口") - 代码一致性检查
确保运行的代码和编写的代码一致,避免FAISS和Chroma调用混淆。
内容的提问来源于stack exchange,提问作者Jinheng Lin
相关产品推荐
相关产品推荐

