构建带有 Web 界面的文档问答机器人

Tags: #OpenAI #LangChain #FastUI #RAG #Python #AWS
Code: https://github.com/pluto-lang/pluto/tree/main/examples/rag-qa-bot-with-web (opens in a new tab)


构建带有 Web 界面的文档问答机器人

这里给大家介绍一种非常简单的构建文档问答机器人的方式,只需要 5 分钟就可以基于你的 GitHub 文档仓库创建一个专属的问答机器人,并且将其部署到 AWS 上(免费),让你的用户可以通过 Web 界面来提问。

Demo

简要介绍

首先,让我们快速了解一下这个文档问答机器人的工作原理和实现方式。

这个文档机器人的工作流程是:初始化时,先从存储文档的 GitHub 仓库上下载文档,然后通过 LangChain 调用 OpenAI 的 Embeddings 模型生成文档的向量,并保存到 AWS 的 S3 中,避免重复创建文档向量浪费 Token。当用户输入问题时,还是先通过 LangChain 生成问题的向量,然后通过 FAISS 向量数据库检索到相关的文档,最后通过 GPT-3.5 汇总生成答案。此外,这个文档问答机器人会在每天 UTC 0 点时自动更新文档向量。

构建这个文档问答机器人,我们采用了包括 LangChain、FastUI、Pluto 在内的一系列框架和工具,并最终在 AWS 上进行部署。其中,LangChian 用来实现主要的问答功能,通过它来调用 OpenAI 的 Embedding、GPT-3.5 等模型;FastUI 用来实现上图的 Web 界面;Pluto 则负责云资源的创建和配置,以及应用的发布,使用 Pluto,只需要在代码中创建几个变量就可以完成 AWS Lambda、S3 等资源的创建和配置。

开始上手

为方便大家快速上手,我已经将这个文档问答机器人制作成了 CodeSandbox 模板。只需点击下方链接就能打开 CodeSandbox 的在线 IDE,再点击右上角的 Fork,就可以将项目复制至你的账户下。然后,你就可以自由地修改代码,并且可以一键部署至 AWS。

Open in CodeSandbox (opens in a new tab)

接下来,我就来介绍如何一步步构建你的专属文档问答机器人。

准备 Token

开始之前,你需要准备几个关键的 Token,包括用于下载 GitHub 上的文档数据的 GitHub Token、调用 OpenAI 模型的 OpenAI API Key、以及用于应用部署的 AWS 凭证等。

修改基本配置

一旦进入开发环境,控制台会自动显示 Configure AWS Certificate 的标签页,在这里输入你的 AWS 证书信息,确保应用能够顺利部署至 AWS。你可以不填写 output format 字段,填写完其他必要信息后,如果一切正确,你可以在标签名旁边看到一个绿色的勾选标记 ✔️。

配置 AWS 证书

接下来,我们就需要修改机器人的配置了,打开 .env.local 文件,该文件包含了这个文档机器人的基本配置,包括文档所在的 GitHub 仓库,仓库分支,文档在仓库中的相对路径,OpenAI 的 API Key,GitHub 的 Token 等,你需要根据你的实际情况修改这些配置。

PROJECT_NAME = "Pluto" # 项目名称,会与 Web 页面的标题相关
REPO = "pluto-lang/website" # 存储文档的 GitHub 仓库
BRANCH = "main" # 仓库的分支
DOC_RELATIVE_PATH = "pages" # 文档在仓库中的相对路径
 
OPENAI_BASE_URL = "https://api.openai.com/v1" # OpenAI API 的基础 URL
OPENAI_API_KEY = "<replace_with_your_openai_api_key>" # OpenAI API Key
GITHUB_ACCESS_KEY = "<replace_with_your_github_access_key>" # GitHub Token

如果你想定制化你的机器人,比如修改机器人的回答风格,可以通过修改 app/main.py 代码文件中的 prompt 变量来实现。

一键部署

配置完成后,只需要点击终端图标,并从菜单中选择 Deploy,就可以将这个文档机器人部署到 AWS 上了,不需要你执行任何额外的步骤。部署可能需要 1 分钟左右,部署结束后,就会在控制台上显示部署的 URL,点击这个 URL 就可以访问这个文档机器人了!

Pluto 部署

注意,由于 AWS Lambda 冷启动和向量数据库构建的延迟,首次访问可能需耐心等待几秒至几十秒。

销毁

如果你想将应用程序下线,只需从菜单中点击 Destroy,在 AWS 创建的资源就会被完全删除。

Pluto 销毁

总结

这个文档问答机器人的实现非常简单,只需要修改几个配置,就可以部署到 AWS 上。

之所以能够如此轻松的实现,主要是因为过程中不需要关心云上资源的创建和配置,以及应用的部署,而这主要得益于 Pluto 的能力。Pluto 可以从代码中自动推导出应用依赖的资源,并且自动地创建和配置这些资源,让开发者可以专注于业务逻辑的实现。

如果你想了解更多 Pluto 的功能,欢迎访问 Pluto 的官方文档 (opens in a new tab)或者 GitHub 仓库 (opens in a new tab),如果你能点个 Star🌟 就更好了!也非常欢迎大家提 issue 和 PR。

更多资源