用Gradio、Langchain和OpenAI构建您自己的自定义聊天机器人

2023-11-13 13:54:08 浏览数 (1)

聊天机器人在与企业和其他组织进行互动方面越来越受欢迎。它们可以用于提供客户服务、回答问题,甚至生成创造性内容。构建自定义聊天机器人可以极大地改善客户体验并自动化任务。

OpenAI的API提供了一个强大的工具来构建聊天机器人。它允许您访问OpenAI的大型语言模型,这些模型可以生成文本、翻译语言,并全面而不正式地回答问题。

在本文中,您将了解更多关于ChatGPT,并使用Python和Langchain框架以及基于Gradio的前端创建构建一个自定义聊天机器人。

以下是这个练习中采取的步骤:

1.创建一个OpenAI账号并获取API密钥2.选择一个大型的语言模型来使用3.使用Langchain框架4.使用Gradio前端部署您的聊天机器人

什么是ChatGPT?

ChatGPT是由OpenAI创建的语言处理AI模型。它有1750亿个参数,可以回答问题、写作文和诗歌、翻译语言、摘要长文本和写代码片段。ChatGPT使用自然语言处理和机器学习技术来理解和生成类似人类的回答。

1. 创建OpenAI账户并获取API密钥

您可以访问platform.openai.com[1],创建一个OpenAI账户并同意ChatGPT的条款。

点击页面右上角的您的姓名或图标选项,然后选择“API密钥”或点击链接—— Account API Keys — OpenAI API[2]

点击“创建新的秘密密钥”按钮以创建新的OpenAI密钥

请将秘密密钥保存在安全且可访问的地方。出于安全原因,您将无法通过OpenAI账户再次查看它。

2. 选择一个大型语言模型进行使用

有许多因素可以确定选择一个大型语言模型来创建一个自定义聊天机器人。

1.确定您的**聊天机器人**的目的:您希望您的聊天机器人能做什么?您希望它能执行哪些任务?一旦您确定了聊天机器人的目的,就可以开始缩小大型语言模型的选择范围。2.考虑数据集的大小:数据集越大,聊天机器人就能从中学习的数据就越多。这意味着您需要选择一个具有大量参数的大型语言模型。3.考虑您希望**聊天机器人生成的内容类型**:您希望聊天机器人能够生成创意文本格式,例如诗歌、代码、剧本、音乐作品、电子邮件、信件等,还是希望它能够以全面和信息丰富的方式回答问题?您希望聊天机器人生成的内容类型将帮助您缩小大型语言模型的选择范围。4.考虑大型语言模型的成本:使用大型语言模型可能会很昂贵。如果您有预算限制,您可能希望选择一个较小的语言模型。5.阅读每个大型语言模型的文档:每个大型语言模型的文档将为您提供有关模型的能力和限制的更多信息。这些信息将帮助您对适合您的聊天机器人的模型做出明智的决策。6.测试不同的大型语言模型:一旦您缩小了选择范围,您可以测试不同的大型语言模型,看哪个最适合您的聊天机器人。您可以使用OpenAI API生成文本、翻译语言和回答问题来进行测试。

对于当前的练习,选择了GPT-3.5-Turbo模型。GPT-3.5-Turbo拥有1750亿个参数,是目前最大的语言模型之一。GPT-3.5-Turbo速度快且高效,可以实时生成回复。这使得它非常适合需要跟上对话节奏的聊天机器人。

3. 使用Langchain框架

LangChain只是简单地组合大量数据,这些数据可以通过尽可能少的计算能力被LLM引用。它的工作原理是将一个大型数据源,比如一个50页的PDF文件,进行分块处理,并将这些块嵌入到向量存储中。

我们将从安装所需的Python库开始,这些库是本练习所必需的。您可以使用Jupyter Notebook或其他类似的IDE,如Visual Studio。

代码语言:javascript复制
pip install streamlit streamlit_chat langchain openai faiss-cpu tiktoken unstructured chromadb gradio

创建一个文件constants.py并提供你的OpenAI API密钥

使用你自己的OpenAI API密钥替换并将此文件重命名为constants.py。

代码语言:javascript复制
APIKEY = "####"

创建一个新的Python文件 chatgpt_demo.pychatgpt_demo.ipynb 并将以下代码添加到其中。在你的代码中导入以下库。

代码语言:javascript复制
import gradio as grimport os
import openai from langchain.chains
import ConversationalRetrievalChain from langchain.chat_models 
import ChatOpenAI from langchain.document_loaders
import DirectoryLoader from langchain.indexes.vectorstore 
import VectorStoreIndexWrapper from langchain.indexes
import VectorstoreIndexCreator from langchain.llms
import OpenAI from langchain.embeddings 
import OpenAIEmbeddings from langchain.vectorstores.chroma 
import Chroma
import constants

下面的文本将翻译成zh-CN:

文本:“初始代码行导入运行聊天机器人所需的库。导入gr库以创建用户界面以及openaios等其他库用于处理与OpenAI相关的操作。

