使用LangChain、Amazon SageMaker JumpStart和MongoDB Atlas语义搜索来增强检索生成

使用LangChain、Amazon SageMaker JumpStart和MongoDB Atlas进行语义搜索的强化检索生成

生成式人工智能模型有潜力革新企业运营,但企业必须仔细考虑如何利用其力量,同时克服保护数据和确保AI生成内容质量等挑战。

检索增强生成(RAG)框架利用来自多个来源(如文档存储库、数据库或API)的外部数据增强提示,使基本模型对特定领域的任务产生效果。本文介绍了RAG模型的功能,并凸显了MongoDB Atlas在其矢量搜索功能方面的变革潜力。

MongoDB Atlas是一套集成的数据服务,加速和简化数据驱动应用程序的开发。其矢量数据存储无缝集成于操作性数据存储,消除了使用独立数据库的需要。这种集成使通过矢量搜索实现强大的语义搜索功能成为可能,矢量搜索是一种快速构建语义搜索和AI驱动应用程序的方式。

Amazon SageMaker使企业能够构建、训练和部署机器学习(ML)模型。Amazon SageMaker JumpStart提供预训练模型和数据,帮助您开始使用ML。您可以通过只需点击几下即可访问、自定义和部署预训练模型和数据的SageMaker JumpStart登录页面在Amazon SageMaker Studio中实现。

Amazon Lex是一个对话界面,可以帮助企业创建具有自然、逼真互动的聊天机器人和语音机器人。通过将Amazon Lex与生成式人工智能集成,企业可以创建一个整体生态系统,使用户输入无缝过渡为连贯且与上下文相关的回应。

解决方案概述

以下图示说明该解决方案的架构。

Solution overview

在接下来的几个部分中,我们将逐步介绍实施此解决方案及其组件的步骤。

设置MongoDB集群

要创建一个免费的MongoDB Atlas集群,请按创建集群中的说明进行操作。设置数据库访问和网络访问

部署SageMaker嵌入模型

您可以在SageMaker JumpStart Models, notebooks, solutions页面上选择嵌入模型(ALL MiniLM L6 v2)。

SageMaker JumpStart Models, notebooks, solutions

选择部署来部署模型。

验证模型是否成功部署并验证是否创建了终端节点。

模型成功部署

向量嵌入

向量嵌入是将文本或图像转换为向量表示的过程。使用以下代码,我们可以使用SageMaker JumpStart生成向量嵌入,并使用创建的向量更新每个文档的集合:

payload = {"text_inputs": [document[field_name_to_be_vectorized]]}query_response = query_endpoint_with_json_payload(json.dumps(payload).encode('utf-8'))embeddings = parse_response_multiple_texts(query_response)# update the documentupdate = {'$set': {vector_field_name :  embeddings[0]}}collection.update_one(query, update)

上述代码展示了如何更新集合中的单个对象。要更新所有对象,请按照说明进行操作。

MongoDB向量数据存储

MongoDB Atlas向量搜索是一项新功能,允许您在MongoDB中存储和搜索向量数据。向量数据是一种表示高维空间中的点的数据类型。这种类型的数据通常在机器学习和人工智能应用中使用。MongoDB Atlas向量搜索使用一种称为k近邻(k-NN)的技术来搜索相似的向量。k-NN通过找到与给定向量最相似的k个向量来工作。最相似的向量是与给定向量在欧几里德距离方面最接近的向量。

将向量数据存储在操作数据旁边可以通过减少在不同存储系统之间移动数据的需求来提高性能。这对于需要实时访问向量数据的应用程序尤其有益。

创建向量搜索索引

下一步是在前一步创建的向量字段上创建一个MongoDB向量搜索索引。MongoDB使用knnVector类型来索引向量嵌入。向量字段应该被表示为数字数组(仅限BSON int32、int64或double数据类型)。

有关knnVector类型的限制的更多信息,请参阅Review knnVector Type Limitations

以下代码是样本索引定义:

{  "mappings": {    "dynamic": true,    "fields": {      "egVector": {        "dimensions": 384,        "similarity": "euclidean",        "type": "knnVector"      }    }  }}

请注意,维度必须与您的嵌入模型维度匹配。

查询向量数据存储

您可以使用向量搜索聚合管道来查询向量数据存储。它使用向量搜索索引并在向量数据存储上执行语义搜索

以下代码是样本搜索定义:

{  $search: {    "index": "<索引名称>", // 可选,默认为 "default"    "knnBeta": {      "vector": [<数字数组>],      "path": "<要搜索的字段>",      "filter": {<筛选规则>},      "k": <数字>,      "score": {<选项>}    }  }}

部署SageMaker大型语言模型

SageMaker JumpStart基础模型是预训练的大型语言模型(LLM),用于解决各种自然语言处理(NLP)任务,如文本摘要、问题回答和自然语言推理。它们以多种尺寸和配置提供。在这个解决方案中,我们使用Hugging Face FLAN-T5-XL模型。

在SageMaker JumpStart中搜索FLAN-T5-XL模型。

搜索FLAN-T5-XL

选择部署以设置FLAN-T5-XL模型。

部署

验证模型成功部署并且端点处于活动状态。

创建Amazon Lex机器人

按照以下步骤创建Amazon Lex机器人:

  1. 在Amazon Lex控制台上,选择创建机器人
创建机器人
  1. 输入机器人名称
  2. 对于运行角色,选择使用基本Amazon Lex权限创建角色
  3. 指定语言设置,然后选择完成
  4. NewIntent UI中添加一个示例语句,并选择保存意图
  5. 转到默认情况下为您创建的FallbackIntent并切换Active执行部分中。切换Active
  6. 选择构建,构建成功后选择测试构建和测试
  7. 在测试之前,选择齿轮图标。
  8. 指定将与MongoDB Atlas和LLM交互以提供响应的AWS Lambda函数。要创建lambda函数,请按照这些步骤进行操作。9.指定AWS Lambda函数
  9. 现在您可以与LLM进行交互了。

清理

为了清理资源,请按照以下步骤完成:

  1. 删除Amazon Lex机器人。
  2. 删除Lambda函数。
  3. 删除LLM SageMaker端点。
  4. 删除嵌入模型SageMaker端点。
  5. 删除MongoDB Atlas集群。

总结

在本文中,我们展示了如何创建一个简单的机器人,它使用了MongoDB Atlas语义搜索,并集成了来自SageMaker JumpStart的模型。这个机器人允许您在SageMaker Jumpstart中快速原型化用户与不同LLMs的交互,同时与MongoDB Atlas中的上下文配对。

像往常一样,AWS欢迎您提供反馈。请在评论部分留下您的反馈和问题。