该存储库托管了支持RE:Inforce 2024代码与会话ID DAP341的示例代码。该存储库中的代码非常易于在会话期间优化可读性,并且不打算在生产环境中使用。
该存储库中代码的目的是证明检索增强发电(RAG)聊天机器人的功能核心,同时突出显示一些与生成AI工作负载相关的数据保护注意事项。
如果您想在生产中使用AWS部署带有AWS的RAG聊天机器人样式用例,请考虑以下选项:
该存储库包含一系列Python“脚本”,可以执行以演示一系列想法。脚本编号是因为依次执行时,他们讲述了一个有关抹布聊天机器人如何工作的故事,以及如何在基于Genai的工作负载中保护数据。但是,这些脚本都是独立的,并且不需要依次运行。
这里提供的一些Python脚本在运行之前需要修改。这些脚本在此处完全存储,就像在RE:Inforce演示文稿中所显示的以保持一致性。您必须使用#UPDATE_TO_RUN_YOURSELF注释必须更新脚本的实例。
运行Python示例脚本所需的AWS资源,例如本存储库的用户可以提供Amazon Kendra索引,示例数据等,但以下是有关如何创建这些资源的说明。
在Python脚本工作之前需要创建和引用的主要AWS资源是Amazon Kendra索引和随附的Kendra数据源,该数据源指向Amazon S3存储桶上的数据。请注意,Amazon Kendra指数的成本不高,并且在部署此解决方案之前应注意了解这些费用。
此存储库中提供的代码旨在互补,以在AWS上部署生成AI应用程序构建器。如果您在AWS上部署了生成AI应用程序构建器,然后使用启用“抹布”选项部署“文本”用例部署,则可以为您创建kendra index,如以下部分所示:
根据部署指南将生成AI应用程序构建器部署在AWS解决方案上。
在与数据保护有关的情况下,请考虑使用启用VPC选项部署解决方案,该选项通过利用VPC端点来最大程度地减少在公共Internet上流动的流量。
部署仪表板部署后,您将能够部署用例。
部署用例时,选择text选项。在Select knowledge base部分中,选择yes ,请选择Kendra作为知识库,并且,如果您尚未拥有Kendra索引,请选择no以“您有现有的Kendra索引?”为您创建一个。所有其他默认值都可以,但是如果需要/根据需要调整以适应您的需求。
一旦部署了生成AI应用程序构建器,您将拥有Amazon Kendra索引。现在,您需要将Kendra数据源添加到该索引。首先,创建或重复使用现有的Amazon S3存储桶以存储数据。将data目录的内容以及该存储库中的src/kendra-acl.json上传到该S3桶中,以使结果结构看起来像这样:
engineering/rootrunner3k-techspecs.txt
wiki/ecorobopotato.txt
kendra-acl.json
在AWS管理控制台中导航到您的Amazon Kendra索引,然后选择Add Data Sources选项。选择Amazon S3 connector选项。给数据源一个名称。创建一个IAM角色,或根据需要使用现有角色。在Configure sync settings中,请输入S3存储桶的位置,将kendra-acl.json文件设置在Access control list configuration file location设置,扩展Additional configuration ,然后将engineering和marketing添加为要索引的前缀。所有其他默认值都足以创建和部署您的Kendra数据源。创建数据源后,您必须至少启动数据源sync操作一次,并在运行任何Python脚本之前等待该同步完成。
在调用任何Amazon Bedrock型号之前,您必须启用模型访问。该存储库使用Claude 3十四行诗,因此至少必须启用此模型。
为了专门运行CloudWatch Python文件,您必须启用Amazon Bedrock模型调用日志记录,特别是使用Amazon CloudWatch日志目标。
作为此过程的一部分,您将创建一个CloudWatch日志组,必须在随附的Python脚本中更新。
要运行与基岩护栏有关的Python脚本,您必须创建一个基石护栏。为此,使用AWS管理控制台,请导航到Amazon Bedrock Service并选择“护栏”部分。选择Create guardrail 。给它一个名称,并使用默认值或您喜欢的任何选项进行设置。但是,请确保在Add sensitive information filters部分中添加Address PII类型,然后选择Mask作为护栏行为。这样可以确保您的护栏将复制该项目中旨在在Python脚本中演示的行为。
src目录中的Markdown文件,图像和Python代码文件旨在以其编号方案指定的顺序看到和执行。如下所示,是每个文件的解释,可帮助指导读者借助这些代码示例的演示文稿的意图。
给出这些代码段的重点,这是向您展示非常简单的Python代码,该代码是可读的,并演示了抹布在基本层面上的工作方式,同时还突出了Genai工作负载的数据保护注意事项。
图像用于介绍我们正在使用的数据的名义产品和组织。数据有意荒谬,因此LLM不会意外拥有与该名义产品或组织有关的任何培训数据。但是,由于此随附的存储库现在是开源的,因此LLM最终可能会使用此存储库作为培训数据源,这最终可能会破坏此假设!
简单地显示我们设置的包含源数据的Amazon S3存储桶的内容。它还突出了S3上此数据的加密类型,以强调静止数据加密数据的重要性。
打印出有关我们的亚马逊肯德拉索引的一些基本信息,以介绍肯德拉的概念,以及如何对我们的数据源进行语义搜索。
演示了一个针对我们的Kendra索引的简单retrieve API呼叫,该呼叫根据我们提出的问题检索上下文。
打电话给亚马逊基岩,并提出一个与我们概念性专有数据无关的问题。这旨在证明LLM如何能够回答有关公开可用事物的许多问题,因为LLM经常受到从开放互联网上刮除的大量数据进行培训。
呼叫床岩,并询问有关我们专有数据的问题。演示LLM如何无法回答有关专有数据的问题,而这些问题尚未属于其培训数据集的一部分。
首先称肯德拉(Kendra)从我们的专有数据中检索相关上下文,然后在亚马逊基岩中调用LLM时使用该上下文。该模式称为检索增强产生或抹布。
在呼叫Amazon Kendra的访问控制列表中添加。由于我们的“营销”小组不允许从Kendra访问技术规格文档,因此我们的答案不包括有关营销未被授权查看的内容的详细信息。这表明,在使用基于抹布的方法时,我们如何实现文档级授权。值得注意的是,如果您使用专有数据进行微调或继续预先培训以自定义LLM,则您将失去在文档级别进行细粒度授权的能力;您的用户要么可以访问该自定义模型,要么无法访问。
执行包含特定地址的破布查询。但是,也许我们不希望地址或其他类型的PII或敏感/有害内容包含在我们的聊天机器人中...
只需列出我们将在以下步骤中使用的重新处理的Amazon Bedrock护栏的一些属性即可。具体来说,我们看到我们的护栏编辑地址数据类型。
执行与09_RAG_ADDRESS.PY的基于抹布的调用,但在基岩的一部分中添加了基岩护栏。反过来,这从响应中编辑了特定地址PII数据。
列出了3个最近援引基岩的CloudTrail实例。这仅仅说明了CloudTrail如何用于审核Amazon Bedrock服务的使用情况。其他AWS服务还会生成CloudTrail事件,这些数据可用于审核和保护您的AWS资源。
列出3个最近的CloudWatch模型调用日志。这说明了如何将数据包含在CloudWatch模型调用日志中。因此,如果启用模型调用日志,则必须在保护数据源本身的相同级别的护理中保护它们。
运行Python脚本后,您将通过一些示例进行指导,这些示例为生成AI工作负载提供了数据保护注意事项。一些关键的外包是:
数据保护基础仍然适用。
生成的AI介绍了一些新的注意事项
有关更多信息,请参见贡献。
该图书馆已获得MIT-0许可证的许可。请参阅许可证文件。