使用自己的 Java 数据示例开始聊天

本文介绍如何使用 Java 的数据示例部署和运行聊天。 此示例使用 Java、Azure OpenAI 服务和 Azure AI 搜索中的 检索扩充生成(RAG) 实现聊天应用,以获取有关虚构公司员工福利的解答。 该应用采用 PDF 文件种子,包括员工手册、福利文档以及公司角色和期望列表。

在本文中,你将完成以下任务:

  • 将聊天应用部署到 Azure。
  • 获取有关员工福利的解答。
  • 更改设置以更改响应的行为。

完成本文后,可以使用自定义代码开始修改新项目。

本文是一系列文章的一部分,介绍如何使用 Azure OpenAI 服务和 Azure AI 搜索生成聊天应用。 集合中的其他文章包括:

注意

本文使用一个或多个 AI 应用模板 作为本文中的示例和指南的基础。 AI 应用模板为你提供了维护良好、易于部署的参考实现,有助于确保 AI 应用的高质量起点。

体系结构概述

下图显示了聊天应用的简单体系结构:

显示从客户端到后端应用的体系结构的 关系图。

体系结构的关键组件包括:

  • 用于托管交互式聊天体验的 Web 应用程序。
  • 用于从自己的数据获取答案的 Azure AI 搜索资源。
  • Azure OpenAI 服务将提供:
    • 用于增强自有数据搜索性能的关键字。
    • OpenAI 模型中的答案。
    • 来自 ada 模型的嵌入

成本

此体系结构中的大多数资源使用基本定价层或消耗定价层。 消耗定价基于使用情况,这意味着你只需为使用的内容付费。 若要完成本文,需要收取费用,但费用最低。 完成本文后,可以删除资源以停止产生费用。

详细了解示例存储库 中的成本。

先决条件

开发容器 环境可用于完成本文所需的所有依赖项。 可以在 GitHub Codespaces(在浏览器中)或使用 Visual Studio Code 在本地运行开发容器。

若要使用本文,需要满足以下先决条件:

开放开发环境

从安装所有依赖项的开发环境开始,以完成本文。

GitHub Codespaces 运行由 GitHub 托管的开发容器,Visual Studio Code for web 作为用户界面。 对于最直接的开发环境,请使用 GitHub Codespaces,以便预先安装正确的开发人员工具和依赖项来完成本文。

重要

所有 GitHub 帐户每月最多可使用 Codespaces 60 小时,其中包含两个核心实例。 有关详细信息,请参阅 GitHub Codespaces 每月包含的存储和核心小时数

  1. 右键点击以下按钮,并选择“在新窗口中打开链接”,以便同时访问开发环境和文档。

    在GitHub Codespaces中打开

  2. “创建代码空间”页上,查看代码空间配置,然后选择 “创建代码空间”

    在创建新代码空间之前,确认屏幕的屏幕截图。

  3. 等待 Codespace 启动。 此启动过程可能需要几分钟时间。

  4. 在屏幕底部的终端中,使用 Azure 开发人员 CLI 登录到 Azure。

    azd auth login
    
  5. 从终端复制代码,然后将其粘贴到浏览器中。 按照说明使用 Azure 帐户进行身份验证。

  6. 本文中的剩余任务发生在此开发容器的上下文中。

部署和运行

示例存储库包含将聊天应用部署到 Azure 所需的所有代码和配置文件。 以下步骤将指导完成将示例部署到 Azure 的过程。

将聊天应用部署到 Azure

重要

在本部分中创建的 Azure 资源会产生直接成本,主要来自 Azure AI 搜索资源。 即使在命令完全执行之前中断命令,这些资源也会产生成本。

  1. 运行以下命令预配 Azure 资源并部署源代码:

    azd up
    
  2. 如果系统提示输入环境名称,请将其保留为短小写,例如 myenv。 它用作资源组名称的一部分。

  3. 出现提示时,选择要在其中创建资源的订阅。

  4. 当系统提示你第一次选择位置时,请选择你附近的位置。 此位置用于大多数资源,包括托管。

  5. 如果系统提示你输入 OpenAI 模型的位置,请选择你附近的位置。 如果与第一个位置相同的位置可用,请选择该位置。

  6. 等待应用部署,可能需要 5-10 分钟才能完成。

  7. 应用程序成功部署后,终端中会显示一个 URL。

  8. 选择标记为 Deploying service web 的 URL,在浏览器中打开聊天应用程序。

    浏览器中聊天应用的屏幕截图,其中显示了聊天输入的多个建议,以及在其中输入问题的聊天框。

使用聊天应用从 PDF 文件获取答案

