使用 RAG 的 .NET 企业聊天示例使用入门

本文介绍如何部署和运行适用于 .NET 的企业聊天应用示例。 此示例在 Azure AI 搜索中实现使用 C#、Azure OpenAI 服务和检索增强生成 (RAG) 的聊天应用,以获取有关虚构公司员工福利的解答。 员工权益聊天应用中植入了各种 PDF 文件,包括员工手册、权益文档和公司角色和期望列表。

按照本文中的说明操作,你将:

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

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

本文是介绍如何使用 Azure Open AI 服务和 Azure AI 搜索生成聊天应用的系列文章的一部分。

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

体系结构概述

在此示例应用程序中,一家名为 Contoso Electronics 的虚构公司向其员工提供聊天应用体验,用于询问有关福利、内部政策以及工作说明和职务的问题。

下图展示了该聊天应用的体系结构:

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

  • 用户界面 - 应用程序的聊天界面是 Blazor WebAssembly 应用程序。 此接口用于接受用户查询、将请求路由到应用程序后端、显示生成的响应。
  • 后端 - 应用程序后端是一个 ASP.NET Core 最小 API。 该后端托管 Blazor 静态 Web 应用程序,负责协调不同服务之间的交互。 此应用程序中使用的服务包括:
    • Azure 认知搜索 - 为存储在 Azure 存储帐户中的数据中的文档编制索引。 这使得文档可以通过矢量搜索功能进行搜索。
    • Azure OpenAI 服务 - 提供大型语言模型 (LLM) 来生成响应。 语义内核与 Azure OpenAI 服务结合使用来协调更复杂的 AI 工作流。

成本

此体系结构中的大多数资源使用基本定价层或消耗定价层。 消耗定价基于使用量,这意味着你只需为使用的部分付费。 完成本文将收取一定费用,但费用极少。 完成本文后,可以删除资源以停止产生费用。

有关详细信息,请参阅 Azure 示例:示例存储库中的成本

先决条件

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

若要依照本文操作,需要满足以下先决条件:

  1. Azure 订阅 - 免费创建订阅
  2. Azure 帐户权限 - Azure 帐户必须具有 Microsoft.Authorization/roleAssignments/write 权限,例如用户访问管理员所有者
  3. 已在所需的 Azure 订阅中授予对 Azure OpenAI 的访问权限。 目前,仅应用程序授予对此服务的访问权限。 可以通过在 https://aka.ms/oai/access 上填写表单来申请对 Azure OpenAI 的访问权限。 如果有任何问题,请在此存储库上提出问题以联系我们。
  4. GitHub 帐户

打开开发环境

现在从安装了完成本文所需的所有依赖项的开发环境开始。

GitHub Codespaces 运行由 GitHub 托管的开发容器,将 Visual Studio Code 网页版作为用户界面。 对于最简单的开发环境,请使用 GitHub Codespaces,以便预先安装完成本文所需的合适的开发人员工具和依赖项。

重要

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

  1. 开始在 Azure-Samples/azure-search-openai-demo-csharp GitHub 存储库的 main 分支上创建新的 GitHub Codespace。

  2. 右键单击以下按钮,然后选择“在新窗口中打开链接”,以便同时提供开发环境和文档

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

    新建 codespace 之前的确认屏幕的截图。

  4. 等待 Codespace 启动。 此启动过程会花费几分钟时间。

  5. 在终端的屏幕底部,使用 Azure Developer CLI 登录到 Azure。

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

  7. 本文中的剩余任务需要在此开发容器的上下文中完成。

部署和运行

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

将聊天应用部署到 Azure

重要

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

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

    azd up
    
  2. 当系统提示输入环境名称时,请使用小写字母的简短名称。 例如 myenv。 该名称充当资源组名称的一部分。

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

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

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

  6. 等待应用部署完成。 部署可能需要长达 20 分钟才能完成。

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

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

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

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

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

  1. 在浏览器中,使用左侧导航导航到“聊天”页

  2. 在聊天文本框中,选择或输入“我的 Northwind Health Plus 计划中包含哪些非标准的内容?”。 答复与下图类似

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

  3. 从答案中选择引文。 此时会打开一个弹出窗口,其中显示信息的来源。

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

  4. 在答案框顶部的选项卡之间导航,了解如何生成答案。

    Tab 说明
    思考过程 这是聊天中交互的脚本。 可以查看系统提示 (content) 和用户问题 (content)。
    支持内容 这包括用于回答你的问题的信息和来源材料。 开发人员设置中记录了来源材料引文的数量。 默认值为 3。
    引文 这会显示包含引文的来源页面。
  5. 完成后,导航回答案选项卡。

使用聊天应用设置更改答复行为

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

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

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

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

  1. 在浏览器中,选择页面右上角的齿轮图标。

  2. 如果未选中,请选中“建议后续问题”复选框,然后再次提出相同的问题

    What is included in my Northwind Health Plus plan that is not in standard?
    

    聊天可能会返回后续问题建议。

  3. 在“设置”选项卡中,取消选择“使用语义排名程序进行检索”

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

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

    使用了语义排序器的答复提供了单个答案。 没有使用语义排名的答复返回了不太直接的答案。

清理资源

清理 Azure 资源

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

运行以下 Azure Developer CLI 命令以删除 Azure 资源并删除源代码:

azd down --purge

清理 GitHub Codespaces

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

重要

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

  1. 登录到 GitHub Codespaces 仪表板 (https://github.com/codespaces)。

  2. 找到当前正在运行的、源自 Azure-Samples/azure-search-openai-demo-csharp GitHub 存储库的 codespace。

    所有运行的 codespace 的屏幕截图,包括它们的状态和模版。

  3. 打开 codespace 的上下文菜单,然后选择“删除”。

    单个 codespace 的上下文菜单的屏幕截图,突出显示了删除选项。

获取帮助

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

如果未解决问题,请将问题记录到存储库的问题部分。

后续步骤