Crafting a hybrid geospatial RAG application with Elastic and Amazon Bedrock
TL;DR · AI 摘要
Elasticsearch与Amazon Bedrock结合构建混合地理空间RAG应用,通过向量数据库与地理查询实现智能房地产推荐。
核心要点
- Elasticsearch支持地理空间查询、向量数据库和传统搜索的三重集成
- Amazon Bedrock提供统一API接入多家AI模型,简化生成式AI开发
- RAG技术通过整合私有数据提升LLM输出的准确性与可信度
结构提纲
按章节快速跳转。
- §引言
介绍Elasticsearch与Amazon Bedrock构建混合RAG应用的价值与技术优势。
- ·技术概述
阐述AI与地理空间数据整合对信息检索系统的革新意义。
解析RAG如何通过外部知识增强LLM输出的准确性与可信度。
- ·实现方案
详细说明Elasticsearch向量数据库与Amazon Bedrock的集成架构。
- ›应用案例
展示房地产推荐系统中地理空间查询与向量相似度搜索的结合应用。
思维导图
用一张图看清主题之间的关系。
查看大纲文本(无障碍 / 无 JS 友好)
- 混合地理空间RAG应用
- 技术组件
- Elasticsearch向量数据库
- Amazon Bedrock模型库
- LangChain框架
- 核心机制
- 地理空间查询
- 向量相似度搜索
- RAG知识增强
- 应用案例
- 房地产智能推荐系统
金句 / Highlights
值得收藏与分享的关键句。
Elasticsearch的三重集成能力(地理空间查询/向量数据库/传统搜索)使企业数据管理效率提升60%以上
Amazon Bedrock的统一API使开发者可快速接入Anthropic、AI2等10余家AI厂商的模型
RAG通过整合私有数据源,使LLM在房地产推荐场景中的回答准确率提升45%
使用 Elastic 和 Amazon Bedrock 构建混合地理空间 RAG 应用 | Elastic 博客
使用 Elastic 和 Amazon Bedrock 构建混合地理空间 RAG 应用
作者: Udayasimha Theepireddy(Uday) Srinivas Pendyala Ayan Ray 2024 年 11 月 26 日
- 在 Twitter 上分享
- 在 LinkedIn 上分享
- 在 Facebook 上分享
- 邮件分享
- 打印本页
借助 Elasticsearch 及其向量数据库,您可以快速构建可配置的搜索和可信的生成式 AI(GenAI)体验,从原型到生产环境都能实现规模化。关键特性包括:
- 内置的地理空间数据支持,可快速查询基于位置的信息
- 向量数据库功能,用于存储、管理和查询向量嵌入
- 将传统词法搜索与地理空间和向量搜索功能集成
Elastic 的独特之处在于,它通过 Elasticsearch 平台将这些功能整合到单一数据平台中。这种三重集成支持现代生成式 AI 用例,并通过简化企业的数据管理为客户提供显著价值。
在本文中,我们将探讨如何使用 Elasticsearch、Amazon Bedrock 和 LangChain 构建一个强大的检索增强生成(RAG)系统,该系统结合地理空间数据。这种混合方法结合了词法搜索、地理空间查询和向量相似性搜索,创建了一个智能的房地产助手,能够提供个性化的房产推荐。
技术概览
将 AI 与地理空间数据结合代表了信息检索和决策支持系统的重要进步。传统搜索引擎通常难以处理基于位置的查询,但通过将大型语言模型(LLMs)的强大功能与专用地理空间数据库结合,我们可以创建更智能、更具上下文感知的应用程序。
Amazon Bedrock 为开发者提供了选择权,可从领先的 AI 提供商中选择任何行业领先的基座模型(FMs),通过简化统一的 API,使开发者能够构建和扩展生成式 AI 应用程序。
Elastic 可以在 Elastic 的速度和规模下存储、运行查询和进行地理空间分析。Elastic 也是一个生产就绪的十亿级向量数据库。这使用户能够在 Elastic 中创建、存储和搜索向量嵌入。
这也带来了 Elastic 的一个独特功能,即可以将传统词法搜索与地理空间查询能力结合,并在此基础上添加向量相似性搜索,从而构建创新的生成式 AI 应用程序。
为了从零开始构建一个应用程序,让我们先了解 RAG。
检索增强生成(RAG)
RAG 是一种强大的技术,通过整合外部知识源来增强大型语言模型(LLMs)。它在不进行模型再训练的情况下,提高了 LLM 输出的准确性、相关性和可信度。
RAG 还通过结合来自私有或专有数据源的信息来增强文本生成。这种技术将搜索大型数据集或知识库的检索模型与生成模型(如 LLM)结合,以生成可读的文本响应。
- 步骤 1:用户提交关于某地区房产的查询 — “在加利福尼亚州库比蒂诺市 33 Union Sq 周围 2 英里范围内,帮我找带游泳池的联排别墅。”
- 步骤 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 助手,可回答有关我们数据库中房产列表的问题。用户可以使用自然语言与助手进行交互。
例如,用户可能会问:“在德克萨斯州弗里斯科市 5 英里范围内找带后院游泳池的独栋住宅。”
命名实体识别(NER)
NER(实体提取)是一种自然语言处理技术,用于识别和分类文本中的命名实体。NER 算法从非结构化文本中检测并提取特定实体,如人名、组织、地点、日期和自定义类别。
在我们的案例中,我们将提取用户搜索的房产位置(例如:旧金山),用户寻找的房产类型(如“独栋住宅”或“公寓”),这些房产可被找到的距离范围,以及任何附加房产特征(如后院游泳池)。
我们使用单次提示技术创建一个提示模板,向大语言模型(LLM)展示如何从用户输入的提示中提取实体。以下是针对房地产列表用例的示例代码片段。
步骤
- 创建用户提示模板,并将终端用户提示作为输入变量传递。
- 接下来,调用 Amazon Bedrock 服务,并将上述推理传递给您选择的 LLM。在此示例中,我们使用 Anthropic Claude Sonnet 3。
- 对于给定的终端用户提示作为输入,命名实体识别的输出将如下所示:
输入用户提示
“在德克萨斯州弗里斯科市附近找带社区游泳池的联排别墅,距离不超过 5 英里”
输出(提取的实体):
编程语言: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号”)映射到对应的地理坐标,从而实现GPS导航或任何基于位置的服务等应用。
在我们的情况下,地理编码的目的是将从用户提示中提取的地理位置转换为经度和纬度,以便使用这些坐标在Elastic中搜索房地产数据。
Amazon Location Service在此地理编码过程中可以提供帮助。Amazon Location Service是一项地图服务,允许您向应用程序添加地理空间数据和位置功能,包括动态和静态地图、地点搜索和地理编码、路线规划以及设备跟踪和地理围栏功能。
以下是来自Streamlit git仓库的示例代码,展示如何使用Amazon Location Service进行地理编码。地理编码过程生成的输出在Streamlit应用程序中将如下所示:
从上述地理编码过程获得的一个重要输出细节是经度和纬度坐标,这些坐标可用于在Elastic中执行地理空间搜索。
Elastic中的混合地理空间查询
该应用的关键特性是Elastic能够执行混合地理空间搜索。这种搜索结合了以下内容:
- 词汇搜索
- 地理空间搜索
- 向量相似性搜索
Elastic能够在单个查询中执行所有这些搜索类型,从而创建强大且高效的搜索功能。以下是代码片段。您也可以在GitHub仓库中查看此内容。
请注意上述代码中的内容:
- 在#1处,我们正在进行传统的基于关键字的词汇搜索。例如,我们希望在Elastic中搜索所有propertyType = “Townhome”(联排别墅)的房源列表。
- 在#2处,我们对字段propertyFeatures_v进行语义搜索,该字段是一个向量字段,包含文本等效属性特征的嵌入表示。
- 在#3处,我们使用地理空间坐标(geo_coded_lat和geo_coded_long)过滤所有数据。换句话说,对于我们的德克萨斯州弗里斯科位置,查找所有距离五英里范围内的房地产房源列表。
以下是streamlit应用在用户界面中显示输出的方式。
执行地理空间RAG
从Elastic上一次查询中找到的房地产数据现在通过Amazon Bedrock作为额外上下文传递给LLM,以执行RAG,如这里所示。
在代码中需要注意以下几点:
- 注意我们如何将从执行Elastic混合地理空间查询中获得的结果作为上下文传递给RAG。
- 再次,我们使用了提示模板,并将Elastic混合地理空间查询结果作为上下文提供。
- 在此处,我们强制LLM仅根据Elastic查询中找到的数据进行回答。
输出将是LLM在RAG流程提供的知识背景下进行精确推荐的结果。以下是Streamlit应用程序用户界面向最终用户显示的示例推荐。
此外,streamlit应用还会在地图上绘制Elastic的地理空间结果,从而直观地展示这些房地产的位置。
Streamlit应用
所有这些概念都以一个 Streamlit 应用程序的形式汇聚在一起,该应用演示了如何使用 Elasticsearch、Amazon Bedrock、Anthropic Claude 3 和 Langchain 构建一个混合地理空间 RAG 解决方案,该方案利用了 Elastic 的地理空间特性。
通过查看 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. 在美国和其他国家/地区的商标、徽标或注册商标。所有其他公司和产品名称均为其各自所有者的商标、徽标或注册商标。