本文介绍如何部署和运行适用于 Python 的企业聊天应用示例。 此示例使用 Python、Azure OpenAI 服务和 Azure AI 搜索中的检索扩充生成(RAG)实现聊天应用,以获取虚构公司员工福利的解答。
关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人
下图显示了聊天应用的简单体系结构:
体系结构的关键组件包括:
此体系结构中的大多数资源使用基本定价层或消耗定价层。 消耗定价基于使用量,这意味着你只需为使用的部分付费。 完成本文将收取一定费用,但费用极少。 完成本文后,可以删除资源以停止产生费用。
详细了解 示例存储库中的成本。
开发容器 环境提供了完成本文所需的所有依赖项。 可以在 GitHub Codespaces(在浏览器中)或在本地使用 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 AI 搜索资源。 即使在完全执行命令之前中断命令,这些资源也会产生费用。
运行以下 Azure Developer CLI 命令来预配 Azure 资源并部署源代码:
azd up
当系统提示输入环境名称时,请使用小写字母的简短名称。 例如 myenv
。 它用作资源组名称的一部分。
出现提示时,选择要在其中创建资源的订阅。
当系统第一次提示你选择位置时,请选择你附近的位置。 此位置用于大多数资源,包括托管。
如果系统提示你输入 OpenAI 模型的位置,请选择你附近的位置。 如果可以使用与第一个位置相同的位置,请选择该位置。
等待应用部署完成。 部署可能需要 5-10 分钟才能完成。
成功部署应用程序后,终端中会显示一个 URL。
选择标记为 (?) Done: Deploying service webapp
的 URL 在浏览器中打开聊天应用程序。
聊天应用预加载了 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产品研发负责人