one-api ollama的嵌入模型调用错误

wnavrhmk  于 2个月前  发布在  其他
关注(0)|答案(6)|浏览(38)

例行检查

  • 我已确认目前没有类似 issue

  • 我已确认我已升级到最新版本

  • 我已完整查看过项目 README,尤其是常见问题部分

  • 我理解并愿意跟进此 issue,协助测试和提供反馈

  • 我理解并认可上述内容,并理解项目维护者精力有限,不遵循规则的 issue 可能会被无视或直接关闭

问题描述

docker部署的。设置如下图,当填入聊天模式的时候,测试没有问题。但填入嵌入模式的时候,有400错误。是ollama那边设置的问题吗?

复现步骤

  1. 打开项目页面

  2. 选择聊天模式

  3. 选择嵌入模式

预期结果

嵌入模式正常工作,没有400错误

相关截图

8cdiaqws

8cdiaqws1#

目前测试仅支持测试聊天模型。

u59ebvdq

u59ebvdq2#

这个之后优化吧,issue 先留着

u7up0aaq

u7up0aaq3#

同样需要使用Ollama的embedding模型nomic。因为使用的是Mac,当使用m3e时只能使用CPU,速度太慢了,希望能用Ollama的nomic模型作为embedding。

1szpjjfi

1szpjjfi4#

同样需要使用Ollama的embedding模型nomic。因为使用的是Mac,使用m3e时只能使用CPU,速度太慢了,希望能用Ollama的nomic模型作为embedding。
这个接口不应该是一样的吗?

w8f9ii69

w8f9ii695#

同样连接拒绝,使用ollama,希望尽快支持~

iovurdzv

iovurdzv6#

ollama 文档 写了后续会把 embedding 也 OpenAI 化,OneAPI 完全没必要重复造轮子。

如果实在急着用,自己手写个 flask。参考个人写过的一段代码,如果懒得改,连同 Ollama 当前的调用方式丢给 GPT 转一下:

from flask import Flask, request, jsonify
from sentence_transformers import SentenceTransformer
app = Flask(__name__)
# 加载模型
model_path = '/sshfs/pretrains/moka-ai/m3e-large'
model = SentenceTransformer(model_path)

@app.route('/v1/embeddings', methods=['POST'])
def get_embeddings():
    data = request.get_json()
    if not all((data, 'input' in data, 'model' in data)):
        return jsonify({"error": "Missing required fields in request body"}), 400
    input_text = data['input']
    # 将单个输入转换为列表
    if isinstance(input_text, str):
        input_text = [input_text]
    # 调用模型获取 embeddings
    embeddings = model.encode(input_text)
    # 构造响应
    embeddings_response = []
    for index, embedding in enumerate(embeddings):
        embedding_dict = {
            "object": "embedding",
            "embedding": embedding.tolist(),  # 将 numpy 数组转换为列表
            "index": index
        }
        embeddings_response.append(embedding_dict)
    # 可选: Token 计数
    response = {
        "object": "list",
        "data": embeddings_response,
        "model": data['model'],
        "usage": {
            "prompt_tokens": sum(len(text.split()) for text in input_text), 
            "total_tokens": sum(len(text.split()) for text in input_text)
        }
    }
    return jsonify(response)

if __name__ == '__main__':
    app.run(debug=True, port=5000, host='0.0.0.0')

相关问题