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

  • 对于特殊任务,我们可以使用进程内模型加载 , 在模型名称之前指定local: 。我们将使用这种方法来处理本地模型 。现在,我们已经设置好了环境,是时候讨论如何使用Python中的LMQL了 。
  • Python函数让我们简要讨论一下如何在Python中使用LMQL 。Playground可以方便地进行调试,但如果您想在生产中使用LM,则需要一个API 。
    LMQL提供了四种主要的功能方法:LMQL 。F、lmql.run、@lmql.query decorator和Generations API 。
    最近添加了生成API 。这是一个简单的Python API,有助于在不编写LMQL的情况下进行推理 。由于我对LMP概念更感兴趣,所以本文将不讨论这个API 。
    让我们详细讨论其他三种方法 , 并尝试使用它们 。
    首先,您可以使用lmql 。F 。这是一个类似于Python中lambda函数的轻量级功能,可以允许您执行部分LMQL代码 。lmql 。F只能有一个占位符变量 , 该变量将从lambda函数返回 。
    我们可以为函数指定提示和约束 。该约束将等效于LMQL查询中的where子句 。
    由于我们没有指定任何模型,因此将使用OpenAI文本davinci 。
    capital_func = lmql.F("What is the captital of {country}? [CAPITAL]",constraints = "STOPS_AT(CAPITAL, '.')")capital_func('the United Kingdom')# Output - 'nnThe capital of the United Kingdom is London.'如果您正在使用Jupyter Notebooks , 您可能会遇到一些问题,因为Notebooks环境是异步的 。您可以在笔记本中启用嵌套事件循环以避免此类问题 。
    import nest_asyncionest_asyncio.Apply()第二种方法允许您定义更复杂的查询 。您可以使用lmql.run执行lmql查询,而无需创建函数 。让我们把查询变得更复杂一点,并在下面的问题中使用模型的答案 。
    在本例中,我们在查询字符串本身的where子句中定义了约束 。
    query_string = ''' "Q: What is the captital of {country}? \n" "A: [CAPITAL] \n" "Q: What is the main sight in {CAPITAL}? \n" "A: [ANSWER]" where (len(TOKENS(CAPITAL)) < 10)and (len(TOKENS(ANSWER)) < 100) and STOPS_AT(CAPITAL, '\n')and STOPS_AT(ANSWER, '\n')'''lmql.run_sync(query_string, country="the United Kingdom")此外,我使用了run_sync而不是run来同步获取结果 。
    因此 , 我们得到了一个LMQLResult对象,该对象具有一组字段:
    • prompt--包括整个提示以及参数和模型的答案 。我们可以看到,第二个问题使用了模型答案 。
    • variables——包含我们定义的所有变量的字典:ANSWER和CAPITAL 。
    • distribution_variable和distribution_values为None , 因为我们没有使用过此功能 。

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

    文章插图
    本图片由作者本人提供
    使用Python API的第三种方法是@lmql.query decorator,它允许您定义一个Python函数,以便将来使用 。如果您计划多次调用此提示会更方便 。
    我们可以为之前的查询创建一个函数 , 只得到最终答案,而不是返回整个LMQLResult对象 。
    @lmql.querydef capital_sights(country): '''lmql "Q: What is the captital of {country}? \n" "A: [CAPITAL] \n" "Q: What is the main sight in {CAPITAL}? \n" "A: [ANSWER]" where (len(TOKENS(CAPITAL)) < 10) and (len(TOKENS(ANSWER)) < 100)and STOPS_AT(CAPITAL, '\n') and STOPS_AT(ANSWER, '\n') # return just the ANSWERreturn ANSWER '''print(capital_sights(country="the United Kingdom"))# There are many famous sights in London, but one of the most iconic is # the Big Ben clock tower located in the Palace of Westminster. # Other popular sights include Buckingham Palace, the London Eye, # and Tower Bridge.此外,您还可以将LMQL与LangChain结合使用:
    LMQL查询是增强型的提示模板 , 可能是LangChain链的一部分 。
    您可以利用LMQL中的LangChain组件(例如,检索) 。您可以在文档中找到示例 。
    现在,我们已经了解了LMQL语法的所有基础知识,并且准备继续我们的任务——定义客户评论的情感 。
    情绪分析为了了解LMQL的表现 , 我们将使用UCI机器学习库中标记的Yelp评论 , 并尝试预测情绪 。数据集中的所有评论都是正面或负面的,但我们将保持中立,作为分类的可能选项之一 。
    对于这项任务,让我们使用本地模型——Zephyr和Llama-2 。要在LMQL中使用它们,我们需要在调用LMQL时指定模型和标记符 。对于Llama族模型 , 我们可以使用默认的标记符 。


    推荐阅读