作者:来自 Elastic Jonathan Simon 及 James Williams

试用这个示例房地产搜索应用,它结合了 Azure Gen AI LLM Functions 与 Elasticsearch,提供灵活的混合搜索结果。在 GitHub Codespaces 中查看逐步配置和运行该示例应用的方法。

更多阅读:统一 Elastic 向量数据库与 LLM 功能,实现智能查询

Elasticsearch 原生集成了业界领先的 Gen AI 工具和提供商。查看我们的网络研讨会,了解如何突破 RAG 基础,或使用 Elastic 向量数据库构建可投入生产的应用。

为了为你的使用场景构建最佳搜索解决方案,可以立即开始免费的云试用,或在本地机器上试用 Elastic。


精准性。在关键时刻,精准性至关重要。当你在寻找非常具体的信息时,精准性非常重要。但有时查询过于精确会导致没有结果,因此能够灵活扩展查询范围以发现更多潜在相关数据是很有优势的。

这篇博客介绍了如何使用 Elasticsearch 和 Azure Open AI 创建一个示例应用,在搜索非常特定的房地产时找到准确结果,同时在没有完全匹配时也能提供相关结果。我们将逐步演示如何创建一个 Elasticsearch 索引及其搜索模板。接着,我们将详细说明如何创建一个应用,让 Azure OpenAI 将用户查询转化为 Elasticsearch 的搜索模板查询,从而生成高度定制的结果。

以下是创建这个房地产搜索示例应用所需的全部资源列表:

  • Elasticsearch 索引与搜索模板

  • Azure Open AI

  • Azure Maps API

  • Codespaces Jupyter Notebook

  • Semantic Kernel

  • 带 Blazor 前端的 C# 应用

智能查询工作流

该工作流结合了 LLM、LLM 工具 和 搜索,将自然语言查询转化为结构化且相关的搜索结果:

  • LLM(大语言模型):解释复杂用户查询,并编排工具以提取搜索意图并丰富上下文。

  • LLM 工具:每个 LLM 工具是我们为此示例创建的 C# 程序,共有三个工具:

    • 参数提取工具:从查询中提取卧室数、浴室数、房屋特征和价格等关键属性。

    • 地理编码工具:将位置名称转换为用于空间过滤的纬度/经度。

    • 搜索工具:使用查询参数填充 Elasticsearch 搜索模板并执行搜索。

  • 混合搜索:执行全文 + 稠密向量混合搜索,并内置机器学习推理。

这种分层方法为最终用户提供更智能、具备上下文感知的查询体验。

应用架构

下面是该示例应用的系统架构图。我们将使用 Codespaces 中的 Jupyter Notebook 与 Elastic Cloud 交互。

前置条件

你只需要一个浏览器,因为我们将使用 GitHub Codespaces 来克隆示例应用、进行配置并运行它。Elastic 相关部分将使用 Elastic Cloud 创建一个 Elasticsearch Serverless 项目。我们还将使用 Azure Portal 来操作 Azure 资源。

在 Codespaces 中克隆示例应用仓库

首先克隆示例应用程序的代码。你可以在 GitHub Codespaces 中完成这一步,它可以让你克隆并运行应用。点击 “New Codespace”。

然后,在 “Repository” 下拉菜单中选择仓库 jwilliams-elastic/msbuild-intelligent-query-demo,然后点击 “Create Codespace”。

创建 .env 文件

我们将使用 Python Jupyter Notebook 访问和操作 Elastic Cloud,操作时会使用存储在配置文件中的配置值。Notebook 的配置文件应命名为 .env,你现在需要创建它。

  1. 在 GitHub Codespaces 中,点击 New File 按钮,添加一个名为 .env 的文件
  2. 将以下内容添加到新创建的 .env 文件中
ELASTIC_URL=
ELASTIC_API_KEY=

如你所见,我们有几个缺失的值,ELASTIC_URL 和 ELASTIC_API_KEY,需要添加到 .env 文件中。现在我们通过创建一个 Elasticsearch 无服务器项目,作为后端,为我们的示例应用提供搜索功能。

