anything-llm [FEAT]:将Vllm集成为模型服务器

qyyhg6bp  于 5个月前  发布在  其他
关注(0)|答案(9)|浏览(138)

你想看到什么?

如果能用一个Vllm模型配置AnythingLLM会很好。

inn6fuwd

inn6fuwd1#

我能够使用vllm在任何LLM LLM设置中选择本地AI。
享受吧。

pinkon5k

pinkon5k2#

感谢您的建议。我已经测试过了,但是失败了。我确认vllm示例运行正常,自1714112327以来创建。拥有者为vllm,根目录为mistralai/Mixtral-8x7B-Instruct-v0.1,父级为null,权限包括允许创建引擎、采样、记录概率、搜索索引、查看和微调等操作。组织为任意,组为空,不阻塞。

我已经在配置中放入了LocalAI和http://vllm-mistral:5002/v1。任何能够检索模型的人都可以使用它。但是当我尝试进行聊天时,我遇到了一个错误:无法响应消息。请求以状态码400失败。查看Anythingllm的日志,我得到了以下跟踪信息:

_events: [Object: null prototype], 349 _eventsCount: 1, 350 _maxListeners: undefined, 351 socket: [Socket], 352 httpVersionMajor: 1, 353 httpVersionMinor: 1, 354 httpVersion: '1.1', 355 complete: true, 356 rawHeaders: [Array], 357 rawTrailers: [], 358 joinDuplicateHeaders: undefined, 359 aborted: false, 360 upgrade: false, 361 url: '', 362 method: null, 363 statusCode: 400, 364 statusMessage: 'Bad Request', 365 client: [Socket], 366 _consuming: false, 367 _dumped: false, 368 req: [ClientRequest], 369 responseUrl: 'http://vllm-mixtral:5002/v1/chat/completions', 370 redirects: [], 371 [Symbol(kCapture)]: false, 372 [Symbol(kHeaders)]: [Object], 373 [Symbol(kHeadersCount)]: 10, 374 [Symbol(kTrailers)]: null, 375 [Symbol(kTrailersCount)]: 0

请帮助我解决这个问题。非常感谢。

Francois,来自法国

vh0rcniy

vh0rcniy3#

如果它能帮助您进行分析:
它似乎要求
https://vllm-mixtral.myserver.fr/v1/chat/completions
但是当我访问这个网址时,我得到了:
{"detail":"Method Not Allowed"}
这是vllm和anythingllm之间的API问题吗?

sg3maiej

sg3maiej4#

该端点仅支持POST方法,不支持GET方法,这也是您直接访问URL时出现"method not allowed"的原因之一。

u0sqgete

u0sqgete5#

我也有同样的问题,无论是本地AI还是通用OpenAI的集成。
vlm服务器回复如下:
ERROR serving_chat.py:60] Error in applying chat template from request: Conversation roles must alternate user/assistant/user/assistant/...INFO:"POST /v1/chat/completions HTTP/1.1" 400 Bad Request

7ivaypg9

7ivaypg96#

亲爱的大家,
我再次测试了一下,即使我已经通过Docker配置暴露了端口,仍然无法直接使用vllm。
你能分享一下你是怎么做的吗?
再次感谢

翻译结果:亲爱的大家,
我已经再次进行了测试,但是即使我已经通过Docker配置暴露了端口,仍然无法直接使用vllm。
请问你们是如何做到这一点的呢?
非常感谢!

ycggw6v2

ycggw6v27#

@flefevre,我再次尝试了两次,它确实可以工作。这可能是容器连接问题吗?我记得我使用curl来检查容器之间的连接。你能告诉我你的容器、主机和进程是如何对齐的吗?
对我来说,最简单的方法是在一个docker-compose.yml配置文件下启动vllm和AnythingLLM作为兄弟容器,并通过容器名称将AnythingLLM指向vllm。
另一种方法是在宿主机上运行vllm,然后通过docker启动AnythingLLM,并通过host.docker.internal指向vllm,但这是Docker Desktop的专有功能。

