OpenAI 兼容服务器#
vLLM 提供一个 HTTP 服务器,该服务器实现了 OpenAI 的 Completions 和 Chat API。
你可以使用 Python 或 Docker 启动服务器:
vllm serve NousResearch/Meta-Llama-3-8B-Instruct --dtype auto --api-key token-abc123
要调用服务器,你可以使用官方 OpenAI Python 客户端库或任何其他 HTTP 客户端。
from openai import OpenAI
client = OpenAI(
base_url="http://localhost:8000/v1",
api_key="token-abc123",
)
completion = client.chat.completions.create(
model="NousResearch/Meta-Llama-3-8B-Instruct",
messages=[
{"role": "user", "content": "Hello!"}
]
)
print(completion.choices[0].message)
API 参考#
有关 API 的更多信息,请参阅 OpenAI API 参考。我们支持所有参数,除了:
聊天:
tools
和tool_choice
。完成:
suffix
。
vLLM 还提供对 OpenAI Vision API 兼容推理的实验性支持。有关更多详细信息,请参阅 使用 VLM。
额外参数#
vLLM 支持一组不属于 OpenAI API 的参数。为了使用它们,你可以将它们作为额外参数传递给 OpenAI 客户端。或者,如果你直接使用 HTTP 调用,则直接将它们合并到 JSON 负载中。
completion = client.chat.completions.create(
model="NousResearch/Meta-Llama-3-8B-Instruct",
messages=[
{"role": "user", "content": "Classify this sentiment: vLLM is wonderful!"}
],
extra_body={
"guided_choice": ["positive", "negative"]
}
)
聊天 API 的额外参数#
支持以下 采样参数(点击查看文档)。
支持以下额外参数:
完成 API 的额外参数#
支持以下 采样参数(点击查看文档)。
支持以下额外参数:
聊天模板#
为了使语言模型支持聊天协议,vLLM 要求模型在其分词器配置中包含一个聊天模板。聊天模板是一个 Jinja2 模板,它指定了角色、消息和其他聊天特定令牌如何在输入中编码。
NousResearch/Meta-Llama-3-8B-Instruct
的示例聊天模板可以在 此处 找到。
有些模型即使经过指令/聊天微调,也不提供聊天模板。对于这些模型,你可以在 --chat-template
参数中手动指定它们的聊天模板,并提供聊天模板的文件路径或模板的字符串形式。如果没有聊天模板,服务器将无法处理聊天,所有聊天请求都会出错。
vllm serve <model> --chat-template ./path-to-chat-template.jinja
vLLM 社区为流行模型提供了一组聊天模板。你可以在示例目录 此处 找到它们。
服务器的命令行参数#
聊天完成 API 中的工具调用#
命名函数调用#
默认情况下,vLLM 仅在聊天完成 API 中支持命名函数调用。它使用 Outlines 来实现这一点,因此默认情况下已启用,并且可以与任何支持的模型一起使用。你将获得一个可解析的函数调用,但并非高质量的函数调用。
要使用命名函数,你需要在聊天完成请求的 tools
参数中定义函数,并在聊天完成请求的 tool_choice
参数中指定其中一个工具的 name
。
配置文件#
serve
模块还可以从 yaml
格式的配置文件中接受参数。yaml 中的参数必须使用此处概述的 参数长格式 指定:
例如:
# config.yaml
host: "127.0.0.1"
port: 6379
uvicorn-log-level: "info"
$ vllm serve SOME_MODEL --config config.yaml
注意 如果使用命令行和配置文件提供参数,则命令行中的值将优先。优先级顺序为 命令行 > 配置文件值 > 默认值
。
聊天完成 API 中的工具调用#
vLLM 仅在聊天完成 API 中支持命名函数调用。tool_choice
选项 auto
和 required
尚未支持,但已列入路线图。
调用者有责任向模型提供工具信息,vLLM 不会自动操作提示。
vLLM 将使用引导解码来确保响应与 tools
参数中 JSON 模式定义的工具参数对象匹配。
自动函数调用#
要启用此功能,你应该设置以下标志:
--enable-auto-tool-choice
– 必选 自动工具选择。告诉 vLLM 你希望启用模型在认为合适时生成自己的工具调用。--tool-call-parser
– 选择要使用的工具解析器 - 目前为hermes
或mistral
。将来会继续添加其他工具解析器。--chat-template
– 可选 用于自动工具选择。处理包含先前生成的工具调用的tool
角色消息和assistant
角色消息的聊天模板路径。Hermes 和 Mistral 模型在其tokenizer_config.json
文件中具有与工具兼容的聊天模板,但你可以指定自定义模板。如果你的模型在tokenizer_config.json
中配置了特定于工具使用的聊天模板,则可以将此参数设置为tool_use
。在这种情况下,它将根据transformers
规范使用。更多信息请参见 此处 来自 HuggingFace;你可以在tokenizer_config.json
中找到一个示例 此处
如果你的最喜欢的工具调用模型不受支持,请随时贡献解析器和工具使用聊天模板!
Hermes 模型#
所有 Nous Research Hermes 系列模型,比 Hermes 2 Pro 更新的模型都应该受支持。
NousResearch/Hermes-2-Pro-*
NousResearch/Hermes-2-Theta-*
NousResearch/Hermes-3-*
请注意,由于在创建过程中合并步骤,Hermes 2 Theta 模型的工具调用质量和功能已知会下降。
标志:--tool-call-parser hermes
Mistral 模型#
支持的模型:
mistralai/Mistral-7B-Instruct-v0.3
(已确认)其他 Mistral 函数调用模型也兼容。
已知问题:
Mistral 7B 难以正确生成并行工具调用。
Mistral 的
tokenizer_config.json
聊天模板要求工具调用 ID 恰好为 9 位数字,这远小于 vLLM 生成的数字。由于在不满足此条件时会抛出异常,因此提供了以下附加聊天模板:
examples/tool_chat_template_mistral.jinja
- 这是 “官方” Mistral 聊天模板,但经过调整,使其适用于 vLLM 的工具调用 ID(前提是tool_call_id
字段被截断为最后 9 位数字)examples/tool_chat_template_mistral_parallel.jinja
- 这是一个 “更好” 的版本,它在提供工具时添加了一个工具使用系统提示,这在使用并行工具调用时可以显著提高可靠性。
推荐标志:--tool-call-parser mistral --chat-template examples/tool_chat_template_mistral_parallel.jinja