创建 Elastic 无服务器项目

  1. 访问 cloud.elastic.co 并点击 Create New Serverless project
  2. 点击 Next,选择 Elasticsearch 解决方案
  3. 选择 Optimized for Vectors
  4. 设置 Cloud Provider 为 Azure
  5. 点击 Create Serverless Project
  6. 在主导航菜单点击 Getting Started,向下滚动复制 Connection Details
  7. 点击 Copy 按钮复制 Connection Details 中的 Elasticsearch Endpoint
  8. 更新 .env 文件,将 ELASTIC_URL 设置为复制的 Elasticsearch Endpoint

创建 Elastic API Key

  1. 打开 Elasticsearch Getting Started 页面,在 Add an API Key 部分点击 New
  2. 输入 Key Name
  3. 点击 Create API Key
  4. 点击 Copy 按钮复制 API key 的值
  5. 回到 Codespaces,打开正在编辑的 .env 文件,粘贴复制的值,设置 ELASTIC_API_KEY

打开 Codespaces Notebook 并安装库依赖

在文件资源管理器中,选择 VectorDBSetup.ipynb 文件打开 Notebook。Notebook 加载后,找到标题为 Install libraries 的部分,点击该部分的播放按钮。

如果这是你第一次在 GitHub Codespaces 运行 Notebook,系统会提示你选择 Codespaces Kernel 并配置 Python 环境。

使用 Codespaces Notebook 定义导入并加载环境变量

进入 Notebook 中标题为 Define imports and load environment variables 的下一部分,点击该部分的播放按钮。

这段代码导入了 Notebook 使用的 Python 库,并从你之前创建的 .env 文件加载环境变量。

使用 Codespaces Notebook 创建 Elastic ML 推理端点

进入 Notebook 中标题为 Create ML inference endpoint 的下一部分,点击该部分的播放按钮。

这将会在 Elasticsearch 项目中创建一个新的 ML 推理端点,用于从我们的数据生成文本向量。文本向量是文本的向量表示,将存储在 Elasticsearch 中以支持语义搜索。

使用 Codespaces Notebook 创建 Elasticsearch 索引

进入 Notebook 中标题为 Create Elasticsearch index 的下一部分,点击该部分的播放按钮。

这将创建 Elasticsearch 索引,用来存储我们的示例数据以及通过 ML 推理端点生成的相关向量数据。

使用 Codespaces Notebook 创建 Elasticsearch 搜索模板

继续进入 Notebook 中标题为 Search Template 的下一部分,点击该部分的播放按钮。

这会创建一个搜索模板,我们的示例应用将使用该模板,并填充用户搜索查询中解析出的词语。这样可以配置和控制我们在 Elasticsearch 索引中查询数据时的具体程度。

使用 Codespaces Notebook 向 Elasticsearch 索引导入数据

进入 Notebook 中标题为 Ingest property data 的下一部分,点击该部分的运行按钮。

运行这段代码会批量加载 properties.jsonl 文件中的示例数据。几分钟后,你会看到流程成功完成的确认信息。你可以通过访问 Elastic Cloud 中的 Index Management 部分,确认索引中包含了预期的记录。

创建 appsettings.json 来配置 C# 应用

我们的 Elasticsearch 索引已经创建并填充了数据,现在准备配置示例应用,使其可以与 Elastic 和 Azure Cloud 一起使用。这个 C# 示例应用使用名为 appsettings.json 的文件来存储和加载访问信息,如 API key。你现在将在 Codespaces 编辑器中创建 appsettings.json 文件。

  1. 在 HomeFinderApp 文件夹中创建 appsettings.json

  2. 将以下代码粘贴到 appsettings.json 文件中

    {"ElasticSettings": {"Url": "","ApiKey": "","IndexName": "properties","TemplateId": "properties-search-template"},"AzureOpenAISettings": {"Endpoint": "","ApiKey": "","DeploymentName": "gpt-4o"},"AzureMapsSettings": {"Url": "https://atlas.microsoft.com/geocode","ApiKey": ""},"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"AllowedHosts": "*"
    }
    
  3. 找到 ElasticSettings 部分下的 Url 和 ApiKey 值,将它们设置为之前在 .env 文件中设置的相同值。

