当前位置: 首页 > news >正文

使用 Azure LLM Functions 与 Elasticsearch 构建更智能的查询体验

作者:来自 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

相关文章:

  • Go语言底层(四): 深入浅出Go语言的ants协程池
  • 痉挛性斜颈:认识颈部的 “异常挛动”
  • 基于深度学习的智能图像分类系统:从零开始构建
  • 深度学习中的激活函数:PyTorch中的ReLU及其应用
  • 【Linux】初见,进程概念
  • React 性能优化实战指南:从理论到实践的完整攻略
  • 【项目实训#07】HarmonyOS API知识图谱构建与系统知识图谱后端实现
  • 固件签名技术深度解析:HSM模块如何守护设备安全,CAS系统如何赋能产业升级
  • Linux 线程深度解析:从内存管理到线程控制的核心机制
  • 替换一个数字后的最大差值
  • MySQL-DML语句深度解析与实战指南
  • Python3安装MySQL-python踩坑实录:从报错到完美解决的实战指南
  • Linux学习笔记:PCIe内核篇(1):初始化与枚举流程
  • 设计模式精讲 Day 1:单例模式(Singleton Pattern)
  • Hive SQL执行流程深度解析:从CLI入口到执行计划生成
  • 《Kafka 在实时消息系统中的高可用架构设计》
  • DataX 框架学习笔记
  • 记录lxml中的etree、xpath来定位、爬取元素
  • LeetCode - 852. 山脉数组的峰顶索引
  • leetcode_128 最长连续序列
  • 假发的出口做b2c网站/西安seo全网营销
  • 电脑维护网站模板/免费个人网站模板
  • 合肥专业做网站的公司哪家好/长春做网络优化的公司
  • 简述上课网站建设所用的技术架构/什么网站推广比较好
  • 目前做网站的好处/企业专业搜索引擎优化
  • 电子商务网站建设客户需求调查表/竞价托管哪家专业