将 Azure LLM 函数与 Elasticsearch 结合使用,获得更智能的查询体验

探索一个房地产搜索应用程序示例,该应用程序使用 Azure Gen AI LLM 函数和 Elasticsearch 提供灵活的混合搜索结果。在 GitHub Codespaces 中逐步查看如何配置和运行示例应用程序。

Elasticsearch 与行业领先的生成式 AI 工具和提供商实现了原生集成。请观看我们的网络研讨会,了解如何超越 RAG 基础功能,或使用 Elastic 向量数据库构建生产就绪型应用

要为您的用例构建最佳搜索解决方案,请开始免费云试用,或立即在本地计算机上试用 Elastic。

精确。重要的时候,它非常重要。当您搜索特定的内容时,精确度就显得格外重要。不过,有时过于精确的查询不会返回任何结果,因此,灵活地扩大查询范围以查找更多潜在的相关数据是有好处的。

这篇博文介绍了如何使用 Elasticsearch 和 Azure Open AI 创建一个示例应用程序,演示如何在搜索非常具体的房地产物业时找到准确的结果,同时在没有具体匹配结果时仍然提供相关结果。我们将介绍创建 Elasticsearch 索引和搜索模板所需的所有步骤。然后,我们将介绍如何创建一个应用程序,使用 Azure OpenAI 接收用户查询并将其转换为 Elasticsearch 搜索模板查询,从而生成令人惊叹的自定义结果的整个过程。

下面列出了我们在创建房地产搜索应用程序示例时要用到的所有资源:

  • Elasticsearch 索引和搜索模板
  • Azure OpenAI
  • Azure 地图 API
  • Codespaces Jupyter 笔记本
  • 语义内核
  • 使用 Blazor 前端的 C# 应用程序

智能查询工作流程

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

  • LLM(大型语言模型)--解释复杂的用户查询并协调工具以提取搜索意图和丰富上下文。
  • LLM 工具- 每个 LLM 工具都是我们为本职位创建的 C# 程序。有三种工具:
    • 参数提取工具:从查询中提取卧室、浴室、功能和价格等关键属性。
    • 地理编码工具:将地点名称转换为经纬度,以便进行空间筛选。
    • 搜索工具:使用查询参数填充 Elasticsearch 搜索模板并执行搜索。混合搜索- 利用内置 ML 推理执行混合搜索(全文 + 密集向量)。这种分层方法可确保终端用户获得更智能、更能感知上下文的查询体验。

应用架构

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

准备工作

[@portabletext/react] Unknown block type "block", specify a component for it in the `components.types` prop

在 Codespaces 中克隆示例应用程序 repo

首先克隆示例应用程序的代码。GitHub Codespaces 提供了克隆和运行应用程序的方法。单击新建代码空间。

然后,在 Repository 下拉菜单中选择 repo jwilliams-elastic/msbuild-intelligent-query-demo ,然后单击 Create Codespace

创建 .env文件

我们将使用 Python Jupyter Notebook 访问 Elastic Cloud 并与之交互,它使用存储在配置文件中的配置值进行访问和交互。笔记本配置文件的文件名应为.env您现在就可以创建它。

  1. 在 GitHub 代码空间中,单击 "新建文件 "按钮,添加一个名为.env的文件
  2. 在新创建的.env中添加以下内容文件

正如您所看到的,我们需要在.env 中添加几个缺失值,即 ELASTIC_URL ELASTIC_API_KEY。锉刀现在,让我们创建一个 Elasticsearch 无服务器项目,将其作为后端,为我们示例应用的搜索功能提供动力。

创建弹性无服务器项目

  1. 访问cloud.elastic.co,点击创建新的无服务器项目
  2. 单击 "下一步 "查看Elasticsearch解决方案
  3. 选择优化的载体
  4. 云提供商设置为Azure
  5. 点击创建无服务器项目
  6. 单击主导航菜单中的 "入门",然后向下滚动以复制 "连接详情"。
  7. 单击 " 复制"按钮,从 " 连接详细信息"中复制 Elasticsearch 端点
  8. 更新.env文件,将ELASTIC_URL设置为复制的Elasticsearch 端点

创建弹性 API 密钥

  1. 打开 Elasticsearch 入门 页面,单击 添加 API 密钥 部分中的 新建
  2. 输入密钥名称
  3. 单击 创建 API 密钥
  4. 单击 "复制 "按钮复制 API 密钥值
  5. 回到Codespaces,在这里我们有.env 打开编辑文件,粘贴复制的值以设置 ELASTIC_API_KEY

打开 Codespaces 笔记本并安装依赖库

在文件资源管理器中,选择VectorDBSetup.ipynb文件,打开笔记本。加载笔记本后,找到笔记本中 标题为 " 安装库" 的部分点击章节播放按钮。

如果这是你第一次在 GitHub Codespaces 中运行笔记本,系统会提示你选择 Codespaces 内核并配置 Python 环境。

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

转到笔记本的下一节,标题为 " 定义导入和加载环境变量"。点击章节播放按钮。

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

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

转到下一个笔记本部分,标题为 创建 ML 推理端点。点击章节播放按钮。

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

使用 Codespaces Notebook 创建 Elasticsearch 索引

转到下一个笔记本部分,标题为 创建 Elasticsearch 索引。点击章节播放按钮。

这将创建 Elasticsearch 索引,用于存储示例数据和通过 ML 推理端点生成的任何相关向量数据。

使用 Codespaces Notebook 创建 Elasticsearch 搜索模板

