使用Google Vertex AI搜索和对话构建RAG聊天机器人

利用Google Vertex AI搜索和对话构建RAG聊天机器人' ('Utilizing Google Vertex AI for Searching and Conversations to Build a RAG Chatbot')
来源:作者图解

谷歌最近发布了他们的RAG(检索增强生成器)托管服务,Vertex AI 搜索和对话,以供正式使用。这项服务之前被称为谷歌企业搜索,给已经蓬勃发展的大型语言模型聊天机器人市场带来了更多竞争。

本文假设您对使用 RAG 框架构建大型语言模型聊天机器人有一些了解。下面的图解来自 Langchain,是 RAG 不错的介绍:

来源:https://python.langchain.com/docs/use_cases/question_answering/

本文主要关注使用谷歌 Vertex AI 搜索和对话设置大型语言模型聊天机器人(在本文的其余部分中我们将使用 Vertex AI Search)。

解决方案图解

来源:作者图解

Datastore 数据存储

Vertex AI 搜索目前支持 HTML、PDF 和 CSV 格式的源数据。

来源:https://cloud.google.com/generative-ai-app-builder/docs/agent-data-store

Vertex AI 搜索目前支持 HTML、PDF 和 CSV 格式的源数据。源数据是从谷歌的搜索索引中收集的(与谷歌搜索使用的相同索引)。这与其他需要单独的网站爬取机制来提取网站信息的提供商相比,是一个重大优势。

对于非结构化数据(目前只支持 PDF 和 HTML),文件首先需要上传到 Cloud Storage 存储桶中。这个存储桶可以在任何可用的区域。

⚠️ Vertex AI 搜索中的数据存储与 Cloud Storage 是不同的。它类似于其他提供商常提到的“向量数据库”。

目前每个 Vertex AI 搜索上的应用都会有其自己的数据存储。一个应用下可以有多个数据存储。

来源:作者的谷歌云平台环境截图

为了演示目的,我们将使用在线提供的学生手册示例 PDF(https://www.bcci.edu.au/images/pdf/student-handbook.pdf)。注意:我们与这个组织无关(这只是一个我们在线找到的示例 PDF…)

步骤 1 — 准备 PDF 文件:

使用 Python 将单个 PDF 手册拆分为多个页面。这个过程只需几秒钟。

from PyPDF2 import PdfWriter, PdfReader
inputpdf = PdfReader(open("student-handbook.pdf", "rb"))
for i in range(len(inputpdf.pages)):
    output = PdfWriter()
    output.add_page(inputpdf.pages[i])
    with open("./split_pdfs_student_handbook/document-page%s.pdf" % i, "wb") as outputStream:
        output.write(outputStream)

第二步-上传到GCS存储桶:

我们需要将pdf文件上传到Google Cloud Storage(GCS)中。您可以通过Google控制台或使用您选择的任意语言的GCP SDK进行上传。

如果只需要一个pdf文档,可以使用”clickops”进行演示。

将pdf文件放入一个云存储存储桶中。

来源:作者在GCP环境中的截图

第三步-设置应用程序和数据存储:

来源:作者在GCP环境中的截图

在GCP控制台中,找到”搜索和对话”,然后点击”创建应用”。选择聊天应用类型。通过为公司和代理命名来配置应用。注意:代理只在全球区域可用。

来源:作者在GCP环境中的截图

接下来,创建一个数据存储。选择”云存储”并选择在第二步中创建的存储桶。

来源:作者在GCP环境中的截图

然后,它将要求您创建一个数据存储。这实际上是一个存储语义搜索和LLM的嵌入向量的数据存储。

选择”云存储”,然后选择我们在上一步中创建的云存储。

来源:作者在GCP环境中的截图

完成后,点击”继续”。然后,嵌入过程将开始。此过程的时间取决于数据量,可能需要几分钟到一小时不等。此外,GCP提供了具有异步客户端的sdk库,可以加快整个过程。否则,您始终可以使用GCP控制台。默认情况下,它使用同步API调用。

您可以在活动选项卡下检查导入(嵌入)进度。

来源:作者在GCP环境中的截图

导入完成后,转到左侧的”预览”,它将带您进入Dialogflow CX控制台。

第四步-Dialogflow:

来源:作者在GCP环境中的截图

在Dialogflow控制台上,点击”开始页面”。右侧会打开数据存储设置。您可以同时选择多个数据存储(网站,pdf等)。在这种情况下,请将其设置为我们在第三步中创建的学生手册。

在数据存储设置下找到“Generator”。

来源:GCP环境下作者的截图

添加以下提示:

您是一名在最佳大学工作的虚拟助手。您将根据学生手册向学生提供通用建议。始终礼貌地回答,并用建设性的语言。 上一次的对话:$conversation \n这是用户的问题 $last-user-utterance \n这是您需要了解的一些上下文知识:$request.knowledge.answers \n您的回答:

$conversation、$last-user-utterance、$request.knowledge.answers是Dialogflow参数。

来源:GCP环境下作者的截图

在“输入参数”中,输入$last-user-utterance。这将把用户的问题传递给生成器。在“输出参数”中,输入$request.generative.student-assistant-response。始终记得在顶部点击“保存”按钮!

来源:GCP环境下作者的截图

在“代理说”中,不要忘记输入$request.generative.student-assistant-response。这将确保生成器的输出在代理聊天中被接收。

步骤5 —— 测试与集成:

要测试此机器人,您可以单击右上角的“测试代理”模拟器,或使用左侧的“管理”选项卡选择一个集成。就个人而言,我更喜欢使用“对话流信使”而不是“测试代理”,因为它会向我显示最终的应答格式。

来源:GCP环境下作者的截图

一旦您点击Dialogflow信使,请选择“启用未经身份验证的API”。这只是为了测试。在实际情况中,根据您的身份验证要求,您可以选择是否启用此功能。

来源:GCP环境下作者的截图
来源:GCP环境下作者的截图

现在,您可以输入您的问题。RAG生成的答案将在学生手册PDF中基于生成。它还附带了底部的参考链接。如果单击该链接,将带您到包含信息的特定PDF页面。