qacovj5a

qacovj5a8#

这两个似乎是两个不同的问题,一个与连接性有关,另一个与格式有关。

与请求格式相关的问题是,anything-llm可以访问vllm,但vllm会抛出一个“400 Bad request”错误。

ERROR serving_chat.py:60] Error in applying chat template from request: Conversation roles must alternate user/assistant/user/assistant/...`

关于原因的一些提示,请参阅vllm讨论Mixtral instruct doesn't accept system prompt

在anything-llm方面有修改模板的方法吗?

mlnl4t2r

mlnl4t2r9#

亲爱的大家,
通常情况下,我已经简化了测试。

Docker配置

  • 使用相同的网络与docker compose进行通信
  • 使用相同的网络与docker compose进行通信
    Docker验证

当我连接到anythingllm容器时,我能够通过命令:
anythingllm@6de6c5255f33:~$ curl http://vllm-mixtral:5002/v1/completions -H "Content-Type: application/json" -d '{"model": "mistralai/Mixtral-8x7B-Instruct-v0.1", "prompt": "San Francisco is a", "max_tokens": 7,"temperature": 0}' {"id":"cmpl-0df1e0e95b4c46a78632936ba277e3ef","object":"text_completion","created":1714551853,"model":"mistralai/Mixtral-8x7B-Instruct-v0.1","choices":[{"index":0,"text":" city that is known for its steep","logprobs":null,"finish_reason":"length","stop_reason":null}],"usage":{"prompt_tokens":5,"total_tokens":12,"completion_tokens":7}}anythingllm@6de6c5255f33:~$
检索vllm的模型。

Anythingllm Webui配置

我可以通过设置以下内容来配置默认LLM偏好:

  • 本地AI
  • http://vllm-mixtral:5002 >> 它可以看到模型并建议给我mixtral-8x7B-Instruct-v0.1
    Anythingllm Webui测试

当我创建一个工作区,打开一个新线程,并询问一些问题时,我每次都得到一个
Could not respond to message. Request failed with status code 400
当我查看Anythingllm日志时,我有以下跟踪信息:
httpVersionMajor: 1, httpVersionMinor: 1, httpVersion: '1.1', complete: true, rawHeaders: [Array], rawTrailers: [], joinDuplicateHeaders: undefined, aborted: false, upgrade: false, url: '', method: null, statusCode: 400, statusMessage: 'Bad Request', client: [Socket], _consuming: false, _dumped: false, req: [ClientRequest], responseUrl: 'http://vllm-mixtral:5002/v1/chat/completions', redirects: [], [Symbol(kCapture)]: false, [Symbol(kHeaders)]: [Object], [Symbol(kHeadersCount)]: 10, [Symbol(kTrailers)]: null, [Symbol(kTrailersCount)]: 0 } }, isAxiosError: true, toJSON: [Function: toJSON]

分析

我同意@alceausu的观点,问题似乎不是由于docker/vllm/anythingllm的配置错误。
它似乎更与特定模型的使用中的anythingllm和vllm之间的配置错误有关,就我的情况而言是mixtral8x7b。
一个解决方案可能是能够理解每个vllm/模型系统提示的具体性,正如@alceausu所提议的vllm-project/vllm#2112
或者也许可以使用类似于Litellm的模型代理,它将基于启发于openai的统一API封装模型交互。
我在此处创建了以下功能提案#1154 ,我认为这是一个好解决方案。
你同意吗?
如果是的话,我的票据可能已经无效了,因为Anythingllm与vllm兼容,但与由vllm提供的全部模型不兼容。
Mixtral8x7b确实是一个很好的模型。通过像Litellm这样的代理访问它将是完美的,确保Anythingllm的开发人员不必为每个模型调整他们的后端解决方案。
感谢您的专业知识。

相关问题