qq_44162297 2024-05-01 20:56 采纳率: 50%
浏览 372

Ollama调用Embedding models实现RAG应用代码报错

运行ollama的Embedding models报错,但不知道原因

import ollama
import chromadb

documents = [
  "Llamas are members of the camelid family meaning they're pretty closely related to vicuñas and camels",
  "Llamas were first domesticated and used as pack animals 4,000 to 5,000 years ago in the Peruvian highlands",
  "Llamas can grow as much as 6 feet tall though the average llama between 5 feet 6 inches and 5 feet 9 inches tall",
  "Llamas weigh between 280 and 450 pounds and can carry 25 to 30 percent of their body weight",
  "Llamas are vegetarians and have very efficient digestive systems",
  "Llamas live to be about 20 years old, though some only live for 15 years and others live to be 30 years old",
]

client = chromadb.Client()
collection = client.create_collection(name="docs")

# store each document in a vector embedding database
for i, d in enumerate(documents):
  response = ollama.embeddings(model="mxbai-embed-large", prompt=d)
  embedding = response["embedding"]
  collection.add(
    ids=[str(i)],
    embeddings=[embedding],
    documents=[d]
  )

  # an example prompt
  prompt = "What animals are llamas related to?"

  # generate an embedding for the prompt and retrieve the most relevant doc
  response = ollama.embeddings(
    prompt=prompt,
    model="mxbai-embed-large"
  )
  results = collection.query(
    query_embeddings=[response["embedding"]],
    n_results=1
  )
  data = results['documents'][0][0]

  # generate a response combining the prompt and data we retrieved in step 2
  output = ollama.generate(
    model="llama2",
    prompt=f"Using this data: {data}. Respond to this prompt: {prompt}"
  )

  print(output['response'])


python3.11 /Users/admin/project/py/rag/ollama/ola1.py 
Traceback (most recent call last):
  File "/Users/admin/project/py/rag/ollama/ola1.py", line 18, in <module>
    response = ollama.embeddings(model="mxbai-embed-large", prompt=d)
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/Users/admin/anaconda3/lib/python3.11/site-packages/ollama/_client.py", line 198, in embeddings
    return self._request(
           ^^^^^^^^^^^^^^
  File "/Users/admin/anaconda3/lib/python3.11/site-packages/ollama/_client.py", line 73, in _request
    raise ResponseError(e.response.text, e.response.status_code) from None
ollama._types.ResponseError

Process finished with exit code 1

  • 写回答

7条回答 默认 最新

  • 专家-皆知 2024-05-01 20:56
    关注

    参考免费微信小程序:皆我百晓生 作答,经由专家-皆知整理回复,如问题解决,望采纳;如仍有疑问,请评论回复。

    看起来你在尝试使用 Ollama 库与 ChromaDB 结合,创建一个基于嵌入向量的文档检索系统。从错误信息来看,ollama._types.ResponseError 表示在发送请求时遇到了问题,具体是服务器返回了非 200 状态码的响应。

    首先,我们需要确保你已经正确安装了 ollamachromadb 包,并且它们的版本兼容。请检查你的 Python 环境是否正确设置,可以尝试更新这两个包到最新版本:

    pip install --upgrade ollama chromadb
    

    接下来,让我们检查一下可能的问题:

    1. 确保你已连接到互联网,因为 Ollama 需要通过网络访问模型服务。
    2. 检查你的 OLLAMA_API_KEY 环境变量是否设置正确。这个环境变量用于提供 Ollama API 的访问密钥。如果没有设置,你需要去 Ollama官网 注册并获取 API 密钥,然后设置环境变量:
      export OLLAMA_API_KEY=<your_api_key>
      

    如果你已经设置了正确的 API 密钥并且网络连接正常,那么可能是 Ollama 的模型服务暂时不可用,或者你使用的模型名称(例如 "mxbai-embed-large")不正确。你可以尝试使用其他可用的模型名称,或者稍后再试。

    这里是一个修改后的代码片段,包含了对 API 密钥的检查以及使用默认的模型名作为备选方案:

    import os
    import ollama
    import chromadb
    
    # Check if OLLAMA_API_KEY is set
    if 'OLLAMA_API_KEY' not in os.environ:
        raise ValueError("Please set the environment variable 'OLLAMA_API_KEY' with your Ollama API key.")
    
    api_key = os.environ['OLLAMA_API_KEY']
    
    documents = [
        # ... (Your document list remains unchanged)
    ]
    
    client = chromadb.Client()
    collection = client.create_collection(name="docs")
    
    # store each document in a vector embedding database
    for i, d in enumerate(documents):
        try:
            # Use default model if mxbai-embed-large fails
            model_name = "mxbai-embed-large"
            if model_name not in ollama.available_models():
                model_name = ollama.default_model_name()
    
            response = ollama.embeddings(api_key=api_key, model=model_name, prompt=d)
            embedding = response["embedding"]
            collection.add(
                ids=[str(i)],
                embeddings=[embedding],
                documents=[d]
            )
        except ollama.RequestError as e:
            print(f"Failed to embed document {i} due to error: {e}")
            continue
    
        # ... (The rest of the code remains unchanged)
    

    在这个修改过的代码中,我们首先检查了 OLLAMA_API_KEY 是否已经设置,然后在尝试使用特定模型之前,先检查它是否存在于可用模型列表中。如果不存在,就使用默认模型。这样可以避免因模型名错误导致的问题。同时,添加了一个异常处理块,当遇到请求错误时,会捕获并打印错误信息,而不是让整个程序崩溃。

    按照上述步骤操作后,如果问题仍然存在,请检查你的网络连接和 API 密钥,或者联系 Ollama 官方支持寻求进一步的帮助。

    评论 编辑记录

报告相同问题?

问题事件

  • 修改了问题 5月1日
  • 创建了问题 5月1日

悬赏问题

  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败
  • ¥15 用Ros中的Topic通讯方式控制小乌龟的速度,走矩形;编写订阅器代码
  • ¥15 LLM accuracy检测
  • ¥15 pycharm添加远程解释器报错
  • ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口
  • ¥15 如何能达到用ping0.cc检测成这样?如图