本篇博客主要演示如何使用vLLM中的guided_decoding_backend参数进行结构化输出的设置。
以下是vLLM库中的官方定义,也就是说参数guided_decoding_backend仅可以被赋值为outlines或者lm-format-enforcer。注意:为str格式
guided_decoding_backend: Optional[str] = Field( default=None, description=( "If specified, will override the default guided decoding backend " "of the server for this specific request. If set, must be either " "'outlines' / 'lm-format-enforcer'"))
使用OpenAI兼容的API服务
首先借助vLLM,构建一个与OpenAI API兼容的API服务。部署的方法在网上有很多了,想实践的同学可以去看看其他的博文。本篇博客主要讲解如何在使用API服务时,通过参数设定,使模型可以进行结构化输出。
guided_decoding_backend参数需要与guided_***参数进行联合使用,其中guided_***可以选择如下图中的四种:guided_json,guided_regex,guided_choice,guided_grammar。
以下是使用python调用OpenAI以实现结构化输出的源代码文件:
from openai import OpenAI
openai_api_key = "sk-***"
openai_api_base = "http://localhost:8000/v1"
client = OpenAI(
api_key=openai_api_key,
base_url=openai_api_base,
)
completion = client.chat.completions.create(
model="Qwen2-1.5B-Instruct",
messages = [
{"role": "system", "content": "你是一个专业助手"},
{"role": "user", "content": "判断用户输入的是什么东西,如果属于水果则输出1,如果属于饮料则输出2,如果输入的东西属于电脑配件则输出3。 用户的输入为:键盘"}
],
extra_body={
"guided_choice": ["1","2","3"], # guided_***参数四选一
"guided_decoding_backend": "outlines" # 也可以设置为lm-format-enforcer
}
)
以下是在使用postman发送POST请求时的body:
{
"model": "Qwen2-1.5B-Instruct",
"stream": false,
"messages": [
{
"content": "判断用户输入的是什么东西,如果属于水果则输出1,如果属于饮料则输出2,如果属于电脑配件则输出3。 用户的输入为:键盘",
"role": "user"
}
],
"guided_choice":["1", "2","3"],
"guided_decoding_backend": "outlines"
}