使用 Elastic 和 Amazon Bedrock 制作混合地理空间 RAG 应用程序
作者:来自 Elastic Udayasimha Theepireddy (Uday), Srinivas Pendyala, Ayan Ray
借助 Elasticsearch 及其向量数据库,你可以构建可配置的搜索和可信的生成式 AI (GenAI) 体验,这些体验可快速从原型扩展到生产。主要功能包括:
- 内置对地理空间数据的支持,可快速查询基于位置的信息
- 向量数据库功能,用于存储、管理和查询向量嵌入
传统词汇搜索与地理空间和矢量搜索功能的集成
Elastic 将这些功能结合在一个数据平台(Elastic Search AI 平台)中,从而脱颖而出。这种三重集成促进了现代生成式 AI 用例,并通过简化企业的数据管理为客户提供了巨大的价值。
在这篇博文中,我们将探讨如何使用 Elasticsearch、Amazon Bedrock 和 LangChain 构建一个强大的检索增强生成 (retrieval augmented generation - RAG) 系统,该系统结合了地理空间数据。这种混合方法结合了词汇搜索、地理空间查询和向量相似性搜索,以创建一个能够提供个性化房产推荐的智能房地产助手。
更多阅读 “使用 Elasticsearch 中的地理语义搜索增强推荐功能”。
技术概述
AI 与地理空间数据的集成代表了信息检索和决策支持系统的重大进步。传统搜索引擎经常难以处理基于位置的查询,但通过将大型语言模型 (large language models- LLMs) 的功能与专门的地理空间数据库相结合,我们可以创建更智能、更具有上下文感知能力的应用程序。
Amazon Bedrock 为开发人员提供了选择权,他们可以从领先的 AI 提供商中选择任何行业领先的基础模型 (FM),并提供简化、统一的 API,以便开发人员可以在企业中构建和扩展生成式 AI 应用程序。
Elastic 可以以 Elastic 的速度和规模存储、运行查询和执行地理空间分析。Elastic 还是一个可用于生产的十亿级向量数据库。这使用户能够在 Elastic 中创建、存储和搜索向量嵌入。
这也带来了 Elastic 的一个独特功能,你可以将传统的词汇搜索与地理空间查询功能相结合,并添加到这些向量相似性搜索中,以制作创新的生成式 AI 应用程序。
为了从头开始构建应用程序,让我们看看 RAG。
检索增强生成 - Retrieval augmented generation
RAG 是一种强大的技术,它通过集成外部知识源来增强 LLM。它提高了 LLM 输出的准确性、相关性和可信度,而无需重新训练模型。
RAG 还通过整合来自私有或专有数据源的信息来增强文本生成。该技术将搜索大型数据集或知识库的检索模型与 LLM 等生成模型相结合,以生成可读的文本响应。
应用程序架构
此参考架构解释了如何使用 Elasticsearch、AWS Location Service、AWS Data Exchange 和 Amazon Bedrock 为房地产行业构建示例对话式 AI 助手。
- 步骤 1:用户提交有关某个区域房产的查询 — “Find me townhomes with a swimming pool within 2 miles of 33 Union Sq, Cupertino, CA.”
- 步骤 2:对话式 AI 助手应用程序通过 Amazon API Gateway 调用 REST API。
- 步骤 3:REST API 调用 AWS Lambda 函数转发用户提示。
- 步骤 4、5:AWS Lambda 函数通过 Amazon Bedrock 调用 Anthropic Claude 3 Sonnet 来提取地址、距离和房产类型等实体。它还生成关键字的嵌入。
- 步骤 6、7:AWS Lambda 函数将地址传递给 AWS Location Service 以获取相应的地理坐标(地理编码)。
- 步骤 8、9:AWS Lambda 函数对 Elasticsearch 进行混合地理空间调用(关键字 kNN + 地理距离),以检索相关属性作为上下文。
- 步骤 10、11:检索到的数据会使用 AWS Data Exchange 中托管的数据源中的位置的其他相关属性进行增强。
- 步骤 12、13:检索和增强的数据会作为上下文传递给 Anthropic Claude 3 Sonnet 以生成摘要。
- 步骤 14、15、16:摘要会传回给 AI 助手和用户。
- 步骤 17:(可选)还会使用 Amazon SES 通过电子邮件将详细信息发送给用户。
实施细节
用例
我们将开发一个生成式 AI 应用程序,以增强用户在房地产搜索中的体验。此应用程序具有一个对话式 AI 助手,可回答有关我们数据库中的房产列表的问题。用户可以使用自然语言与助手互动。
例如,用户可能会问:“Find a single family home near Frisco, TX within 5 miles with a backyard swimming pool.”
命名实体识别 (Named entity recognition - NER)
NER 或实体提取是一种自然语言处理技术,可识别和分类文本中的命名实体。NER 算法从非结构化文本中检测和提取特定实体,例如人名、组织、位置、日期和自定义类别。
在我们的案例中,我们将提取用户正在寻找房产类型的搜索房产位置(例如:San Francisco),例如 “Single family home” 或 “Condominium”;可以找到这些房产的距离;以及任何其他房产特征,例如后院的游泳池。
我们创建了一个带有单次提示技术的提示模板,为 LLM 提供了一个如何从用户输入的提示中提取实体的示例。以下是我们房地产物业列表用例的示例代码片段。
步骤
- 创建用户提示模板(prompt template)并将最终用户提示作为输入变量传递。
- 接下来,调用 Amazon Bedrock 服务并将上述推理传递给你选择的 LLM。在本例中,我们使用 Anthropic Claude Sonnet 3 作为示例。
- 对于给定的最终用户提示作为输入,命名实体识别的输出将如下所示:
Input user prompt
“Find me townhomes near Frisco, TX within 5 miles with a community swimming pool access”
输出(提取的实体):
Programming Language: JSON
{
"search_property_type": "Townhouse",
"search_property_address": "Frisco, TX",
"search_property_radius": "5mi",
"search_property_features": "community swimming pool access"
}
streamlit 应用程序在用户界面中反映了这一点:
使用 Amazon Location Service 进行地理编码
地理编码是将街道地址等地址转换为地理坐标(纬度和经度)的过程,可用于在地图上放置标记或识别空间数据中的位置。它有助于将物理位置(例如 “1600 Pennsylvania Ave NW, Washington, DC”)映射到其相应的地理坐标,从而支持 GPS 导航或任何基于位置的服务等应用程序。
在我们的例子中,地理编码的目的是将从用户提示中提取的地理位置转换为经度和纬度,以便可以使用这些坐标在 Elastic 中搜索房地产数据。
Amazon Location Service 可以在地理编码过程中提供帮助。Amazon Location Service 是一种地图服务,可让你向应用程序添加地理空间数据和位置功能,包括动态和静态地图、地点搜索和地理编码、路线规划以及设备跟踪和地理围栏功能。
以下是来自 Streamlit git repo 的用于使用 Amazon Location Service 进行地理编码的示例代码。地理编码过程生成的输出在 Streamlit 应用程序中将如下所示:
我们从上述地理编码过程中获得的一个重要输出细节是经度和纬度坐标,它们可用于在 Elastic 中执行地理空间数据搜索。
Elastic 中的混合地理空间查询
此应用程序的主要功能是 Elastic 能够执行混合地理空间搜索。此搜索结合了:
- 词汇搜索
- 地理空间搜索
- 向量相似性搜索
Elastic 在单个查询中执行所有这些搜索类型,从而创建强大而高效的搜索功能。以下是代码片段。你也可以在 GitHub 存储库中看到它。
请注意上面的代码:
- 在 #1 中,我们执行传统的基于关键字的词汇搜索。例如,我们想要在 Elastic 中搜索所有具有 propertyType =“Townhome” 属性的列表。
- 在 #2 中,我们对字段 propertyFeatures_v 执行语义搜索,该字段是一个向量字段,具有文本等效 propertyFeatures 的嵌入。
- 在 #3 中,我们使用地理空间坐标(geo_coded_lat 和 geo_coded_long)过滤所有数据。换句话说,对于我们位于德克萨斯州弗里斯科的位置,查找五英里内的所有房地产列表。
以下是 streamlit 应用程序在用户界面中显示输出的方式。
运行地理空间 RAG
上一个查询中从 Elastic 找到的房地产属性数据现在作为附加上下文通过 Amazon Bedrock 传递给 LLM 以执行 RAG,如下所示。
代码中需要注意的几点:
- 请注意我们如何将执行 Elastic 的混合地理空间查询得到的结果作为上下文传递给 RAG。
- 同样,我们使用提示模板(prompt template),我们将提供 Elastic 的混合地理空间查询结果作为上下文。
- 在这里,我们强制 LLM 仅在 Elastic 查询中找到的数据上下文中专门回答。
输出将是 LLM 在作为 RAG 管道的一部分提供的知识上下文中专门回答的精确建议。以下是 Streamlit 应用程序用户界面向最终用户显示为完整响应的示例建议。
此外,streamlit 应用程序还在地图上显示 Elastic 的地理空间结果,让人们通过图形了解这些房地产的位置。
Streamlit 应用程序
所有这些概念都以 streamlit 应用程序的形式汇集在一起,该应用程序展示了如何使用 Elasticsearch、Amazon Bedrock、Anthropic Claude 3 和 Langchain 构建使用 Elastic 地理空间功能的混合地理空间 RAG 解决方案。
查看 GitHub 存储库和设置说明了解更多信息。
使用 AWS Data Exchange 进行数据增强
AWS Data Exchange 是 AWS 提供的一项服务,可让你在 AWS 云中查找、订阅和使用第三方数据集。你可以使用来自 AWS Data Exchange 的其他数据进一步增强和丰富你的数据集。例如,如果你想使用其他兴趣点数据(例如医院、商场或最近的药店)进一步丰富你的房地产地理空间数据,则可以使用 AWS Data Exchange。
探索和整合资源
Elastic 和 Amazon Bedrock 使用企业数据简化了复杂 RAG 解决方案的开发。这种组合提供:
- Elastic 的混合地理空间语义搜索功能
- 通过 Amazon Bedrock 访问各种基础模型
- 轻松构建和扩展生成式 AI 应用程序
在这篇文章中,我们:
- 概述了混合地理空间 RAG 解决方案的基本构建块
- 提供了实施的代码示例
- 共享了一个 GitHub 存储库以供动手实验
我们鼓励你探索这些资源并将其集成到你自己的项目中。
本文中描述的任何特性或功能的发布和时间均由 Elastic 自行决定。任何当前不可用的特性或功能可能无法按时交付或根本无法交付。
在这篇博文中,我们可能使用或提及了第三方生成式 AI 工具,这些工具由其各自的所有者拥有和运营。Elastic 无法控制第三方工具,我们对其内容、操作或使用不承担任何责任,也不对你使用此类工具可能产生的任何损失或损害承担任何责任。在使用 AI 工具处理个人、敏感或机密信息时,请谨慎行事。你提交的任何数据都可能用于 AI 培训或其他目的。我们无法保证你提供的信息将得到安全或保密。在使用任何生成式 AI 工具之前,你应该熟悉其隐私惯例和使用条款。
Elastic、Elasticsearch、ESRE、Elasticsearch Relevance Engine 和相关标志是 Elasticsearch N.V. 在美国和其他国家/地区的商标、徽标或注册商标。所有其他公司和产品名称均为其各自所有者的商标、徽标或注册商标。
原文:Crafting a hybrid geospatial RAG application with Elastic and Amazon Bedrock | Elastic Blog