指南
什么是 Guidance?
Guidance 是一项功能,允许用户使用指定的语法约束大型语言模型的生成。当您希望生成遵循特定结构或使用特定词语集的文本,或以特定格式生成输出时,此功能特别有用。一个突出的例子是 JSON 语法,其中模型被强制输出有效的 JSON。
如何使用?
Guidance 可以通过多种方式实现,并且社区总是在寻找新的使用方式。以下是一些使用 Guidance 的示例
从技术上讲,Guidance 可用于生成
- 特定的 JSON 对象
- 函数签名
- 类型化输出,例如整数列表
但是,这些用例可以涵盖广泛的应用,例如
- 从非结构化文本中提取结构化数据
- 将文本概括为特定格式
- 将输出限制为特定类别的词语(充当 LLM 驱动的分类器)
- 生成特定 API 或服务的输入
- 为下游任务提供可靠且一致的输出
- 从多模态输入中提取数据
它是如何工作的?
深入细节,指导是通过在生成请求中包含一个语法来实现的,该语法会被编译并用于修改选定的标记。
这个过程可以分解成以下步骤:
- 向后端发送一个请求,它会被处理并放入批处理中。处理包括将语法编译成有限状态机和语法状态。
模型对批处理进行前向传递。这会返回词汇表中每个标记在批处理中每个请求的概率。
选择其中一个标记的过程称为“采样”。模型从概率分布中采样以选择下一个标记。在 TGI 中,采样之前的步骤都称为“处理器”。语法被用作一个处理器,屏蔽掉语法不允许的标记。
- 应用语法掩码,模型从剩余的标记中采样。一旦选择了一个标记,我们就会用新标记更新语法状态,为下一轮传递做好准备。
如何使用指导?
主要有两种使用指导的方式:您可以使用带有语法的/generate
端点,或者使用带有工具的/chat/completion
端点。
在底层,工具是语法的特殊情况,它允许模型选择一个或零个提供的工具。
请参考使用指导以获取更多示例以及有关如何在 Python、JavaScript 和 cURL 中使用指导的详细信息。
充分利用指导
根据您使用指导的方式,您可能希望使用不同的功能。以下是一些充分利用指导的技巧:
- 如果您使用的是带有
grammar
的/generate
,建议在提示中包含该语法,并在其前面加上类似“请使用以下 JSON 模式生成输出:”的内容。这将有助于模型理解语法的上下文并相应地生成输出。 - 如果您得到的响应包含许多重复的标记,请使用
frequency_penalty
或repetition_penalty
来减少输出中重复标记的数量。