一种极其简单的搭建文档问答机器人的方式

24 天前
 Jianzs

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

首先看一下效果,你可以打开这个链接体验一下。

简要介绍

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

这个文档机器人的工作流程是:初始化时,先从存储文档的 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 。

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

准备 Token

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

修改基本配置

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

接下来,我们就需要修改机器人的配置了,打开 app/main.py 文件,在代码的第 25 行开始,随后的几行包含了这个文档机器人的基本配置,包括文档所在的 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

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

一键部署

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

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

销毁

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

总结

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

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

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

更多资源

1260 次点击
所在节点    分享创造
2 条回复
jaylong
23 天前
只能问一个问题接收一个回答吗?支不支持上下文和显示历史问答?
Jianzs
23 天前
@jaylong 这个示例比较简单,没做这些复杂的功能,不过是可以做的。

这是示例的源代码 https://github.com/pluto-lang/pluto/tree/main/examples/rag-qa-bot-with-web ,主要就是 LangChain + FastUI ,你可以尝试改改,或者加下我们社区,或者留个联系方式,等后面可以一起搞一搞。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1039411

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX