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

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

观看以下 演示视频

通过按照本文中的说明操作,您可以:

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

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

本文是一系列文章的一部分,介绍如何使用 Azure OpenAI 和 Azure AI 搜索构建聊天应用。

该系列中的其他文章包括:

注意

本文使用一个或多个 AI 应用模板 作为本文中的示例和指南的基础。 AI 应用模板提供易于部署的维护良好的参考实现。 它们有助于为您的 AI 应用确保一个优质的开端。

体系结构概述

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

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

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

  • 用于托管交互式聊天体验的 Web 应用程序。

  • 用于从自己的数据获取答案的 Azure AI 搜索资源。

  • Azure OpenAI 提供:

    • 用于增强自有数据搜索性能的关键字。
    • Azure OpenAI 模型的解答。
    • 来自 ada 模型的嵌入。

成本

在此架构中,大多数资源使用基本定价等级或按使用定价。 消耗定价基于使用情况,这意味着你只需为使用的内容付费。 完成本文的费用非常少。 完成文章后,可以删除资源以停止产生费用。

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

先决条件

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

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

打开开发环境

现在开始使用一个已安装所有依赖项的开发环境,来完成这篇文章。

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

重要

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

  1. 开始在 Azure-Samples/azure-search-openai-demo GitHub 存储库 main 分支上创建新的 GitHub 代码空间的过程。

  2. 右键单击以下按钮,并选择 在新窗口 中打开链接,让开发环境和文档同时可用。

    GitHub Codespaces 中打开。

  3. “创建 codespace”页上,查看 codespace 配置设置,然后选择 创建 codespace

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

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

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

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

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

部署和运行

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

将聊天应用部署到 Azure

重要

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

  1. 运行以下 Azure 开发人员 CLI 命令来预配 Azure 资源并部署源代码:

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

  3. 出现提示时,选择一个订阅以创建资源。

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

  5. 如果系统提示输入 Azure OpenAI 模型或 Azure AI 文档智能资源的位置,请选择离你最近的位置。 如果与第一个位置相同的位置可用,请选择该位置。

  6. 在应用部署后等待 5 或 10 分钟,然后再继续。

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

    显示 AZD CLI azd up 过程结束时报告的已部署应用的屏幕截图。

  8. 选择标记为 (✓) Done: Deploying service webapp 的 URL,在浏览器中打开聊天应用程序。

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

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

聊天应用预加载了来自 PDF 文件的员工权益信息。 可以使用聊天应用询问有关权益的问题。 以下步骤将引导你完成使用聊天应用的过程。 你的答案可能因基础模型更新而有所不同。

  1. 在浏览器中的聊天文本框中,选择或输入 “性能评审中会发生什么情况?”

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

  2. 从答案中选择引文。

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

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

    Tab 描述
    思考过程 此选项卡是聊天中交互的脚本。 可以查看系统提示(content)和用户问题(content)。
    支持内容 此选项卡包含回答问题和源材料的信息。 开发人员设置中记录了来源材料引文的数量。 默认值是 3
    引文 此选项卡显示包含引文的原始页面。
  4. 完成后,再次选择选项卡以关闭窗格。

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

聊天的智能由 Azure OpenAI 模型和用于与模型交互的设置确定。

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

设置 描述
替代提示模板 重写用于根据问题和搜索结果生成答案的提示。
温度 将请求的温度设置为生成答案的大型语言模型 (LLM)。 较高的温度会引发更多创造性的反应,但这些反应可能不那么有根据。
Seed 设置种子以提高模型的响应的可重现性。 种子可以是任意整数。
最低搜索分数 为从 Azure AI 搜索返回的搜索结果设置最低分数。 分数范围取决于您使用的是 混合(默认)、仅矢量还是仅文本
最低重新排序器分数 为从语义重排序器返回的搜索结果设置最低分。 分数始终介于 0 和 4 之间。 分数越高,结果与问题在语义上越相关。
检索这么多搜索结果 设置要从 Azure AI 搜索检索的搜索结果数。 更多结果可能会增加找到正确答案的可能性。 但更多的结果可能导致模型“在中间丢失”。可以在引文的思维过程支持内容选项卡中查看这些源。
排除类别 指定要从搜索结果中排除的类别。 默认数据集中没有使用任何类别。
使用语义排名器进行检索 启用 Azure AI 搜索 语义排名器,该模型基于用户查询的语义相似性重新计算搜索结果。
使用语义字幕 向 LLM 发送语义标题,而不是完整的搜索结果。 语义标题是在语义排名过程中从搜索结果中提取的。
建议后续问题 要求 LLM 根据用户的查询建议后续问题。
检索模式 设置 Azure AI 搜索查询的检索模式。 矢量 + 文本 (混合) 使用矢量搜索和全文搜索的组合。 矢量仅使用矢量搜索。 文本仅使用全文搜索。 混合通常是最佳的。
流式处理聊天完成响应 在生成聊天 UI 时,连续地将响应流式传输到聊天 UI。

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

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

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

    What happens in a performance review?
    

    聊天返回了建议的后续问题,例如以下示例:

    1. What is the frequency of performance reviews?
    2. How can employees prepare for a performance review?
    3. Can employees dispute the feedback received during the performance review?
    
  3. 设置选项卡上,取消选中使用语义排序器进行检索复选框。

  4. 再次询问相同的问题。

    What happens in a performance review?
    
  5. 答案有什么区别?

    • 使用语义排序器:在 Contoso Electronics 的绩效评估中,员工有机会讨论他们在工作中的成功与挑战(1)。 审查提供了积极和建设性的反馈,以帮助员工发展和发展其角色(1)。 员工收到绩效评审的书面摘要,其中包括对他们绩效的评估、反馈以及即将到来的一年的目标。 绩效评审是经理和员工之间的双向对话(1)。
    • 不使用语义排序器:在 Contoso Electronics 进行绩效考核期间,员工将有机会讨论他们在工作场所取得的成功和面临的挑战。 提供了积极和建设性的反馈,以帮助员工发展和发展其角色。 提供绩效评审的书面总结,其中包括绩效评分、反馈以及来年的目标。 审查是经理和员工之间的双向对话(1)。

清理资源

以下步骤将引导你完成清理所用资源的过程。

清理 Azure 资源

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

运行以下 Azure 开发人员 CLI 命令以删除 Azure 资源并删除源代码:

azd down --purge --force

这些开关提供:

  • purge:立即清除已删除的资源,以便每分钟重复使用 Azure OpenAI 令牌。
  • force:删除以无提示方式进行,无需用户同意。

清理 GitHub Codespaces 和 Visual Studio Code

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

重要

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

  1. 登录到 GitHub Codespaces 仪表板

  2. 找到当前运行的代码空间,这些代码空间源自 Azure-Samples/azure-search-openai-demo GitHub 存储库。

    屏幕截图,显示所有正在运行的代码空间,包括其状态和模板。

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

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

获取帮助

此示例存储库提供 故障排除信息

如果您的问题没有得到解决,请将问题添加到代码库的 问题 页面。