SQL应用于LLM的程序开发利器——开源LMQL

译者 | 朱先忠
审校 | 重楼
我相信你听说过SQL,甚至已经掌握了它 。SQL(结构化查询语言)是一种广泛用于处理数据库数据的声明性语言 。
根据StackOverflow的年度调查,SQL仍然是世界上最流行的语言之一 。对于专业开发人员来说,SQL是排名前三的语言(仅次于JAVAscript和html/css) 。超过一半的专业人士使用它 。令人惊讶的是,SQL甚至比Python/ target=_blank class=infotextkey>Python更受欢迎 。

SQL应用于LLM的程序开发利器——开源LMQL

文章插图
作者图表,数据来自StackOverflow调查
SQL是与数据库中的数据进行对话的常用方法 。因此 , 有人试图对LLM使用类似的方法也就不足为奇了 。在本文中,我想告诉您一种叫做LMQL的方法 。
什么是LMQL?LMQL(语言模型查询语言,https://lmql.AI/)是一种用于语言模型的开源编程语言 。LMQL在Apache 2.0许可证下发布 , 该许可证允许您在商业上使用它 。
LMQL由苏黎世联邦理工学院的研究人员开发 。他们提出了一种新的LMP(语言模型编程)思想 。LMP结合了自然语言和编程语言:文本提示和脚本指令 。
【SQL应用于LLM的程序开发利器——开源LMQL】在Luca Beurer Kellner、Marc Fischer和Martin Vechev的原始论文《提示就是编程:大型语言模型的查询语言》中,作者指出了当前LLM使用的以下挑战:
  • 相互作用 。例如,我们可以使用元提示 , 要求LM扩展初始提示 。作为一个实际案例,我们可以首先要求模型定义初始问题的语言,然后用该语言回答 。对于这样的任务,我们需要发送第一个提示,从输出中提取语言,将其添加到第二个提示模板中,并再次调用LM 。我们需要管理相当多的交互 。使用LMQL,您可以在一个提示中定义多个输入和输出变量 。除此之外 , LMQL将优化多次调用的总体可能性,这可能会产生更好的结果 。
  • 约束和标记表示 。当前的LMs不提供限制输出的功能 , 如果我们在生产中使用LMs,这是至关重要的 。想象一下,在生产中建立一个情绪分析,在我们的CS代理界面中标记负面评价 。我们的项目期望从LLM获得“积极”、“消极”或“中立” 。然而 , 通常情况下,您可以从LLM中得到类似“对所提供的客户评价的情绪是积极的”的信息,这在API中不太容易处理 。这就是为什么约束会非常有用 。LMQL允许您使用人类可理解的单词(而不是LMs使用的令牌)来控制输出 。
  • 效率和成本 。LLM是大型网络,因此无论您是通过API还是在本地环境中使用它们,它们都非常昂贵 。LMQL可以利用预定义的行为和搜索空间的约束(由约束引入)来减少LM调用的数量 。正如您所看到的,LMQL可以解决这些挑战 。它允许您在一个提示中组合多个调用,控制输出,甚至降低成本 。
    对成本和效率的影响可能相当大 。对搜索空间的限制可以显著降低LLM的成本 。例如 , 在LMQL论文的案例中,与标准解码相比 , LMQL的可计费代币减少了75–85%,这意味着它将显著降低您的成本 。

SQL应用于LLM的程序开发利器——开源LMQL

文章插图
图片来自Beurer Kellner等人的论文(2023)
我相信LMQL最重要的好处是完全控制您的输出 。然而,使用这样的方法,您还将拥有LLM上的另一层抽象(类似于我们前面讨论的LangChain) 。如果需要,它将允许您轻松地从一个后端切换到另一个后端 。LMQL可以使用不同的后端:OpenAI、HuggingFace Transformers或llama.cpp 。
您可以在本地安装LMQL , 也可以在线使用基于Web的Playground 。Playground可以非常方便地进行调试 , 但您只能在此处使用OpenAI后端 。对于所有其他用例,您必须使用本地安装 。
与往常一样,这种方法也有一些局限性:
这个图书馆还不太受欢迎,所以社区很?。?很少有外部材料可用 。
在某些情况下,文档可能不是很详细 。
最流行、性能最好的OpenAI模型有一些局限性,因此您无法将LMQL的全部功能与ChatGPT一起使用 。
我不会在生产中使用LMQL,因为我不能说它是一个成熟的项目 。例如,通过代币进行分发的准确性非常差 。
在某种程度上接近LMQL的替代方案是指导 。它还允许您约束生成并控制LM的输出 。
尽管有这些限制,我还是喜欢语言模型编程的概念,这就是我决定在本文中讨论它的原因 。


推荐阅读