使用 Elastic 和 Amazon Bedrock 制作混合地理空间 RAG 应用程序

news2025/2/23 23:54:22

作者:来自 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 提供了一个如何从用户输入的提示中提取实体的示例。以下是我们房地产物业列表用例的示例代码片段。

步骤

  1. 创建用户提示模板(prompt template)并将最终用户提示作为输入变量传递。
  2. 接下来,调用 Amazon Bedrock 服务并将上述推理传递给你选择的 LLM。在本例中,我们使用 Anthropic Claude Sonnet 3 作为示例。
  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 能够执行混合地理空间搜索。此搜索结合了:

  1. 词汇搜索
  2. 地理空间搜索
  3. 向量相似性搜索

Elastic 在单个查询中执行所有这些搜索类型,从而创建强大而高效的搜索功能。以下是代码片段。你也可以在 GitHub 存储库中看到它。

请注意上面的代码:

  • 在 #1 中,我们执行传统的基于关键字的词汇搜索。例如,我们想要在 Elastic 中搜索所有具有 propertyType =“Townhome” 属性的列表。
  • 在 #2 中,我们对字段 propertyFeatures_v 执行语义搜索,该字段是一个向量字段,具有文本等效 propertyFeatures 的嵌入。
  • 在 #3 中,我们使用地理空间坐标(geo_coded_lat 和 geo_coded_long)过滤所有数据。换句话说,对于我们位于德克萨斯州弗里斯科的位置,查找五英里内的所有房地产列表。

以下是 streamlit 应用程序在用户界面中显示输出的方式。

运行地理空间 RAG

上一个查询中从 Elastic 找到的房地产属性数据现在作为附加上下文通过 Amazon Bedrock 传递给 LLM 以执行 RAG,如下所示。

代码中需要注意的几点:

  1. 请注意我们如何将执行 Elastic 的混合地理空间查询得到的结果作为上下文传递给 RAG。
  2. 同样,我们使用提示模板(prompt template),我们将提供 Elastic 的混合地理空间查询结果作为上下文。
  3. 在这里,我们强制 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2255612.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【opencv入门教程】15. 访问像素的十四种方式

