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

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服务生成嵌入向量:

  1. 代码中使用OllamaEmbeddings()但未指定模型,默认会调用Ollama的nomic-embed-text模型,但前提是Ollama服务已启动且该模型已下载。
  2. 报错链最终指向requests.exceptions.ConnectionError,说明无法和Ollama的本地API端点(默认http://localhost:11434)建立连接,可能是服务未启动、模型缺失或端口配置错误。
  3. 注意到报错中实际执行的是Chroma.from_documents,但代码里写的是FAISS.from_documents,两者都依赖OllamaEmbeddings生成嵌入,所以问题根源在嵌入模型的连接环节。
解决方案
  • 启动Ollama服务
    打开终端执行:
    ollama serve
    
    若需要后台运行,可使用:
    nohup ollama serve &
    
  • 下载嵌入模型
    执行以下命令下载默认的嵌入模型:
    ollama pull nomic-embed-text
    
    或在代码中明确指定已下载的模型:
    embeddings = 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 03:25:58