本文将介绍如何使用Knowledge Bases for Amazon Bedrock开发一个RAG工具,Amazon Bedrock Knowledge Bases支持从S3存储桶中的多种文档获取数据,自动切片转换为文本块生成向量,并存储在向量数据中。因此业务代码只需要调用单个API,即可同时完成从Bedrock所集成的向量数据库中进行召回和大语言模型的内容生成,所以后续只需交由Web平台调用API,即可实现RAG能力。
01
创建 Bedrock Knowledge bases知识库
1. 开通大模型访问权限
如果之前没有使用过Bedrock,那么默认所有模型都是处于未开启状态,需要申请模型访问权限。申请模型操作权限的位置是在Bedrock服务的左侧菜单,建议申请Claude 3 Sonnet和Claude 3 Haiku等模型,可实现小效果和性价比的平衡。此外还要申请Amazon Titan Embeddings模型。如下截图。
2. 创建作为数据源的S3存储桶
创建S3存储桶时候,需要注意选择存储桶所在的区域要和Bedrock服务在同一个区域。例如Bedrock服务在美东1 (弗吉尼亚北部)(us-west-1),那么存储桶也创建在这个区域。在存储桶名称位置可根据需要任意输入,在存储桶类型(也就是使用场景)位置,选择【通用】,然后继续向下滚动页面。如下截图。
在【对象所有权】位置,选择ACL 禁用(推荐)选项。在【此存储桶的“屏蔽公共访问权限”设置】的选项中,选中第一项阻止所有公开访问。由此将确保整个存储桶是完全私有的,即便某个应用上传文件时候额外指定了Public ACL,也将被拒绝公开。以此从最高层面保护存储桶为私有。如下截图。
继续向下滚动页面。在默认加密的位置,选择第一项【使用 Amazon S3 托管密钥进行服务器端加密(SSE-S3)】也就是默认的加密算法(SSE-S3)。在【存储桶密钥】位置,选择启用。最后点击创建按钮完成创建。
存储桶创建完毕
现在向存储桶内上传文件,可上传PDF、Word等格式。支持的格式清单在下文同步知识库部分有介绍。
3. 创建Bedrock知识库(自动生成向量数据库)
进入Bedrock服务,在左侧菜单下找到知识库,在右侧界面点击创建知识库。如下截图。
在向导第一步,创建知识库向导会自动生成一个知识库名称,可按需修改。在IAM权限位置,选择创建和使用新的服务角色由Bedrock自动创建一个新的IAM角色用于知识库服务,其中会自动包含对应的Bedrock模型调用策略、S3存储桶访问策略、OpenSearch集群访问策略等。如果您要创建多个知识库,或者反复创建多次,请注意每次创建时候都选择自动生成一个新的IAM Role。这是因为多个知识库之前,他们使用的存储桶、OpenSearch集群是不一样的,因此如果您多个知识库使用一个IAM策略,那么会提示权限错误。因此建议创建新知识库时候都选择自动生成新的IAM策略。如下截图。
在向导第二步,数据来源名称位置向导自动生成了一个名称,可按需修改。在S3 URI,输入上一步创建的S3存储桶的名称。如下截图。
在向导第三步,选择向量嵌入模型位置,选择第二项Amazon Titan模型,至此向量维度是1536。然后向下滚动页面。如下截图。
在向量数据库选择的位置,选择左侧的【快速创建新的向量存储 - 推荐】,也就是由Bedrock知识库向导为本知识库创建一个新的OpenSearch Serverless集群。这里还需要注意,默认创建的集群是成本优化型适合非关键业务,如果是关键业务,需要选择下方的选项【启用冗余(活动副本)- 可选】来创建具有冗余能力的OpenSearch Serverless集群。然后点击下一步继续。如下截图。
在向导第四步,Review之前的配置,不需要修改,直接点击创建。如下截图。
向导会卡在这个位置转圈圈。这是因为在后台创建OpenSearch Serverless集群。如果将页面向上滑动到最上方,可以看到有一个蓝色的条幅提示创建OpenSearch中。
此时请不要离开当前页面,如果电脑休眠、网络中断、或者浏览器离开了当前页面,那么向导将只完成OpenSearch Serverless的创建,而不会完成整个Bedrock知识库的创建。如果发生了这种情况,您只能先删除掉OpenSearch Serverless,然后重新运行一遍Bedrock知识库创建向导。本步骤需要大概6分钟时间。因此请保持耐心等待本页面完成。
4. 完成Knowledge bases构建
当创建向导完成了Bedrock知识库的创建后,需要将S3存储桶内的数据加载到Bedrock服务中,通过向量模型生成向量,写入数据库。本步骤可通过在页面上按同步按钮进行数据加载。在创建知识库成功后,页面多个地方都提示需要进行数据同步。如下截图。
当数据同步进行中时候,Bedrock知识库服务的下方数据源部分,就会提示正在同步中。同步完成后以下功能都能够正常使用。如下截图。
02
搭建RAG问答机器人
1. 部署ChatGPT Next Web
使用ChatGPT Next Web作为RAG问答机器人,在搭建之前本机需要事先配置React.js 环境。
首先从github上克隆ChatGPT Next Web的代码,在git客户端里使用命令。
git clone: https://github.com/ChatGPTNextWeb/ChatGPT-Next-Web.git
ChatGPT Next Web使用React编写,无需额外安装数据库及组件,通过yarn命令就可以启动,验证Web是否能够正常启动。
cd ChatGPT-Next-Web
yarn install && yarn dev
访问http://localhost:3000,可以看到如下截图的操作界面,这说明已经成功在本地运行起 ChatGPT Next Web应用。
2. ChatGPT Next Web改造
ChatGPT Next Web是个一键部署的跨平台私人 ChatGPT 应用, 支持 GPT3, GPT4 & Gemini Pro 等模型,它自身提供通过配置大模型SaaS版API的key来实现,这与Bedrock提供的API方式不同,因此需要针对这块的代码进行改造。
至此已实现了Knowledge bases for Amazon Bedrock的RAG工具构建,后续只需运行此项目,就可以通过ChatGPT Next Web和Bedrock进行对话了。