聊天应用预加载了来自 PDF 文件的员工权益信息。 可以使用聊天应用询问有关权益的问题。 以下步骤将引导你完成使用聊天应用的过程。

  1. 在浏览器中,选择或在聊天文本框中输入我的 Northwind Health Plus 计划中包含哪些内容,但这些内容不在标准中?

    聊天应用第一个答案的屏幕截图。

  2. 在答案中,选择其中一个引文。

    聊天应用第一个答案的屏幕截图,其中引文突出显示在红色框中。

  3. 在右窗格中,使用选项卡了解如何生成答案。

    Tab 描述
    思维过程 聊天互动的脚本。
    支持内容 包括回答你问题的信息和源材料。
    引文 显示包含引文的 PDF 页面。
  4. 完成后,再次选择所选选项卡以关闭窗格。

使用聊天应用设置更改响应行为

OpenAI 模型和用于与模型交互的设置决定了聊天应用的智能。

聊天开发人员设置的屏幕截图。

设置 描述
替代提示模板 用于生成答案的提示。
检索这么多搜索结果 用于生成答案的搜索结果数。 可以在引文的“思考过程”和“支持内容”选项卡中看到这些返回的来源
排除类别 从搜索结果中排除的文档类别。
使用语义排名器进行检索 Azure AI 搜索 的功能,该功能使用机器学习来提高搜索结果的相关性。
使用查询上下文摘要而不是整个文档 当同时检查 Use semantic rankerUse query-contextual summaries 时,LLM 使用从排名最高的文档中的关键段落(而不是所有段落)中提取的标题。
建议后续问题 让聊天应用根据答案建议后续问题。
检索模式 向量 + 文本 意味着搜索结果基于文档的文本和文档的嵌入。 矢量 意味着搜索结果基于文档的嵌入。 文本 意味着搜索结果基于文档的文本。
流式处理聊天完成响应 将响应流式传输,而不是等待完整答案可用后再响应。

以下步骤将引导你完成更改设置的过程。

  1. 在浏览器中,选择 开发人员设置 选项卡。

  2. 选中 建议后续问题 复选框,然后再次提出相同的问题。

    What is my deductible?
    

    聊天返回建议的后续问题,例如:

    1. What is the cost sharing for out-of-network services?
    2. Are preventive care services subject to the deductible?
    3. How does the prescription drug deductible work?
    
  3. 在“设置”选项卡中,取消选择“使用语义排名程序进行检索”

  4. 再次问同样的问题?

    What is my deductible?
    
  5. 答案有什么区别?

    例如,使用语义排名器的响应提供了单个答案:The deductible for the Northwind Health Plus plan is $2,000 per year

    没有语义排名的响应返回了一个答案,这需要更多的工作来获取答案:Based on the information provided, it is unclear what your specific deductible is. The Northwind Health Plus plan has different deductible amounts for in-network and out-of-network services, and there is also a separate prescription drug deductible. I would recommend checking with your provider or referring to the specific benefits details for your plan to determine your deductible amount

清理资源

清理 Azure 资源

本文中创建的 Azure 资源将计费给 Azure 订阅。 如果不希望将来需要这些资源,请将其删除,以避免产生更多费用。 使用以下命令删除 Azure 资源并删除源代码:

azd down --purge

清理 GitHub Codespaces

删除 GitHub Codespaces 环境可确保可以最大程度地提高帐户获得的每核心免费小时数权利。

重要

有关 GitHub 帐户权利的详细信息,请参阅 GitHub Codespaces 每月包含的存储和核心小时数

  1. 登录到 GitHub Codespaces 仪表板

  2. 找到从 Azure-Samples/azure-search-openai-demo-java GitHub 存储库中源的当前正在运行的 Codespaces。

    所有正在运行的 Codespace 的屏幕截图,包括其状态和模板。

  3. 打开代码空间的上下文菜单,然后选择 删除

    单个代码空间的上下文菜单的屏幕截图,其中突出显示了“删除”选项。

问题是如何回答的?

该应用分为两个应用:

  • 将 React 框架与 Vite 生成工具配合使用的前端 JavaScript 应用程序。
  • 后端 Java 应用程序回答了问题。

后端 /chat API 逐步完成获取答案的过程:

  • 生成 RAG 选项:创建一组用于生成答案的选项。
  • 使用 RAG 选项创建方法:结合使用基于检索的模型和基于生成的模型,以创建一种生成准确且自然响应的方法。
  • 使用 RAG 选项和之前的对话运行方法:使用方法和 RAG 选项,根据之前的对话生成答案。 答案包括有关用于生成响应的文档的信息。

获取帮助

此示例存储库提供 故障排除信息。 如果您的问题尚未解决,请在存储库的 议题中记录下来。

后续步骤