继续下一个笔记本部分,标题为 " 搜索模板"。点击章节播放按钮。

这样就创建了一个搜索模板,我们的示例应用程序将使用它作为模板,其中填充了从用户搜索查询中解析出的单词。这样,我们就可以配置和控制在 Elasticsearch 索引中查询数据时的特定程度。

使用 Codespaces Notebook 将数据输入 Elasticsearch 索引

转到笔记本的下一部分,标题为 " 输入属性数据"。点击章节运行按钮。

运行该代码段将批量加载properties.jsonl 文件中包含的示例数据。几分钟后,您应该会看到程序成功完成的确认信息。您可以访问 Elastic Cloud 中的 "索引管理"部分,确认索引包含预期记录。

创建 appsetting.json 以配置 C# 应用程序

创建了 Elasticsearch 索引并填充了数据后,我们现在就可以配置示例应用程序,使其与 Elastic 和 Azure Cloud 协同工作。C# 示例应用程序使用名为appsettings.json的文件来存储和加载 API 密钥等访问信息。现在,您将使用 Codespaces 中的编辑器创建appsettings.json文件。

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

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

3.查找 ElasticSettings 部分下的 Url ApiKey 值。将它们设置为与在.env文件。

创建 Azure OpenAI 服务

我们的示例应用程序将使用 Azure OpenAI 来解析应用程序用户的查询,然后通过填充搜索模板向 Elasticsearch 提交请求,以尝试灵活地传达用户正在搜索的内容。

  1. 打开新的浏览器选项卡,转到 Azure 门户中的 AI Foundry | Azure OpenAI 。点击+创建
  2. 在创建表格中,选择一个资源组
  3. 输入名称
  4. 选择定价层级
  5. 点击下一步
  6. 网络选项卡上,单击 下一步
  7. 在 "标签"选项卡上,单击 "下一步
  8. 在 "审核和提交"选项卡上,单击 "创建
  9. 创建完成后,单击转到资源
  10. 从左侧导航菜单中选择密钥和端点
  11. 复制端点并将其粘贴到在浏览器标签页中创建的appsettings.json文件中,该标签页已打开 Codespaces 编辑器。
  12. 然后返回包含 Azure OpenAI密钥和端点页面的浏览器选项卡。单击关键字 1 的复制按钮,然后将复制的值粘贴到appsettings.json文件中,回到打开 Codespaces 编辑器的浏览器标签页。

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

很好,我们现在已经有了一个正在运行的 Azure OpenAI 服务,但它仍然需要一个模型部署,以提供我们的示例应用程序所需的 LLM 功能。有多种型号可供选择。既然已在创建的 appsettings.json 文件中指定了 gpt-4o ,那就部署它吧。

  1. 转到Azure AI Foundry并单击创建部署
  2. 搜索gpt-4o,并从结果中选择它
  3. 单击确认选择
  4. 单击 "部"来部署模型

成功部署gpt-4o模型后,可以从左侧导航菜单中选择 "部署",确认gpt-4o部署的状态为 "已成功"。

创建 Azure 地图账户

我们希望我们示例应用程序的用户能够搜索特定区域的房地产,但又不必太具体。如果有人想搜索当地农贸市场附近的房产,OpenAI LLM 可以使用 Azure 地图服务来获取市场的纬度和经度坐标。然后,在发送给 Elasticsearch 的基于搜索模板的请求中可以包含这些坐标,以便用户查询包含特定位置和地理距离的信息。

  1. 单击 Azure 地图账户 中的 创建
  2. 选择资源组
  3. 输入名称
  4. 同意许可和隐私声明
  5. 单击审查并创建
  6. 点击创建
  7. 账户创建完成后,单击转到资源
  8. 单击左侧导航菜单中的身份验证
  9. 复制 主键值 并粘贴到包含 Codespaces 编辑器的浏览器选项卡上,使其成为 appsettings.json 文件中 AzureMapsSettings 部分的 ApiKey

试用示例应用程序

现在是有趣的部分。是时候运行示例应用程序了。我们已经掌握了所有配置细节,以及为应用程序提供动力所需的 Elastic Cloud 和 Azure Cloud 资源。

1.在 Codespaces 编辑器中打开终端窗口。

2.使用以下命令将活动目录更改为示例应用程序文件夹。

3.使用以下dotnet命令运行应用程序。

4.出现 "在浏览器中打开 "按钮时,单击该按钮。

5.测试默认搜索,然后尝试一些自己的自定义搜索。如果想查看后台生成搜索结果的更多详细信息,可以单击 工具调用 旁边的 显示 链接。

奖励: 如果你真的想测试 GPT-4o,请尝试以下搜索:我正在寻找佛罗里达州迪斯尼世界附近的房产,有 30 多间卧室、20 多间浴室、游泳池和车库,靠近海滩,价格在 20 万以下。 该查询将在多次调用搜索工具后返回结果。

Elastic 是您的搜索人工智能解决方案

运行中的应用程序是 Gen AI LLM 引导搜索的一个示例,它通过搜索模板使用 Elasticsearch 作为基础数据源。请随意尝试和定制示例应用程序,以创建精确而灵活的搜索体验,帮助用户找到他们想要的内容。

感谢您的阅读。试试弹性云

相关内容

准备好打造最先进的搜索体验了吗?

足够先进的搜索不是一个人的努力就能实现的。Elasticsearch 由数据科学家、ML 操作员、工程师以及更多和您一样对搜索充满热情的人提供支持。让我们联系起来,共同打造神奇的搜索体验,让您获得想要的结果。

亲自试用