uva213 - Message Decoding

博客围绕uva213的消息解码展开,但具体内容缺失,推测是关于信息技术领域中消息解码相关的问题探讨。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>
#include <string.h>
int readchar();
int readint(int c);

int code[8][1<<8];
int readcodes();

int main()
{
    while(readcodes())
    {
        for(;;)
        {
            int len = readint(3);
            if(len == 0) break;
            for(;;)
            {
                int v = readint(len);
                if(v == (1 << len)-1) break;
                putchar(code[len][v]);
            }
        }
        putchar('\n');
    }
    return 0;
}

int readchar()
{
    for(;;)
    {
        int ch = getchar();
        if(ch != '\n'&&ch != '\r') return ch;
    }
}

int readint(int c)
{
    int v = 0;
    while(c--)
        v = v*2+readchar()-'0';
    return v;
}

int readcodes()
{
    memset(code, 0, sizeof(code));
    code[1][0] = readchar();
    for(int len = 2; len <= 7; len++)
    {
        for(int i = 0; i < (1<<len)-1; i++)
        {
            int ch = getchar();
            if(ch == EOF) return 0;
            if(ch == '\n'||ch == '\r') return 1;
            code[len][i] = ch;
        }
    }
    return 1;
}

 

<think>我们正在讨论vLLM的启动参数`--guided-decoding-backend`,以及它与JSON Schema扩展支持的关系。根据引用[1],`guided-decoding-backend`参数需要与`guided_***`参数联合使用,这些`guided_***`参数包括`guided_json`、`guided_regex`、`guided_choice`和`guided_grammar`。 首先,我们需要明确`--guided-decoding-backend`参数的功能。这个参数用于指定在生成文本时使用哪种引导解码后端。引导解码(Guided Decoding)是一种在文本生成过程中施加约束的技术,以确保生成的文本符合特定的模式或结构。在vLLM中,这个参数允许我们选择不同的引导方式,包括使用JSON Schema、正则表达式、选择列表或自定义语法(如GBNF)等。 ### 1. `--guided-decoding-backend`参数的功能 `--guided-decoding-backend`参数用于指定引导解码的后端实现。目前,vLLM支持以下四种引导方式: - `guided_json`:用于生成符合指定JSON Schema的JSON对象。 - `guided_regex`:用于生成匹配指定正则表达式的文本。 - `guided_choice`:用于生成从给定选项列表中选择的文本。 - `guided_grammar`:用于生成符合指定语法(如GBNF)的文本。 这个参数在启动vLLM服务时设置,例如: ```bash python -m vllm.entrypoints.openai.api_server \ --model your_model_path \ --guided-decoding-backend guided_json ``` ### 2. 在JSON Schema扩展支持中的作用 如果我们希望模型生成符合特定JSON Schema的结构化输出,我们可以使用`guided_json`作为引导解码后端。这样,在生成过程中,模型会确保输出的文本是一个有效的JSON字符串,并且符合提供的JSON Schema。 具体使用方法如下: - 在启动vLLM服务时,设置`--guided-decoding-backend guided_json`。 - 在生成文本的请求中,通过`SamplingParams`传递`guided_json`参数,该参数的值是一个JSON Schema对象。 例如,在Python代码中: ```python from vllm import SamplingParams # 定义JSON Schema schema = { "type": "object", "properties": { "name": {"type": "string"}, "age": {"type": "number"}, "email": {"type": "string", "format": "email"} }, "required": ["name", "age"] } sampling_params = SamplingParams( temperature=0.0, max_tokens=100, guided_json=schema # 传入JSON Schema ) # 然后使用这个sampling_params进行生成 ``` 这样,模型在生成文本时就会受到JSON Schema的约束,输出符合该模式的有效JSON。 ### 3. 其他引导方式的使用 除了`guided_json`,我们还可以使用其他引导方式: - **`guided_regex`**:传入一个正则表达式,生成匹配该正则表达式的文本。 ```python sampling_params = SamplingParams( guided_regex=r'\d{4}-\d{2}-\d{2}' # 生成一个日期字符串,如"2023-01-01" ) ``` - **`guided_choice`**:传入一个选项列表,生成的内容必须是列表中的某一个选项。 ```python sampling_params = SamplingParams( guided_choice=["apple", "banana", "orange"] ) ``` - **`guided_grammar`**:传入一个GBNF语法字符串,生成符合该语法的文本。 ```python grammar = r''' root ::= ( "a" | "b" )+ ''' sampling_params = SamplingParams( guided_grammar=grammar ) ``` ### 4. 注意事项 - 在使用引导解码时,通常需要设置`temperature=0`(即贪婪解码)以确保生成的确定性,因为引导解码依赖于每一步的约束。 - 目前,vLLM的引导解码功能可能还在开发中,某些功能可能尚未完全稳定,建议查看最新文档。 ### 5. 总结 `--guided-decoding-backend`启动参数指定了使用哪种引导解码后端,而具体的约束规则则通过`SamplingParams`中的对应参数(如`guided_json`)传入。这样,我们可以灵活地控制模型输出的结构,包括生成符合JSON Schema的JSON对象、匹配正则表达式的文本、从选项中选择的文本或符合自定义语法的文本。 --- §§相关问题§§ 1. 如何在 vLLM 中使用 `guided_regex` 参数生成符合特定模式的文本? 2. 使用 `guided_json` 时,如何处理复杂的嵌套 JSON Schema? 3. 在 vLLM 中,引导解码(Guided Decoding)对生成速度有何影响? 4. 如何将 GBNF 语法与 `guided_grammar` 结合使用以实现更复杂的结构化输出?</think>### vLLM 启动参数 `--guided-decoding-backend` 的功能与使用方法 #### 核心功能 `--guided-decoding-backend` 是 vLLM 中实现**结构化文本生成**的关键参数,它通过指定引导解码后端来约束模型输出格式。该参数需要与以下四种引导参数联合使用: 1. **`guided_json`**:强制生成符合 JSON Schema 的 JSON 对象 2. **`guided_regex`**:强制匹配正则表达式模式 3. **`guided_choice`**:限制输出为预定义选项 4. **`guided_grammar`**:遵循 GBNF 语法规则 > **数学表达**:在解码过程中,引导机制通过约束概率分布实现结构化输出: > $$ P_{\text{guided}}(w_t | w_{<t}) = \begin{cases} > P(w_t | w_{<t}) & \text{if } w_t \in \mathcal{V}_{\text{valid}} \\ > 0 & \text{otherwise} > \end{cases} $$ > 其中 $\mathcal{V}_{\text{valid}}$ 是当前有效 token 集合[^1]。 #### 在 JSON Schema 支持中的作用 当使用 `guided_json` 模式时: ```python from vllm import SamplingParams # 定义 JSON Schema schema = { "type": "object", "properties": { "name": {"type": "string"}, "age": {"type": "integer"} } } sampling_params = SamplingParams( guided_json=schema, # 应用 JSON Schema 约束 temperature=0.0, max_tokens=100 ) ``` 启动服务时需指定后端: ```bash python -m vllm.entrypoints.openai.api_server \ --model your_model \ --guided-decoding-backend guided_json ``` 此时模型输出将严格遵循: 1. 生成有效的 JSON 语法结构 2. 字段类型匹配 Schema 定义 3. 自动拒绝无效 token #### 使用流程 1. **启动服务**: ```bash # 选择引导类型:guided_json/guided_grammar 等 vllm-server --model mistralai/Mistral-7B \ --guided-decoding-backend guided_json ``` 2. **客户端请求**: ```python import openai client = openai.Client(api_key="EMPTY", base_url="http://localhost:8000/v1") response = client.completions.create( model="mistralai/Mistral-7B", prompt="生成用户信息:", guided_json=schema, # 传入 Schema max_tokens=50 ) print(response.choices[0].text) # 输出示例:{"name": "张三", "age": 28} ``` #### 性能特点 | 引导类型 | 适用场景 | 处理开销 | |---------|---------|---------| | `guided_json` | API 数据交互 | 中等 | | `guided_grammar` | 自定义格式 | 较低 | | `guided_regex` | 文本模式匹配 | 较高 | | `guided_choice` | 分类任务 | 最低 | > **注意**:启用引导解码会轻微增加推理延迟(约 10-15%),但能保证 100% 的结构合规性[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值