LMQL 是一种面向大语言模型(LLM)的编程语言,它基于 Python 的超集。LMQL 提供了一种新颖的方式,将传统编程与在代码中调用 LLM 的能力交织在一起。它超越了传统的模板语言,将 LLM 交互原生地集成在程序代码层面。
![]()
请填写 LMQL 开发者调查问卷,帮助我们塑造下一个主要版本:https://forms.gle/pGvAicNpUhS1rAkK9
LMQL 程序读起来像标准的 Python,但顶层的字符串被解释为查询字符串:它们被传递给 LLM,其中像 [GREETINGS] 这样的模板变量会自动由模型补全:
"Greet LMQL:[GREETINGS]\n" where stops_at(GREETINGS, ".") and not "\n" in GREETINGS
if "Hi there" in GREETINGS:
"Can you reformulate your greeting in the speech of \
victorian-era English: [VIC_GREETINGS]\n" where stops_at(VIC_GREETINGS, ".")
"Analyse what part of this response makes it typically victorian:\n"
for i in range(4):
"-[THOUGHT]\n" where stops_at(THOUGHT, ".")
"To summarize:[SUMMARY]"
程序输出:
LMQL 允许你编写既包含传统算法逻辑,又包含 LLM 调用的程序。在执行的任何时刻,你都可以结合标准自然语言提示,基于程序变量来提示 LLM,从而在你的程序上下文中利用模型的推理能力。
为了更好地控制 LLM 行为,你可以使用 where 关键字来指定生成文本的约束和数据类型。这能够引导模型的推理过程,并使用富有表现力的约束语言来约束中间输出。
除了这种线性的脚本形式,LMQL 还支持多种解码算法来执行你的程序,例如 argmax、sample,甚至是像集束搜索和 best_k这样的高级分支解码器。
通过浏览 示例展示,在我们的 基于浏览器的 Playground IDE 中运行你自己的程序,或阅读 文档 来了解更多关于 LMQL 的信息。
LMQL 旨在通过其高级功能,使与 OpenAI 和 🤗 Transformers 等语言模型的协作更加高效和强大,这些功能包括多变量模板、条件分布、约束、数据类型和控制流。
要安装最新版本的 LMQL,请在已安装 Python ==3.10 的环境下运行以下命令。
pip install lmql
本地 GPU 支持:如果你想在本地 GPU 上运行模型,请确保在安装了支持 GPU 的 PyTorch >= 1.11 的环境中安装 LMQL(参考 https://pytorch.org/get-started/locally/),并通过 pip install lmql[hf] 安装。
安装后,你可以通过以下命令启动 LMQL playground IDE:
lmql playground
使用 LMQL playground 需要安装 Node.js。如果你在 conda 管理的环境中,可以通过
conda install nodejs=14.20 -c conda-forge安装 node.js。否则,请访问官方 Node.js 网站 https://nodejs.org/en/download/ 查看如何在你的系统上安装。
这将启动一个基于浏览器的 playground IDE,包含许多 LMQL 示例程序。如果 IDE 没有自动启动,请访问 http://localhost:3000。
或者,可以使用 lmql run 来执行本地的 .lmql 文件。请注意,在 Playground IDE 中或通过 lmql run 使用本地 HuggingFace Transformers 模型时,你必须首先通过命令 lmql serve-model 启动相应模型的 LMQL 推理 API 实例。
如果你想使用 OpenAI 模型,必须配置你的 API 凭证。你可以通过定义 OPENAI_API_KEY 环境变量,或者在当前工作目录中创建一个 api.env 文件来实现,文件内容如下:
openai-org: <组织标识符>
openai-secret: <API 密钥>
对于系统范围的配置,你也可以在 $HOME/.lmql/api.env 或 LMQL 分发版的项目根目录(例如开发副本中的 src/)创建 api.env 文件。
或者,你可以使用 LMQL 特定的环境变量 LMQL_OPENAI_SECRET 和 LMQL_OPENAI_ORG。
要安装最新的(前沿)LMQL 版本,你也可以运行以下命令:
pip install git+https://github.com/eth-sri/lmql
这将直接从本仓库的 main 分支安装 lmql 包。我们不会持续测试 main 版本,因此它可能比最新的 PyPI 版本稳定性稍差。
LMQL 是一个以社区为中心的项目。如果你有兴趣为 LMQL 做贡献,请参阅贡献指南了解更多信息,并通过 Discord 联系我们。我们期待你的贡献!
要为本地 LMQL 开发设置一个支持 GPU 的 conda 环境,请运行以下命令:
# 准备 conda 环境
conda env create -f scripts/conda/requirements.yml -n lmql
conda activate lmql
# 在当前 shell 中注册 `lmql` 命令
source scripts/activate-dev.sh
操作系统:支持 GPU 的 LMQL 版本已在 Ubuntu 22.04(CUDA 12.0)和 Windows 10(通过 WSL2 和 CUDA 11.7)上测试通过。不支持 GPU 的版本(见下文)已在 Ubuntu 22.04、macOS 13.2 Ventura 和 Windows 10(通过 WSL2)上测试通过。
本节概述如何设置一个不支持本地 GPU 的 LMQL 开发环境。请注意,不支持本地 GPU 的 LMQL 仅支持使用 API 集成的模型,如 openai/text-davinci-003。请参阅 OpenAI API 文档 (https://platform.openai.com/docs/models/gpt-3-5) 了解可用模型集合。
要为不支持 GPU 的 LMQL 设置 conda 环境,请运行以下命令:
# 准备 conda 环境
conda env create -f scripts/conda/requirements-no-gpu.yml -n lmql-no-gpu
conda activate lmql-no-gpu
# 在当前 shell 中注册 `lmql` 命令
source scripts/activate-dev.sh