文章选自: 一、像素访问 一张图片由许多个点组成,每个点就是一个像素,每个像素包含不同的值,对图像像素操作是图像处理过程中常使用的 二、访问像素 void Samples::AccessPixels1(Mat &image, int div 64) {int nl imag…

Ansys Maxwell使用技巧

1、回到原点 点击Fit All 2、长方体做差 选中两个长方体, 点击Subtracct,就可以得到一个镂空的绕组。 3、电感仿真步骤 3.1 画磁芯 3.2 画绕组 3.3 加激励 选择截面积-右键绕组-Edit-Surface-Section-YZ 选择一个截面添加电流激励 3.4选材料 绕组一…

掌握谈判技巧,达成双赢协议

在当今竞争激烈且合作频繁的社会环境中,谈判成为了我们解决分歧、谋求共同发展的重要手段。无论是商业合作、职场交流,还是国际事务协商,掌握谈判技巧以达成双赢协议都具有极其关键的意义。它不仅能够让各方在利益分配上找到平衡点&#xff0…

MacOS 命令行详解使用教程

本章讲述MacOs命令行详解的使用教程,感谢大家观看。 本人博客:如烟花般绚烂却又稍纵即逝的主页 MacOs命令行前言: 在 macOS 上,Terminal(终端) 是一个功能强大的工具,它允许用户通过命令行直接与系统交互。本教程将详细介绍 macOS…

第十七章 使用 MariaDB 数据库管理系统

1. 数据库管理系统 数据库是指按照某些特定结构来存储数据资料的数据仓库。在当今这个大数据技术迅速崛起的年代,互联网上每天都会生成海量的数据信息,数据库技术也从最初只能存储简单的表格数据的单一集中存储模式,发展到了现如今存储海量…

11.17【大数据】Hadoop【DEBUG】

列出hdfs文件系统所有的目录和文件 主节点上 子结点 是一样的 *为什么能登进 slave 02 的主机,但是 master 当中依然显示 slave 02 为 DeadNode?* hadoop坏死节点的重启_hadoop3 子节点重启-CSDN博客 注意hadoop-daemon.sh 实际上位于 Hadoop 的 sbin 目录中,而不…

MetaGPT 安装

1. 创建环境 conda create -n metagpt python3.10 && conda activate metagpt2. 可编辑方式安装 git clone --depth 1 https://github.com/geekan/MetaGPT.git cd MetaGPT pip install -e .3. 配置 metagpt --init-config运行命令,在C盘位置C:\Users\325…

图的最小生成树(Kruskal算法,Prim算法)

无向图中的最短路径问题?No,最短路径不是最小生成树! 什么是最小生成树? 在一个无向连通图中,有一个子图连接所有顶点,并且权重和最小,那么他就是最小生成树。如果权重和不是最小的只能叫做生…

【Flink-scala】DataStream编程模型之水位线

DataStream API编程模型 1.【Flink-Scala】DataStream编程模型之 数据源、数据转换、数据输出 2.【Flink-scala】DataStream编程模型之 窗口的划分-时间概念-窗口计算程序 3.【Flink-scala】DataStream编程模型之 窗口计算-触发器-驱逐器 文章目录 DataStream API编程模型前言…

PHP RabbitMQ连接超时问题

问题背景 Error: The connection timed out after 3 sec while awaiting incoming data 看到这个报错,我不以为意,认为是我设置的超时时间不够导致的,那就设置长一点 Error: The connection timed out after 300 sec while awaiting incom…

【LeetCode热题100】BFS解决FloodFill算法

这篇博客主要记录了使用BFS解决FloodFill算法的几道题目&#xff0c;包括图像渲染、岛屿数量、岛屿的最大面积、被包围的区域。 class Solution {using PII pair<int, int>; public:vector<vector<int>> floodFill(vector<vector<int>>& im…

L2G3000-LMDeploy 量化部署实践

文章目录 LMDeploy 量化部署实践闯关任务环境配置W4A16 量化 KV cacheKV cache 量化Function call LMDeploy 量化部署实践闯关任务 环境配置 conda create -n lmdeploy python3.10 -y conda activate lmdeploy conda install pytorch2.1.2 torchvision0.16.2 torchaudio2.1.…

大数据新视界 -- 大数据大厂之 Hive 临时表与视图:灵活数据处理的技巧(上)(29 / 30)

&#x1f496;&#x1f496;&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎你们来到 青云交的博客&#xff01;能与你们在此邂逅&#xff0c;我满心欢喜&#xff0c;深感无比荣幸。在这个瞬息万变的时代&#xff0c;我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…

Ubuntu操作系统在Vmware中的安装、常用操作、最基础的知识、imx6ll基本开发环境配置

01-Ubuntu操作系统的安装 网盘搜索 “ubuntu18.04.zip”&#xff0c;下载下来之后用Vmware打开就行了。 我用的虚拟机是15.5.6&#xff0c;实测没有问题。 启动时用户名为book的密码为123456 提问&#xff1a;Ubuntu与Centos系统有何区别&#xff1f; 详情见 https://blog.cs…

windows2012服务器安装sqlserver2012出现NetFx3错误的解决方法。

出现以下错误: 启用 Windows 功能 NetFx3 时出错&#xff0c;错误代码: -2146498298。请尝试从 Windows 管理工具启用 Windows 功能 NetFx3&#xff0c;然后重新运行安装程序。有关如何启用 Windows 功能的详细信息&#xff0c;具体解决办法如下&#xff1a; 1、打开PowerShel…

FPGA实战篇(按键控制LDE实验)

1.按键简介 按键开关是一种电子开关&#xff0c;属于电子元器件类。我们的开发板上有两种按键开关&#xff1a;第一种是本实验所使用的轻触式按键开关&#xff0c;简称轻触开关。使用时以向开关的操作方向施加压力使内部电路闭合接通&#xff0c;当撤销压力时开关断开&#xff…

C++析构函数和构造函数

一、构造函数 1.构造函数的基本概念 1.对构造函数的理解&#xff1a; 构造函数是类的一种特殊成员函数&#xff0c;其主要功能是在创建对象时进行初始化操作。它的名字与类名相同&#xff0c;并且没有返回值类型&#xff08;不能是void&#xff09;。例如&#xff0c;对于一个…

【Axure高保真原型】数值条件分组

今天和大家分享数值条件分组的原型模板&#xff0c;效果包括&#xff1a; 点击添加分组按钮&#xff0c;可以显示添加弹窗&#xff0c;填写分组名称和数值区间后&#xff0c;可以新增该分组信息‘’ 修改分组区间&#xff0c;可以直接在输入框里修改已有的分组区间&#xff0c…

阳光电脑公司的维修服务微信小程序ssm+论文源码调试讲解

第2章 开发环境与技术 阳光电脑公司的维修服务微信小程序的编码实现需要搭建一定的环境和使用相应的技术&#xff0c;接下来的内容就是对阳光电脑公司的维修服务微信小程序用到的技术和工具进行介绍。 2.1 MYSQL数据库 本课题所开发的应用程序在数据操作方面是不可预知的&…

重生之我在异世界学编程之C语言:深入结构体篇(下)

大家好&#xff0c;这里是小编的博客频道 小编的博客&#xff1a;就爱学编程 很高兴在CSDN这个大家庭与大家相识&#xff0c;希望能在这里与大家共同进步&#xff0c;共同收获更好的自己&#xff01;&#xff01;&#xff01; 本文目录 引言结构体的自引用实现链表一、链表的基…