概述
它将概率文本生成器转变为机器可解析输出的可靠生成器。
深入探讨
语言模型通常会从其完整词汇中采样下一个标记,因此没有什么可以阻止它产生会破坏 JSON 解析的杂散逗号或不平衡括号。约束解码通过在生成的同时维护语法或状态机来解决这个问题。在每一步中,系统都会根据迄今为止生成的内容计算哪些代币是合法的,然后在采样之前屏蔽(设置为负无穷大)每个非法代币的概率。对于 JSON,这意味着在左大括号之后只允许使用引号或右大括号;键后只有一个冒号。常见的实现将上下文无关语法(如 llama.cpp 中的 GBNF)、JSON 模式或正则表达式编译为这些标记级掩码,通过构造而不是希望来保证输出在结构上有效。
现实世界的实施
强制 LLM 发出与预定义模式完全匹配的 JSON,以便下游代码可以在没有 try/ except 保护的情况下解析它。
将分类模型的答案限制为固定标签集之一,例如“正面”、“负面”或“中性”,仅此而已。
生成语法上有效的 SQL 或函数调用参数以供工具使用,其中格式错误的标记会使执行器崩溃。
生成符合正则表达式的输出,例如电话号码、ISO 日期或固定格式的产品代码。
受限解码的未来
受限解码正在成为默认功能而不是附加功能:提供商现在公开“结构化输出”和“JSON 模式”,以保证服务器端架构合规性。预计语法编译速度更快,预计算自动机的延迟更低,以及与工具调用和代理框架的更紧密集成,其中每个模型响应都必须干净地插入代码中。研究正在推动更丰富的约束——类型系统、完整的编程语言语法和语义检查——而不牺牲模型的流畅性。
付诸实践
为什么这很重要
- 速度与规模. 语言工作流程可以在不牺牲一致性的情况下更快地移动。
- 交通与覆盖范围. 它扩展了跨语言和沟通方式的访问。
- 更清晰的判决. 团队可以花更多时间进行判断,而自动化则可以处理重复。
留意
- 幻觉的事实可以悄悄地进入报告、支持流程或研究成果。
- 及时的敏感性可能会在类似的请求中产生不一致的结果。
- 如果访问控制薄弱,敏感文本数据可能会暴露。
后续步骤
- 在推出之前定义输出格式、语气和质量标准。
- 当准确性很重要时,请使用可信来源进行地面响应。
- 为高风险输出保留人工审查检查点。
- 跟踪故障模式并定期重新训练提示或工作流程。
不断探索
常见问题
什么是约束解码?
约束解码通过阻止任何会破坏结构的标记,强制语言模型生成遵循严格规则的输出(例如有效的 JSON、正则表达式模式或一组固定的选择)。它将概率文本生成器转变为机器可解析输出的可靠生成器。
约束解码在每个生成步骤中的作用是什么?
约束解码计算给定语法状态下哪些标记是合法的,并在模型采样之前将所有非法标记的概率实际上设置为零。
如果请求的 JSON 模式使用结构化输出实现不支持的功能,会发生什么情况?
当前的结构化输出文档指出,严格模式下不受支持的 JSON 架构会导致错误;模式有一个特定于实现的支持子集。
哪些技术挑战使得受限解码难以实施?
分词器将文本分割成跨越或分割语法边界的子词片段,因此库必须将语法转换映射到实际的标记词汇表上。
以下哪一个是用于指定解码约束的真实格式?
JSON 模式、上下文无关语法(如 GBNF)和正则表达式通常被编译成强制结构的标记掩码。
通常在管道中的哪个点应用约束掩码?
掩码应用于原始逻辑,以便在采样下一个令牌时非法令牌接收的概率可以忽略不计。