创建 Azure OpenAI 服务

我们的示例应用将使用 Azure OpenAI 来解析用户查询,然后通过填充搜索模板向 Elasticsearch 发送请求,以灵活地表达用户的搜索内容。

  1. 打开一个新的浏览器标签,进入 Azure 门户中的 AI Foundry | Azure OpenAI,点击 +Create
  2. 在创建表单中,选择一个 Resource Group
  3. 输入名称(Name)
  4. 选择定价等级(Pricing Tier)
  5. 点击 Next
  6. 在 Network 标签页,点击 Next
  7. 在 Tags 标签页,点击 Next
  8. 在 Review and submit 标签页,点击 Create
  9. 创建完成后,点击 Go to resource
  10. 从左侧导航菜单选择 Keys and Endpoint
  11. 复制 Endpoint,并粘贴到你打开 Codespaces 编辑器的浏览器标签中的 appsettings.json 文件中
  12. 然后回到包含 Azure OpenAI Key 和 Endpoint 页面浏览器标签,点击 Key 1 的复制按钮,将复制的值粘贴到你打开 Codespaces 编辑器的浏览器标签中的 appsettings.json 文件中

为 Azure OpenAI 服务添加 gpt-4o 模型部署

很好,我们现在有了运行中的 Azure OpenAI 服务,但还需要部署模型,才能为示例应用提供所需的 LLM 功能。模型有很多选择,我们这次部署 gpt-4o,因为它已经在你创建的 appsettings.json 文件中指定了。

  1. 进入 Azure AI Foundry,点击 Create a deployment
  2. 搜索 gpt-4o 并从结果中选择它
  3. 点击 Confirm 进行选择
  4. 点击 Deploy 部署该模型

部署成功后,点击左侧导航菜单的 Deployments,确认列表中有 gpt-4o 部署,且状态为 Succeeded。

创建 Azure Maps 账户

我们希望示例应用的用户能搜索特定区域的房产,但不需要过于具体。如果有人想搜索靠近当地农贸市场的房产,Azure Maps 是一个服务,OpenAI 的 LLM 可以用它获取农贸市场的纬度和经度坐标。然后这些坐标会包含在基于搜索模板的请求中,发送给 Elasticsearch,用于处理包含具体位置和地理距离的用户查询。

  1. 点击 Azure Maps Accounts 中的 Create
  2. 选择一个 Resource group
  3. 输入 Name
  4. 同意许可和隐私声明
  5. 点击 Review and create
  6. 点击 Create
  7. 账户创建完成后,点击 Go to resource
  8. 点击左侧导航菜单的 Authentication
  9. 复制 Primary Key 值,粘贴到你打开 Codespaces 编辑器的浏览器标签中 appsettings.json 文件的 AzureMapsSettings 部分的 ApiKey 值中

试用示例应用

现在到了有趣的部分,是时候运行示例应用了。我们已经完成所有配置细节,并准备好了支持应用的 Elastic Cloud 和 Azure Cloud 资源。

  1. 在 Codespaces 编辑器中打开一个 Terminal 窗口。

  2. 使用以下命令将当前目录切换到示例应用文件夹。

    cd HomeFinderApp
  3. 使用以下 dotnet 命令运行应用。

    dotnet run
  4. 当出现 Open in Browser 按钮时,点击它。

  5. 测试默认搜索,然后尝试一些你自己的自定义搜索。如果你想查看更多关于后台如何生成搜索结果的细节,可以点击 Tool Invocations 旁边的 Show 链接。

额外提示:如果你真的想测试 GPT-4o,试试以下搜索:
I'm looking for property near disney world fl with 30+ bedrooms and 20+ bathrooms and a pool and garage and near the beach for less than 200K.
这个查询会经过多次搜索工具调用后返回结果。

Elastic 是你搜索 AI 的解决方案

运行中的应用是一个示例,展示了通过搜索模板使用 Elasticsearch 作为基础数据源,进行生成式 AI LLM 引导的搜索。欢迎你试验并定制这个示例应用,打造既精准又灵活的搜索体验,帮助你的用户找到他们想要的内容。

