使用 LangChain、Amazon

使用 LangChain、Amazon SageMaker JumpStart 和 MongoDB Atlas 进行增强检索生成

_作者:Igor Alekseev 和 Babu Srinivasan,2023 年 11 月 17 日于[高级 (300)](https://aws.amazon.com/blogs/machine-learning/category/learning- levels/advanced-300/ "查看所有高级(300)帖子"), , , _


文章重点

  • 生成模型有潜力改变企业运营,但需考虑数据安全与AI内容质量。
  • RAG(增强检索生成)框架通过外部数据提高模型表现,MongoDB Atlas的向量搜索特性增强了这一能力。
  • 本文介绍如何利用SageMaker和MongoDB Atlas结合生成强大的语义搜索和AI应用。

生成式 AI 模型有可能彻底改变企业的运营模式,但公司需谨慎考虑如何利用其潜力,同时克服诸如数据保护和确保 AI 生成内容质量等挑战。

增强检索生成(RAG) 框架通过外部数据丰富提示,来源于文档库、数据库或 API,使得基础模型在特定领域任务中更为有效。本文展示了 RAG模型的能力,并强调了 MongoDB Atlas 及其向量搜索功能的变革潜力。

是一套集成的数据服务,旨在加速并简化数据驱动应用的开发。MongoDB Atlas向量搜索与操作性数据存储无缝集成,消除了对单独数据库的需求。这种集成使得通过 实现强大的语义搜索成为可能,这是一种快速构建语义搜索和 AI 驱动应用的方法。

使企业能够构建、训练和部署机器学习 (ML) 模型。 提供预训练模型和数据,帮助快速入门机器学习。你可以通过 的 SageMaker JumpStart 登录页面查看、定制和部署这些预训练模型与数据,仅需几次点击。

是一种对话接口,帮助企业创建能够进行自然、高度仿真的交互的聊天机器人和语音助手。通过将 Amazon Lex 与生成式 AI整合,企业可以创建一个全面的生态系统,让用户输入无缝转化为连贯且与上下文相关的响应。

解决方案概述

下图展示了解决方案架构。

删除)

接下来,我们将逐步讲解实施此解决方案及其组件的步骤。

设置 MongoDB 集群

要创建免费版 MongoDB Atlas 集群,请按照

的说明进行操作。设置数据库 和网络 。

部署 SageMaker 嵌入模型

你可以在 SageMaker JumpStart 模型、笔记本、解决方案 页面选择嵌入模型(ALL MiniLM L6 v2)。

![SageMaker JumpStart删除)

选择 部署 以部署该模型。

确认模型成功部署,并检查端点是否已创建。

删除)

向量嵌入

是将文本或图像转换为向量表示的过程。以下代码可与 SageMaker JumpStart一起生成向量嵌入,并将创建的向量更新到每个文档中:

query_response =
query_endpoint_with_json_payload(json.dumps(payload).encode('utf-8'))
embeddings = parse_response_multiple_texts(query_response)

# 更新文档

update = {'$set': {vector_field_name: embeddings[0]}}
collection.update_one(query, update) ```

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

## MongoDB Atlas 向量搜索

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

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

## 创建向量搜索索引

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

有关 `knnVector` 类型限制的更多信息,请参阅 。

以下代码是一个示例索引定义:

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

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

## 查询向量数据存储

你可以使用 
查询向量数据存储。该管道使用向量搜索索引进行语义搜索。

以下代码是一个示例搜索定义:

`json { $search: { "index": "<index name>", // 可选,默认为 "default" "knnBeta": {
"vector": 
是预训练的大型语言模型(LLM),用于解决各种自然语言处理(NLP)任务,如文本摘要、问答和自然语言推理。这些模型有多种尺寸和配置可供选择。在此解决方案中,我们使用
 的 FLAN-T5-XL 模型。

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

![搜索
删除)

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

删除)

检查模型是否成功部署并且端点处于活动状态。

删除)

## 创建 Amazon Lex 机器人

要创建 Amazon Lex 机器人,请完成以下步骤:

  1. 在 Amazon Lex 控制台中选择 **创建机器人** 。

删除)

  1. 输入 **机器人名称** 。
  2. 在 **运行角色** 中,选择 **创建带有基本Amazon Lex 权限的角色** 。  
删除)

  3. 指定语言设置,然后选择 **完成** 。  
删除)

  4. 在 `NewIntent` 界面中添加示例发言,并选择 **保存意图** 。  
删除)

  5. 转到默认创建的 `FallbackIntent`,在 **实现** 部分切换 **活动** 。  
删除)

  6. 选择 **构建** ,并在构建成功后选择 **测试** 。  
删除)

  7. 测试前,选择设置图标。  
删除)

  8. 指定将与 MongoDB Atlas 和 LLM 交互的  函数。要创建 Lambda 函数,请遵循 。  
![指定 AWS Lambda删除)

  9. 现在你可以与 LLM 进行互动。

## 清理

要清理资源,请完成以下步骤:

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

## 结论

在本文中,我们展示了如何创建一个简单的机器人,该机器人使用 MongoDB Atlas 向量搜索并与 SageMaker JumpStart的模型整合。这个机器人使你能够快速构建与不同 LLM 互动的原型,结合来自 MongoDB Atlas 的上下文。

如往常一样,我们欢迎 AWS 的反馈。请在评论区留下你的反馈和问题。

* * *

### 关于作者

![Igor删除)

**Igor Alekseev** 是 AWS 数据与分析领域的高级合作伙伴解决方案架构师。Igor在此角色中与战略合作伙伴合作,帮助他们构建复杂的、针对
AWS 的优化架构。在加入 AWS 之前,作为数据/解决方案架构师,他实施了多个大数据领域的项目,包括几个 Hadoop生态系统的数据湖。作为数据工程师,他参与了将 AI/ML 应用于欺诈检测和办公自动化的工作。

![Babu删除)
**Babu Srinivasan** 是 MongoDB 的高级合作伙伴解决方案架构师。在他当前的角色中,他与 AWS 合作构建 AWS 和
MongoDB解决方案的技术集成和参考架构。他在数据库和云技术方面拥有超过二十年的经验,热衷于为客户提供技术解决方案,与多个全球系统集成商(GSI)跨多个地区合作。

* * *

加载评论…

Leave a Reply

Required fields are marked *