Python+Ollama开发报错:nomic-embed-text模型未找到解决指引
问题背景
在M2 Mac上使用Python 3.11.7(通过venv管理依赖)开发加载HTML并基于上下文查询的RAG系统,测试Ollama时出现模型未找到错误。
核心代码
from langchain_community.llms import Ollama from langchain_community.document_loaders import WebBaseLoader from langchain_community.document_loaders import PyPDFLoader from langchain_community.vectorstores import Chroma from langchain_community import embeddings from langchain_community.chat_models import ChatOllama from langchain_core.runnables import RunnablePassthrough from langchain_core.output_parsers import StrOutputParser from langchain_core.prompts import ChatPromptTemplate from langchain.output_parsers import PydanticOutputParser from langchain.text_splitter import CharacterTextSplitter model_local = Ollama(base_url="http://192.168.0.200:11434", model="mistral") # 1. Split data into chunks urls = [ "https://es.wikipedia.org/wiki/The_A-Team", ] docs = [WebBaseLoader(url).load() for url in urls] docs_list = [item for sublist in docs for item in sublist] text_splitter = CharacterTextSplitter.from_tiktoken_encoder(chunk_size=7500, chunk_overlap=100) doc_splits = text_splitter.split_documents(docs_list) # 2. Convert documents to Embeddings and store them vectorstore = Chroma.from_documents( documents=doc_splits, collection_name="rag-chroma", embedding=embeddings.ollama.OllamaEmbeddings(model='nomic-embed-text'), ) retriever = vectorstore.as_retriever() # 3. Before RAG print("Before RAG\n") before_rag_template = "What is {topic}" before_rag_prompt = ChatPromptTemplate.from_template(before_rag_template) before_rag_chain = before_rag_prompt | model_local | StrOutputParser() print(before_rag_chain.invoke({"topic": "Ollama"})) # 4. After RAG print("\n########\nAfter RAG\n") after_rag_template = """Answer the question based only on the following context: {context} Question: {question} """ after_rag_prompt = ChatPromptTemplate.from_template(after_rag_template) after_rag_chain = ( {"context": retriever, "question": RunnablePassthrough()} | after_rag_prompt | model_local | StrOutputParser() ) print(after_rag_chain.invoke("Quien integra Brigada A?"))
报错信息
cd /Users/santiago/Proyects/OllamaURL ; /usr/bin/env /Users/santiago/Proyects/OllamaURL/env/bin/python /Users/santiago/.vscode/extensions/ms-python.debugpy-2024.2.0-darwin-arm64/bundled/libs/debugpy/adapter/../../debugpy/launcher 54637 -- /Users/santiago/Proyects/OllamaURL/rag.py Traceback (most recent call last): File "/Users/santiago/Proyects/OllamaURL/rag.py", line 25, in <module> vectorstore = Chroma.from_documents( ^^^^^^^^^^^^^^^^^^^^^^ File "/Users/santiago/Proyects/OllamaURL/env/lib/python3.11/site-packages/langchain_community/vectorstores/chroma.py", line 778, in from_documents return cls.from_texts( ^^^^^^^^^^^^^^^ File "/Users/santiago/Proyects/OllamaURL/env/lib/python3.11/site-packages/langchain_community/vectorstores/chroma.py", line 736, in from_texts chroma_collection.add_texts( File "/Users/santiago/Proyects/OllamaURL/env/lib/python3.11/site-packages/langchain_community/vectorstores/chroma.py", line 275, in add_texts embeddings = self._embedding_function.embed_documents(texts) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/santiago/Proyects/OllamaURL/env/lib/python3.11/site-packages/langchain_community/embeddings/ollama.py", line 204, in embed_documents embeddings = self._embed(instruction_pairs) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/santiago/Proyects/OllamaURL/env/lib/python3.11/site-packages/langchain_community/embeddings/ollama.py", line 192, in _embed return [self._process_emb_response(prompt) for prompt in iter_] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/santiago/Proyects/OllamaURL/env/lib/python3.11/site-packages/langchain_community/embeddings/ollama.py", line 192, in <listcomp> return [self._process_emb_response(prompt) for prompt in iter_] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "/Users/santiago/Proyects/OllamaURL/env/lib/python3.11/site-packages/langchain_community/embeddings/ollama.py", line 166, in _process_emb_response raise ValueError( ValueError: Error raised by inference API HTTP code: 404, {"error":"model 'nomic-embed-text' not found, try pulling it first"}
解决步骤
拉取缺失的嵌入模型:代码中使用的
nomic-embed-text模型未在Ollama服务中加载。如果Ollama运行在远程机器(192.168.0.200),需在该机器执行命令:ollama pull nomic-embed-text若Ollama在本地Mac运行,直接在本地终端执行上述命令。
为嵌入模型指定远程地址:代码中LLM模型指定了
base_url,但嵌入模型默认访问本地localhost:11434,需同步配置远程地址:embedding=embeddings.ollama.OllamaEmbeddings( model='nomic-embed-text', base_url="http://192.168.0.200:11434" )验证模型可用性:执行curl命令测试模型是否可正常调用:
curl http://192.168.0.200:11434/api/embeddings -d '{ "model": "nomic-embed-text", "prompt": "test" }'返回正常嵌入向量则说明配置正确。
确认模型已加载:在Ollama服务所在机器执行
ollama list,确认nomic-embed-text出现在模型列表中。
内容的提问来源于stack exchange,提问作者safernandez666
相关产品推荐
相关产品推荐