谢谢阅读。试试 Elastic Cloud 吧。

原文:Using Azure LLM Functions with Elasticsearch for smarter query experiences - Elasticsearch Labs

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模糊查询 的深度技术解析

以下是 模糊查询 的深度技术解析,涵盖核心语法、通配符策略、性能优化及实战陷阱: 🔍 一、核心运算符:LIKE SELECT * FROM 表名 WHERE 列名 LIKE 模式字符串;🎯 二、通配符详解 通配符作用示例匹配案例%任意长度字符…

[论文阅读] (39)EuroSP25 CTINEXUS:基于大模型的威胁情报知识图谱自动构建

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座,并分享给大家,希望您喜欢。由于作者的英文水平和学术能力不高,需要不断提升,所以还请大家批评指正,非常欢迎大家给我留言评论,学术路上期…

强化学习三大分类

核心目标: 教会一个智能体(比如机器人、游戏AI、推荐系统)通过试错和奖励,学会在某个环境中完成特定任务的最佳策略。 核心角色: 智能体 (Agent): 学习者,比如玩游戏的小人、控制温度的空调系…

城市排水生命线安全运行监测项目

近年来,城市内涝、污水溢流等问题频发,让排水管网这一"城市生命线"的安全运行备受关注。如何让地下的"毛细血管"更智能、更可靠?本文将带您深入解析城市排水生命线安全运行监测项目的建设逻辑与技术内核,看科…

LeetCode - 34. 在排序数组中查找元素的第一个和最后一个位置

题目 34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣&#xff08;LeetCode&#xff09; 思路 查找左边界 初始化 left 0, right nums.size() - 1 当 left < right 时循环&#xff1a; 计算中点 mid left (right - left) / 2 如果 nums[mid] < target…

Tesollo四指灵巧手DG-4F:18自由度与多种抓取模式结合实现高精度操作

Tesollo四指灵巧手 DG-4F 是一款具备 18 自由度的多模态末端执行器&#xff0c;采用模块化结构设计&#xff0c;融合人手灵活性与夹爪高效性特点。该产品兼容 Universal Robots、Techman、Doosan Robotics、Rainbow Robotics 等主流机器人平台&#xff0c;适用于工业自动化、科…

深入浅出JavaScript 原型链:对象继承的“隐形链条”

深入浅出JavaScript 原型链&#xff1a;对象继承的“隐形链条” 在 JavaScript 的世界里&#xff0c;原型链&#xff08;Prototype Chain&#xff09;是一个核心概念。它如同一条隐形的链条&#xff0c;连接着所有对象&#xff0c;使得代码能够高效地共享属性和方法。理解原型…

LINUX中MYSQL的使用

LINUX中MYSQL的使用 MYSQL的数据类型 bool&#xff1a; 布尔类型 0 或者 1 CHAR&#xff1a; 单字符的字符 CHAR&#xff08;n&#xff09;:多字节字符 VARCHAR&#xff08;n&#xff09;&#xff1a;可变长度的字符型 TINYINT &#xff1a; 单字节整型 SMALLINT&#x…

打卡第48天:随机函数与广播机制

知识点回顾&#xff1a; 随机张量的生成&#xff1a;torch.randn函数卷积和池化的计算公式&#xff08;可以不掌握&#xff0c;会自动计算的&#xff09;pytorch的广播机制&#xff1a;加法和乘法的广播机制 ps&#xff1a;numpy运算也有类似的广播机制&#xff0c;基本一致 …

学习昇腾开发的第四天--基本指令

1、查看npu当前状态信息 npu-smi info 2、查看NPU的ID npu-smi info -l3、调用python python3 4、修改用户名 su - HwHiAiUser 5、查看cann版本 cat /usr/local/Ascend/ascend-toolkit/latest/compiler/version.info 6、删除文件夹 sudo rm -rf HelloWorld7、在本地环…

vue3 - 自定义hook

