本文介绍如何部署和运行适用于 Python 的企业聊天应用示例。 此示例使用 Python、azure OpenAI 服务和 Azure AI 搜索中的检索扩充生成(RAG)实现聊天应用,以获取虚构公司员工福利的解答。
关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人
聊天机器人架构概述
下图显示了聊天应用的简单体系结构:
体系结构的关键组件包括:
- 用于托管交互式聊天体验的 Web 应用程序。
- 用于从自己的数据获取答案的 Azure AI 搜索资源。
- 要提供的 Azure OpenAI 服务:
- 用于增强自有数据搜索性能的关键字。
- 来自 OpenAI 模型的解答。
- 来自 ada 模型的嵌入
消耗成本
此体系结构中的大多数资源使用基本定价层或消耗定价层。 消耗定价基于使用量,这意味着你只需为使用的部分付费。 完成本文将收取一定费用,但费用极少。 完成本文后,可以删除资源以停止产生费用。
详细了解 示例存储库中的成本。
环境准备
开发容器 环境提供了完成本文所需的所有依赖项。 可以在 GitHub Codespaces(在浏览器中)或在本地使用 Visual Studio Code 运行开发容器。
若要使用本文,需要满足以下先决条件:
- Azure 订阅 - 免费创建订阅
- Azure 帐户权限 - Azure 帐户必须具有 Microsoft.Authorization/roleAssignments/write 权限,例如[用户访问管理员]或[所有者]。
- 已在所需的 Azure 订阅中授予对 Azure OpenAI 的访问权限。 目前,仅应用程序授予对此服务的访问权限。 可以通过在 https://aka.ms/oai/a***ess 上填写表单来申请对 Azure OpenAI 的访问权限。 如果有任何问题,请在此存储库上提出问题以联系Azure。
- [Azure 开发人员 CLI]
- Docker Desktop - 启动 Docker Desktop (如果尚未运行)
- Visual Studio Code
- 开发容器扩展
打开开发环境
现在从安装了完成本文所需的所有依赖项的开发环境开始。
适用于 Visual Studio Code 的开发容器扩展要求在本地计算机上安装 Docker。 扩展使用 Docker 主机在本地托管开发容器,该主机已预安装完成本文所需的合适的开发人员工具和依赖项。
-
在空目录的上下文中打开 Visual Studio Code。
-
确保在 Visual Studio Code 中安装了开发容器扩展。
-
在编辑器中打开新终端。 可以使用主菜单导航到“终端”菜单选项,然后选择“新建终端”选项。
-
使用 Azure Developer CLI 登录到 Azure。
azd auth login
出现提示时,请从终端复制代码,然后将其粘贴到浏览器中。 按照说明使用 Azure 帐户进行身份验证。
-
创建一个文件夹并将其初始化,以在 Azure Developer CLI 中使用示例项目:
azd init -t azure-search-openai-demo
无需克隆此存储库。
-
打开命令面板,搜索“开发容器”命令,然后选择“开发容器:在容器中重新打开”。Visual Studio Code 可能会自动提示重新打开在开发容器中的现有文件夹。 这在功能上等效于使用命令面板重新打开容器中的当前工作区。
-
再次重新打开终端窗口(Ctrl + `),将其保持打开状态。
-
此项目中的剩余练习在此开发容器的上下文中进行。
部署和运行
示例存储库包含将聊天应用部署到 Azure 所需的所有代码和配置文件。 以下步骤将指导完成将示例部署到 Azure 的过程。
将聊天应用部署到 Azure
重要
在本部分中创建的 Azure 资源的即时成本,主要来自 Azure AI 搜索资源。 即使在完全执行命令之前中断命令,这些资源也会产生费用。
-
运行以下 Azure Developer CLI 命令来预配 Azure 资源并部署源代码:
azd up
-
当系统提示输入环境名称时,请使用小写字母的简短名称。 例如
myenv
。 它用作资源组名称的一部分。 -
出现提示时,选择要在其中创建资源的订阅。
-
当系统第一次提示你选择位置时,请选择你附近的位置。 此位置用于大多数资源,包括托管。
-
如果系统提示你输入 OpenAI 模型的位置,请选择你附近的位置。 如果可以使用与第一个位置相同的位置,请选择该位置。
-
等待应用部署完成。 部署可能需要 5-10 分钟才能完成。
-
成功部署应用程序后,终端中会显示一个 URL。
-
选择标记为
(✓) Done: Deploying service webapp
的 URL 在浏览器中打开聊天应用程序。
使用聊天应用从 PDF 文件获取答案
聊天应用预加载了 PDF 文件中的员工权益信息。 可以使用聊天应用询问有关权益的问题。 以下步骤将引导你完成使用聊天应用的过程。
- 在浏览器中,选择或输入 在性能评审中会发生什么情况? 在聊天文本框中。
2. 从答案中选择引文。
-
在右窗格中,使用选项卡了解如何生成答案。
Tab 说明 思考过程 这是聊天中交互的脚本。 可以查看系统提示 ( content
) 和用户问题 (content
)。支持内容 这包括用于回答你的问题的信息和来源材料。 开发人员设置中记录了来源材料引文的数量。 默认值为 3。 引文 这会显示包含引文的原始页面。 -
完成后,再次选择所选选项卡以关闭窗格。
使用聊天应用设置更改答复行为
聊天的智能由 OpenAI 模型和用于与模型交互的设置确定。
设置 | 说明 |
---|---|
替代提示模板 | 这是用于生成答案的提示。 |
检索这么多搜索结果 | 这是用于生成答案的搜索结果数。 可以在引文的“思考过程”和“支持内容”选项卡中看到这些返回的来源。 |
排除类别 | 这是从搜索结果中排除的文档类别。 |
使用语义排名程序进行检索 | 这是 Azure AI 搜索的一项功能,它使用机器学习来提高搜索结果的相关性。 |
使用查询上下文摘要而不是整个文档 | 当同时检查 Use semantic ranker 和 Use query-contextual summaries 时,LLM 使用从排名最高的文档中的关键段落(而不是所有段落)中提取的标题。 |
建议后续问题 | 让聊天应用根据答案建议后续问题。 |
检索模式 | 矢量 + 文本意味着搜索结果基于文档的文本和文档嵌入。 矢量意味着搜索结果基于文档嵌入。 文本意味着搜索结果基于文档的文本。 |
流式聊天完成响应 | 流式处理响应,而不是等待,直到完整的答案可用于响应。 |
以下步骤将引导你完成更改设置的过程。
-
在浏览器中,选择**“开发人员设置**”选项卡。
-
选中“建议后续问题”复选框,然后再次提出相同的问题。
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?
-
在“设置”选项卡中,取消选择“使用语义排名程序进行检索”。
-
再次问同样的问题?
What happens in a performance review?
-
答案有什么区别?
借助语义排名器:在 Contoso Electronics 进行绩效审查期间,员工将有机会讨论他们在工作场所的成功和挑战(1)。 审查将提供积极和建设性的反馈,以帮助员工发展和发展其角色(1)。 员工将收到绩效评审的书面摘要,其中包括对即将到来的一年(1)绩效、反馈和目标和目标的评级。 绩效评审是经理和员工之间的双向对话(1)。
没有语义排名器:在 Contoso Electronics 进行绩效评审期间,员工有机会在工作场所讨论他们的成功和挑战。 提供了积极和建设性的反馈,以帮助员工发展和发展其角色。 给出绩效评审的书面摘要,包括即将来临的一年的性能、反馈和目标评分。 审查是经理和员工之间的双向对话(1)。
关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人