进阶 lmql.ai 2026-10-11 18:10:44 · 27 阅读

第15章 LMQL 模型加载与指定方法概览

总览

LMQL 是一种用于文本生成的高级前端语言。这意味着它不绑定于任何特定的文本生成模型。相反,我们在后端支持多种文本生成模型,包括 OpenAI 模型、llama.cpp 以及 HuggingFace Transformers。

加载模型

在 LMQL 中加载模型时,可以使用 `lmql.model(...)` 函数,该函数返回一个 `lmql.LLM` 对象:

```lmql lmql.model("openai/gpt-3.5-turbo-instruct") # OpenAI API 模型 lmql.model("random", seed=123) # 随机采样模型 lmql.model("llama.cpp:.gguf") # llama.cpp 模型

lmql.model("local:gpt2") # 在进程内加载 `transformers` 模型 lmql.model("local:gpt2", cuda=True, load_in_4bit=True) # 在进程内加载 `transformers` 模型并传入额外参数 lmql.model("gpt2") # 访问通过 `lmql serve-model` 托管的 `transformers` 模型 ```

LMQL 支持多种推理后端,每种后端都有各自的一组参数。关于如何配置和使用不同后端的详细信息,请参阅以下章节之一:Transformers、llama.cpp、OpenAI、Azure OpenAI、Replicate。

指定模型

创建 `lmql.LLM` 对象后,可以将其传递给查询程序,以指定执行期间使用的模型。具体有两种方式:

方式 A:外部指定模型

可以在外部单独指定模型及其参数,而无需嵌入在程序代码中:

```lmql import lmql

# 默认使用 'chatgpt' @lmql.query(model="chatgpt") def tell_a_joke(): '''lmql """一个很好的冷笑话。A 表示笑点 Q:[JOKE] A:[PUNCHLINE]""" 其中 STOPS_AT(JOKE, "?") 且 \ STOPS_AT(PUNCHLINE, "\n") '''

tell_a_joke() # 使用 chatgpt tell_a_joke(model=lmql.model("openai/text-davinci-003")) # 使用 text-davinci-003 ```

在这里,`tell_a_joke` 查询默认使用 ChatGPT,但也可以通过在调用查询函数时传入参数来配置为使用其他模型。

方式 B:使用 from 子句的查询

您也可以将模型作为查询的一部分进行指定。这需要使用 `from` 关键字配合缩进语法。如果您的模型选择是有意为之且应成为程序的一部分,这种方式尤其有用:

```lmql argmax "这是一个指定了 'from'-子句的查询:[RESPONSE]" from "openai/text-ada-001" ```

这里直接指定了 "openai/text-ada-001",但所示代码片段等同于使用 `lmql.model(...)`,即 `lmql.model("openai/text-ada-001")`。

请注意,`from` 关键字仅在此处所示的缩进独立语法中可用,且必须显式提供解码器关键字。

游乐场

在 LMQL 游乐场运行时,可以使用程序编辑器右上角的模型下拉菜单来设置并覆盖查询程序的 model 参数:

LMQL 游乐场中的模型选择下拉菜单。

添加新的模型后端

得益于 LMQL 的模块化设计,添加对新模型和后端的非常容易。如果您希望提议或添加对新模型 API 或推理引擎的支持,请通过我们的社区 Discord 或发送邮件至 hello@lmql.ai 与我们联系。

评论 (0)