自定义hook 简单点来说就是将人物或者订单的所有数据和方法放在一个ts文件里面 这样便于维护 假如一个人只需要管 人物的模块 那他只需要操作usePerson.ts文件就可以了 //useDog.ts import { ref,reactive} from vue; import axios from axios;export default function(){…

【python】bash: !‘: event not found

报错 # 2. 测试smplx是否工作&#xff08;可能不需要chumpy&#xff09; python -c "import smplx; print(✅ smplx works!)"bash: !: event not found 分析 这是bash的历史扩展问题&#xff0c;感叹号被解释为历史命令。用这些方法解决&#xff1a; &#x1f680…

【Python打卡Day47】注意力热力图可视化@浙大疏锦行

可视化空间注意力热力图的意义&#xff1a; 提升模型可解释性 热力图能直观展示模型决策的依据区域&#xff0c;破除深度学习"黑箱"困境。例如在图像识别中&#xff0c;可以看到模型识别"猫"是因为关注了猫耳和胡须区域&#xff0c;识别"禁止通行&qu…

树状数组 2

L - 树状数组 2 洛谷 - P3368 Description 如题&#xff0c;已知一个数列&#xff0c;你需要进行下面两种操作&#xff1a; 将某区间每一个数加上 x&#xff1b; 求出某一个数的值。 Input 第一行包含两个整数 N、M&#xff0c;分别表示该数列数字的个数和操作的总个数。…

YOLOv2 技术详解:目标检测的又一次飞跃

&#x1f9e0; YOLOv2 技术详解&#xff1a;目标检测的又一次飞跃 一、前言 在 YOLOv1 提出后&#xff0c;虽然实现了“实时性 单阶段”的突破&#xff0c;但其在精度和小物体检测方面仍有明显不足。为了弥补这些缺陷&#xff0c;Joseph Redmon 等人在 2017 年提出了 YOLOv2…

JAFAR Jack up Any Feature at Any Resolution

GitHub PaPer JAFAR: Jack up Any Feature at Any Resolution 摘要 基础视觉编码器已成为各种密集视觉任务的核心组件。然而&#xff0c;它们的低分辨率空间特征输出需要特征上采样以产生下游任务所需的高分辨率模式。在这项工作中&#xff0c;我们介绍了 JAFAR——一种轻量级…

SamWaf 开源轻量级网站防火墙源码(源码下载)

SamWaf网站防火墙是一款适用于小公司、工作室和个人网站的开源轻量级网站防火墙&#xff0c;完全私有化部署&#xff0c;数据加密且仅保存本地&#xff0c;一键启动&#xff0c;支持Linux&#xff0c;Windows 64位,Arm64。 主要功能&#xff1a; 代码完全开源 支持私有化部署…

79Qt窗口_QDockWidget的基本使用

目录 4.1 浮动窗⼝的创建 4.2 设置停靠的位置 浮动窗⼝ 在 Qt 中&#xff0c;浮动窗⼝也称之为铆接部件。浮动窗⼝是通过 QDockWidget类 来实现浮动的功能。浮动窗 ⼝⼀般是位于核⼼部件的周围&#xff0c;可以有多个。 4.1 浮动窗⼝的创建 浮动窗⼝的创建是通过 QDockWidget…

UE/Unity/Webgl云渲染推流网址,如何与外部网页嵌套和交互?

需求分析&#xff1a;用threejs开发的数字孪生模型&#xff0c; 但是通过webgl技术网页中使用&#xff0c;因为模型数据量大&#xff0c;加载比较慢&#xff0c;且需要和其他的业务系统进行网页嵌套和交互&#xff0c;使用云渲染技术形成的推流网址&#xff0c;如何与外部网页嵌…

在Termux中搭建完整Python环境(Ubuntu+Miniconda)

蹲坑也能写python? 📱 环境准备🛠 详细搭建步骤步骤1:安装Linux容器工具步骤2:查看可用Linux发行版步骤3:安装Ubuntu系统步骤4:登录Ubuntu环境步骤5:下载Miniconda安装包步骤6:安装Miniconda⚡ 环境验证💡 使用技巧⚠️ 注意事项前言:想在吃饭、通勤甚至休息间隙…