使用FalconAI、LangChain和Chainlit创建聊天机器人
用FalconAI、LangChain和Chainlit创建聊天机器人
介绍
生成式人工智能(Generative AI),尤其是生成式大型语言模型(Generative Large Language Models),自问世以来就已经风靡全球。这仅仅是因为它们能够与不同的应用程序集成,从生成工作可编程代码到创建完全由生成式AI管理的聊天支持系统。但是,大多数生成式AI领域的大型语言模型都对公众封闭;大多数都没有开源。虽然确实存在一些开源模型,但远远不及闭源的大型语言模型。但最近,一种名为FalconAI的LLM发布了,该模型名列OpenLLM排行榜首,并且已经开源。在本指南中,我们将使用Falcon AI、LangChain和Chainlit创建一个聊天应用。
学习目标
- 利用Falcon模型在生成式AI应用中
- 使用Chainlit为大型语言模型构建用户界面
- 使用Inference API访问Hugging Face中的预训练模型
- 使用LangChain将大型语言模型和提示模板串联起来
- 将LangChain串联与Chainlit集成,用于构建用户界面应用
本文是作为《数据科学博文马拉松》的一部分发表的。
什么是Falcon AI?
在生成式AI领域,Falcon AI是最近推出的一种大型语言模型,以在OpenLLM排行榜中排名第一而闻名。Falcon AI由阿联酋技术创新研究所(TII)推出。Falcon AI的架构经过优化,以便进行推理。当它首次推出时,Falcon AI超过了Llama、Anthropic、DeepMind等最先进的模型,名列OpenLLM排行榜首。该模型在AWS Cloud上训练,连续使用了384个GPU,共计两个月的时间。
目前,它由两个模型组成,Falcon 40B(400亿参数)和Falcon 7B(70亿参数)。重要的是,Falcon AI的制造商表示该模型将开源,因此允许开发人员在商业用途中无限制地使用它。Falcon AI甚至提供了Instruct模型,即Falcon-7B-Instruct和Falcon-40B-Instruct,我们可以快速开始构建聊天应用。在本指南中,我们将使用Falcon-7B-Instruct模型。
什么是Chainlit?
Chainlit库类似于Python的Streamlit库。但是,Chainlit库的目的是快速构建具有大型语言模型的聊天应用,即创建类似于ChatGPT的用户界面。使用Chainlit包可以在几分钟内开发会话式聊天应用。该库与LangFlow和LangChain(用于构建带有大型语言模型的应用程序的库)无缝集成,我们将在本指南中介绍。
Chainlit甚至允许可视化多步推理;它让我们看到中间结果,以了解大型语言模型如何得出问题的输出。因此,通过用户界面,您可以清楚地看到模型的思路链,以了解LLM是如何得出给定问题的结论的。Chainlit仅限于文本对话,并允许发送和接收图像到和从相应的生成式AI模型。它甚至允许我们在用户界面中更新提示模板,而不是返回代码并进行更改。
生成HuggingFace推理API
有两种方法可以使用Falcon-7B-Instruct模型。一种是传统的方式,即将模型下载到本地机器,然后直接使用。但是由于这是一个大型语言模型,它需要高显存才能正常运行。因此,我们选择另一种选项,即通过推理API直接调用模型。推理API是HuggingFace的API令牌,我们可以使用它来访问HuggingFace中的所有变换器模型。
要访问此令牌,我们需要在HuggingFace创建一个帐户,我们可以通过访问官方HuggingFace网站来完成此操作。在您的详细信息中登录/注册后,转到您的个人资料,然后单击设置部分。从那里开始的过程如下:
所以在设置中,转到访问令牌。您将创建一个新令牌,我们必须使用Falcon-7B-Instruct模型进行工作。单击“新建令牌”以创建新令牌。为令牌输入一个名称,并将角色选项设置为“写入”。现在单击“生成”以生成我们的新令牌。有了这个令牌,我们就可以访问Falcon-7B-Instruct模型并构建应用程序。
准备环境
在我们深入研究应用程序之前,我们将为代码创建一个理想的工作环境。为此,我们需要安装所需的Python库。首先,我们将从以下库中安装支持模型的库。
$ pip install huggingface_hub
$ pip install transformers
这些命令将安装HuggingFace Hub和Transformers库。这些库调用了位于HuggingFace中的Falcon-7B-Instruct模型。接下来,我们将安装Python的LangChain库。
$ pip install langchain
这将安装Python的LangChain包,我们将使用它来创建与Falcon大型语言模型对话的应用程序。最后,没有用户界面,对话应用程序就无法完成。因此,我们将下载chainlit库。
$ pip install chainlit
这将安装Python的Chainlit库。借助这个库,我们将为我们的对话聊天应用程序构建用户界面。安装chainlit后,我们需要测试该包。为此,在终端中使用以下命令。
chainlit hello
输入此命令后,将出现一个具有地址localhost和端口8000的新窗口。然后将显示用户界面。这表明chainlit库已正确安装并准备与Python中的其他库一起使用。
创建聊天应用程序
在本节中,我们将开始构建我们的应用程序。我们具备了所有必要的库,可以继续构建我们自己的对话聊天应用程序。我们首先要做的是导入库,并将HuggingFace推理API存储在一个环境对象中。
import os
import chainlit as cl
from langchain import HuggingFaceHub, PromptTemplate, LLMChain
os.environ['API_KEY'] = 'Your API Key'
- 因此,我们首先导入os、chainlit和langchain库。
- 从langchain中,我们导入了HuggingFaceHub。这个HuggingFaceHub将让我们通过推理API调用Falcon-7B-Instruct模型,并接收模型生成的响应。
- PromptTemplate是LangChain的元素之一,用于基于大型语言模型构建应用程序。它定义了模型应该如何解释用户的问题以及在什么上下文中回答它们。
- 最后,我们甚至从LangChain中导入LLMChain。LLMChain是将不同的LangChain组件链接在一起的模块。在这里,我们将把Falcon-7B-Instruct大型语言模型与PromptTemplate链在一起。
- 然后,我们将我们的HuggingFace推理API存储在一个环境变量中,即 os.environ[‘API_KEY’]
指导Falcon模型
现在,我们将通过HuggingFaceHub模块推断Falcon Instruct模型。为此,首先,我们必须提供模型在Hugging Face中的路径。代码如下:
model_id = 'tiiuae/falcon-7b-instruct'
falcon_llm = HuggingFaceHub(huggingfacehub_api_token=os.environ['API_KEY'],
repo_id=model_id,
model_kwargs={"temperature":0.8,"max_new_tokens":2000})
- 首先,我们必须给出我们将使用的模型的id。对于我们来说,将使用Falcon-7B-Instruct模型。这个模型的id可以直接在HuggingFace网站上找到,即‘tiiuae/falcon-7b-instruct’。
- 现在我们调用HuggingFaceHub模块,我们传递了API令牌(分配给一个环境变量),甚至是 repo_id,即我们将要使用的模型的id。
- 我们还提供了模型参数,如温度和最大新令牌数量。温度是模型应该有多具有创造力,其中1表示更具创造力,0表示没有创造力。
现在我们已经清楚地定义了我们将使用的模型。 HuggingFace API将允许我们连接到该模型并运行查询,从而开始构建我们的应用程序。
提示模板
在选择模型之后,下一步是定义提示模板。提示模板告诉模型应该如何行为。它告诉模型应该如何解释用户提供的问题。它甚至告诉模型如何得出输出以回答用户的查询。定义提示模板的代码如下:
template = """
您是一个提供有用答案的AI助手。
{question}
"""
prompt = PromptTemplate(template=template, input_variables=['question'])
上面的template变量定义并设置了Falcon模型的提示模板的上下文。这里的上下文很简单,AI需要提供有用的答案给用户查询,然后是输入变量{question}。然后,将这个模板和其中定义的变量一起给予PromptTemplate函数,然后将其分配给一个变量。这个变量现在是提示模板,稍后将与模型链接在一起。
链接两个模型
现在我们既有了Falcon LLM模型,又有了提示模板。最后一部分是将这两个模型链接在一起。我们将使用LangChain库中的LLMChain对象来完成这个任务。代码如下:
falcon_chain = LLMChain(llm=falcon_llm,
prompt=prompt,
verbose=True)
借助LLMChain的帮助,我们已经将Falcon-7B-Instruct模型与我们自己创建的PromptTemplate链接在了一起。我们甚至已经设置了verbose = True,这有助于了解代码运行时发生的情况。现在让我们通过给它提供一个查询来测试这个模型
print(falcon_chain.run("What are the colors in the Rainbow?"))
在这里,我们询问模型彩虹的颜色是什么。彩虹包含VIBGYOR(紫罗兰、靛蓝、蓝色、绿色、黄色、橙色和红色)颜色。Falcon 7B Instruct模型生成的输出完全符合所问的问题。设置verbose选项可以让我们在格式化后查看提示,并告诉我们链的起始和结束位置。最后,我们准备为我们的对话聊天应用程序创建一个用户界面。
Chainlit – 大型语言模型的用户界面
在本节中,我们将使用Chainlit包为我们的应用程序创建用户界面。Chainlit是一个Python库,让我们能够在几分钟内为大型语言模型构建聊天界面。它集成了LangFlow和之前使用的LangChain库。使用Chainlit创建聊天界面很简单。我们只需编写以下代码:
@cl.langchain_factory(use_async=False)
def factory():
prompt = PromptTemplate(template=template, input_variables=['question'])
falcon_chain = LLMChain(llm=falcon_llm,
prompt=prompt,
verbose=True)
return falcon_chain
步骤
- 首先,我们从Chainlit导入LangChain的装饰器@cl.langchain_factory。
- 然后,我们定义一个包含LangChain代码的工厂函数。这里我们需要的代码是提示模板和LangChain的LLMChain模块,它构建并链接我们的Falcon LLM。
- 最后,返回变量必须是一个LangChain实例。在这里,我们返回创建的最终链,即LLMChain实例falcon_chain。
- use_async = False告诉代码不要使用LangChain代理的异步实现。
让我们运行代码!
就是这样。现在当我们运行代码时,将显示一个聊天界面。但是这是如何可能的?事实是,Chainlit负责一切。在幕后,它管理Webhook连接,负责为访问网站的每个用户创建单独的LangChain实例(链、代理等)。要运行我们的应用程序,请在终端中输入以下内容。
$ chainlit run app.py -w
-w表示在我们的应用程序代码中进行更改时自动重新加载。输入后,会打开一个新的标签,显示localhost:8000
这是Chainlit的开放页面,即Chainlit的欢迎界面。我们可以看到,Chainlit只需要一个装饰器就可以为我们构建一个完整的聊天界面。让我们尝试通过这个界面与Falcon模型进行交互。
我们可以看到,UI界面和Falcon Instruct模型都正常工作。该模型可以迅速回答问题。它确实根据用户的上下文(向一个5岁的孩子解释)尝试解释了第二个问题。这只是我们使用这些开源生成式AI模型所能实现的开始。通过进行一些小的修改,我们可以创建更多面向问题、基于真实场景的应用程序。
由于聊天界面是一个网站,完全可以将其托管在任何云平台上。我们可以将应用程序容器化,然后尝试将其部署在Google Cloud、AWS、Azure或其他云服务中。通过这样做,我们可以与外界共享我们的应用程序。
结论
在本教程中,我们看到了如何使用新的开源Falcon大型语言模型、LangChain和Chainlit构建一个简单的聊天应用程序。我们利用了这三个软件包,并将它们相互连接,从代码到工作应用程序创建了一个完整的解决方案。我们甚至看到了如何获取HuggingFace Inference API密钥,以访问HuggingFace库中的数千个预训练模型。借助LangChain,我们将LLM与自定义提示模板进行了链式连接。最后,通过Chainlit,我们可以在几分钟内围绕LangChain Falcon模型创建一个聊天应用程序界面。
本指南的一些关键要点包括:
- Falcon是一个开源模型,是功能强大的LLM之一,目前在OpenLLM排行榜的顶部
- 使用Chainlit,可以在几分钟内为LLM创建用户界面
- 推理API允许我们连接到HuggingFace中的许多不同模型
- LangChain有助于构建大型语言模型的自定义提示模板
- Chainlit与LangChain的无缝集成使其能够更快、更准确地构建LLM应用程序
常见问题
本文中显示的媒体不归Analytics Vidhya所有,仅限作者使用。