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 , 因为我们没有使用过此功能 。
文章插图
本图片由作者本人提供
使用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族模型 , 我们可以使用默认的标记符 。
推荐阅读
- MySQL的自增主键是连续自增吗?
- MySQL数据库性能优化中常用的方法是什么?
- 实用性极强的MySQL查询优化策略
- MySQL的锁机制是如何防止数据冲突和不一致的?
- 十个高效的MySQL方法,助你更上一层楼
- 数据恢复新姿势:使用MySQL Shell进行更高效灵活的数据恢复
- SQL必须消失的九个理由,你认可吗?
- 生成式人工智能潜力的释放:软件工程师的MLOps和LLM部署策略
- 快速上手 PostgreSQL:掌握PSQL 命令行工具连接技巧
- 如何解决 MySQL 主从延时问题?