设置OpenAI API密钥

代码语言:javascript复制
os.environ["OPENAI_API_KEY"] = constants.APIKEY

该代码通过将其分配给os.environ["OPENAI_API_KEY"]来设置OpenAI API密钥。该API密钥允许聊天机器人向OpenAI API发送请求以生成回复。”

请注意,此代码需要额外的配置,例如在constants模块中指定APIKEY并准备必要的数据文件。

处理持久性

代码语言:javascript复制
PERSIST = False

PERSIST变量确定聊天机器人是否应重复使用先前保存的索引。如果启用了PERSIST且存在名为"persist"的持久目录,则代码会从该目录加载预构建的索引。如果禁用了PERSIST或该目录不存在,则代码会创建一个新的索引。

加载和索引文档

代码语言:javascript复制
if PERSIST and os.path.exists("persist"): 
  print("Reusing index...n") 
  vectorstore = Chroma(persist_directory="persist", embedding_function=OpenAIEmbeddings()) 
  index = VectorStoreIndexWrapper(vectorstore=vectorstore) 
  index.load("persist")
else: loader = DirectoryLoader("data/") 
if PERSIST: index = VectorstoreIndexCreator(vectorstore_kwargs=
  {"persist_directory":"persist"}).from_loaders([loader]) 
else: 
  index = VectorstoreIndexCreator().from_loaders([loader])

代码使用langchain.document_loaders模块中的DirectoryLoader类从指定目录加载文档。然后使用VectorstoreIndexCreator类对这些文档进行索引,以实现高效的检索。

创建对话链

代码语言:javascript复制
chain = ConversationalRetrievalChain.from_llm(llm=ChatOpenAI(model="gpt-3.5-turbo"), 
retriever=index.vectorstore.as_retriever(search_kwargs={"k": 1}))

“ConversationalRetrievalChain”是聊天机器人的骨干。它将语言模型(ChatOpenAI)与文档检索器(index.vectorstore.as_retriever)结合起来形成一个会话链。该链与语言模型交互,根据用户的查询生成相关的回答。

处理聊天历史

代码语言:javascript复制
chat_history = []

“chat_history”变量用于跟踪对话历史,将用户的查询和聊天机器人的回答存储为元组。这使得聊天机器人能够保持上下文,并根据过去的互动提供相关的答案。

定义答案函数

代码语言:javascript复制
def answer_question(question): global chat_history result = chain({"question": question, "chat_history": chat_history}) chat_history.append((question, result['answer'])) return result['answer']

answer_question 函数接受一个问题作为输入。它使用当前的聊天历史调用会话链 (chain) 来生成答案。然后,聊天历史将会被更新为新的问题和答案。

4. 使用 Gradio 部署你的 聊天机器人

现在,当你的代码准备就绪后,我们可以使用 Gradio 来部署代码。

设置用户界面

代码语言:javascript复制
iface = gr.Interface( fn=answer_question, inputs="text", outputs="text", title="Chatbot", description="从自定义文档中提问并获取答案")

使用gr.Interface,该代码定义了聊天机器人的用户界面。它指定了输入和输出类型(在这种情况下都是文本),并提供了标题和描述以解释聊天机器人的目的。

启动聊天机器人

代码语言:javascript复制
iface.launch(share=True)

“iface.launch(share=True)”命令启动聊天机器人界面,允许用户通过Web应用程序与聊天机器人进行交互。参数“share=True”可通过公共链接共享应用程序。

创建样本数据集

现在我们来添加样本数据集来测试聊天机器人。您可以创建一个样本文本文件并将其另存为data.txt,这是一个样本文本文件。

我的狗名字是Sunny。

我的猫名字是Muffy。

将文件保存在项目文件夹下的data文件夹中。

运行应用程序

完成上述所有步骤后,您可以在Jupyter Notebook中直接运行代码,或在命令行中运行Python脚本。

在命令行中运行Python脚本的代码

代码语言:javascript复制
python chatbot_demo.py

您将获得以下输出

根据您访问方式,您可以点击URL。或者,您也可以复制URL并粘贴到浏览器中。

您将获得以下屏幕

使用Gradio构建

现在让我们提问一些问题并查看回答。

您拥有的就是这样的东西!由GPT3.5驱动的您自己的聊天机器人:)

总结

总体而言,这段代码使用Gradio库搭建了一个聊天机器人,并使用Langchain框架将OpenAI语言模型与文档检索系统集成。用户可以提问,聊天机器人根据提供的文档数据集和对话历史进行回答。

你可以在这里[3]获取完整的代码。

声明

本文由山行翻译整理自:https://pub.aimind.so/build-your-own-custom-chatbot-using-gradio-langchain-and-openai-ff65c6010f71 感兴趣的请点赞、收藏、关注。

References

[1] platform.openai.com: https://platform.openai.com/ [2] Account API Keys — OpenAI API: https://platform.openai.com/account/api-keys [3] 这里: https://github.com/rahulapiit/ChatBot

0 人点赞