使用 LangChain 和 Amazon DocumentDB 的向量搜索构建生成式 AI 聊天机
在Amazon DocumentDB上使用LangChain和向量搜索构建生成AI聊天机器人
关键要点
使用Amazon DocumentDB及其向量搜索功能,结合LangChain构建聊天机器人。向量搜索使得机器学习和生成AI应用的构建更加简单高效。利用提升的生成能力和信息检索技巧,增强用户体验。由Andrew Chen、Cody Allen和Inderpreet Singh于2024年5月20日发布于Amazon Bedrock、Amazon DocumentDB等平台。
Amazon DocumentDB与MongoDB兼容为客户在多个领域构建现代应用程序提供了诸多优势,包括医疗、游戏、和金融。作为一个完全托管的文档数据库,它通过灵活性、可扩展性、高性能和先进功能改善用户体验。采用Amazon DocumentDB支持的JSON数据模型的企业可以实现更快的应用开发和更快的读取速度,以支持半结构化数据。
根据一些估算,非结构化数据占企业所有新数据的80至90,并以比结构化数据快得多的速度增长。这一趋势在生成AI的推动下加速发展AWS客户越来越多地询问如何利用这一点并将其应用于他们丰富的数据中。许多人希望使用向量数据库引擎实施推荐引擎、搜索丰富媒介,或通过匹配查询的上下文和语义来检索与客户查询更相关的文档。
在最近发布的功能之前,例如支持Amazon DocumentDB上的向量搜索,企业需要通过将数据从托管数据库服务迁移到向量数据库引擎或服务,来集成向量搜索能力,这导致了架构成本和复杂性的增加。这种架构上的变化需要进一步的代码更改,因为应用程序需要在与文档不同的位置存储和检索其嵌入。
在现有的Amazon DocumentDB集群中启用语义搜索能力,使现代机器学习ML和生成人工智能AI应用的构建变得简单。您可以使用Amazon DocumentDB上的向量搜索与AWS ML服务,例如Amazon Bedrock和Amazon SageMaker,以及第三方服务,如OpenAI、Hugging Face和LangChain结合使用。您现在可以在原始文档中存储向量。此功能得到进一步增强,支持HNSW索引,使得低延迟地运行向量相似性搜索并生成高度相关的结果成为可能。
在这篇文章中,我们将展示如何创建一个示例聊天机器人,它可以通过LangChain查询您的大型语言模型LLM,前提是您已成功将嵌入加载到Amazon DocumentDB中。
强化生成与LLMs结合的检索能力
您可以使用强化生成RAG从基础模型外检索数据,通过在提示中添加相关检索到的数据增强请求。这在构建能够通过智能代理提供对用户的对话体验的聊天机器人时非常有用。这提供了一个直观的界面,因为它从企业知识库或内容中检索与用户请求最相关的信息,将其与用户请求作为上下文捆绑,并发送到LLM以获取生成的AI响应。
鲨鱼加速器官方网站在这个例子中,我们使用LangChain的PyPDFDirectoryLoader来摄取Amazon DocumentDB开发者指南的PDF版本。我们使用这个来创建一个聊天机器人,可以用来询问关于服务的特点、使用方法和最佳实践。完整的解决方案可以在amazondocumentdbsamples GitHub仓库中找到。
在将数据加载到Amazon DocumentDB之前,我们在集合上创建HNSW索引:
pythoncollectioncreateindex([(vectorContentvector)] vectorOptions= { type hnsw similarity euclidean dimensions 1536 m 16 efConstruction 64} name=hnsw)
与IVFFlat不同,HNSW没有涉及训练步骤,允许在没有初始数据加载的情况下生成索引。
使用LangChain的RecursiveCharacterTextSplitter将开发者指南分割成多个块后,我们使用Amazon Titan Embeddings G1 文本模型amazontitanembedtextv1来创建嵌入:
pythonembeddings = BedrockEmbeddings(modelid= amazontitanembedtextv1 client=bedrockclient)INDEXNAME = hnswvectorstore = DocumentDBVectorSearchfromdocuments( documents=docs embedding=embeddings collection=collection indexname=INDEXNAME)
最后,我们将Anthropic Claude for Amazon Bedrock初始化为我们的推理代理,以将用户请求的任务分解为多个步骤:
pythonllm = BedrockChat(modelid=anthropicclaude3sonnet20240229v10 client=bedrockclient)
为了测试解决方案,我们创建了一个prompt模板,并使用RetrievalQA链从HNSW索引中收集与问题相关的文档。这些文档用于创建对我们问题的独特回答,如下图所示:

您可以查看完整的Notebook,了解如何使用RAG,它接受查询、聊天历史和上下文作为参数,以及如何使用Amazon DocumentDB中的聚合管道来执行向量搜索。
总结
Amazon DocumentDB的向量搜索结合了基于JSON的文档数据库的灵活性和丰富查询能力,以及向量搜索的强大功能。使用此功能与强大的框架,如LangChain、文本嵌入,如Amazon Titan Text Embeddings,以及通过Amazon Bedrock使用的基础模型,如Anthropic的Claude 3,可以构建机器学习和生成AI解决方案,例如语义搜索体验、产品推荐、个性化、聊天机器人、欺诈检测和异常检测。
要开始使用现有工作负载中的向量搜索,请访问amazondocumentdbsamples GitHub仓库,下载本文讨论的示例。
作者介绍
Andrew Chen 是一位Edtech解决方案架构师,对数据分析、机器学习和基础设施虚拟化充满热情。Andrew在管理咨询方面有丰富的经验,曾作为技术负责人参与多个云迁移项目。在闲暇时间,他喜欢钓鱼、徒步旅行、皮划艇,并关注金融市场。
Cody Allen 是德克萨斯州的首席DocumentDB解决方案架构师。他热衷于与客户并肩工作,解决复杂问题,并通过指导和知识传递支持团队成员。他在B2B SaaS提供商、物料和物流供应商、美国空军及其他国内外政府机构的系统、软件和基础设施的部署与管理方面积累了丰富的经验。
Inderpreet Singh 是Amazon DocumentDB的高级产品经理技术。拥有超过12年的业务咨询经验,Inderpreet的目标是将其广泛的商业背景与尖端技术结合,塑造数据库的未来。他持有IE商学院的MBA学位和麻省理工学院的硕士学位。在闲暇时,Inderpreet喜欢学习新语言、教学和股票交易。
发表评论