使用 Azure OpenAI 和 Azure AI Search 构建 RAG 聊天应用 (Python)
此解决方案使用 RAG(检索增强生成)技术,基于您自己的文档创建类似 ChatGPT 的前端体验。它使用 Azure OpenAI Service 访问 GPT 模型,并使用 Azure AI Search 进行数据索引和检索。
此解决方案的后端使用 Python 编写。此外,还有基于此的 JavaScript、.NET 和 Java 示例。了解有关使用 Azure AI Services 开发 AI 应用的更多信息。
重要安全须知
此模板及其包含的应用代码和配置,旨在展示 Microsoft Azure 特定服务与工具。我们强烈建议客户在未实施或启用额外安全功能的情况下,不要将此代码用于生产环境。请参阅我们的生产化指南获取建议,并查阅Azure OpenAI 落地参考架构以了解更多最佳实践。
目录

本示例展示了使用检索增强生成(Retrieval Augmented Generation)模式,基于自有数据创建类似 ChatGPT 体验的几种方法。它使用 Azure OpenAI Service 访问 GPT 模型(gpt-5.4-mini),并使用 Azure AI Search 进行数据索引和检索。
该仓库包含示例数据,因此可以端到端地直接试用。在此示例应用中,我们使用了一家名为 Zava 的虚构公司,该体验允许其员工询问有关福利、内部政策以及职位描述和角色的问题。
功能
- 聊天(多轮)界面
- 为每个答案渲染引用和思维过程
- 在 UI 中直接包含设置,以调整行为并试验选项
- 集成 Azure AI Search 用于文档的索引和检索,支持多种文档格式以及云数据摄取
- 可选使用多模态模型对图像密集型文档进行推理
- 可选添加语音输入/输出以提升无障碍性
- 可选通过 Microsoft Entra 自动化用户登录和数据访问
- 使用 Application Insights 进行性能跟踪和监控
架构图

Azure 账户要求
重要: 为了部署和运行此示例,您需要:
- Azure 账户。如果您是 Azure 的新用户,免费获取 Azure 账户 即可获得一些用于入门的免费 Azure 额度。请参阅使用免费试用进行部署的指南。
- Azure 账户权限:
- 您的 Azure 账户必须具有
Microsoft.Authorization/roleAssignments/write权限,例如 基于角色的访问控制管理员、用户访问管理员 或 所有者。如果您没有订阅级别的权限,则必须被授予现有资源组的 RBAC 权限,并部署到该现有组。 - 您的 Azure 账户还需要在订阅级别具有
Microsoft.Resources/deployments/write权限。
- 您的 Azure 账户必须具有
成本估算
价格因区域和使用情况而异,因此无法预测您的确切使用成本。 但是,您可以尝试使用Azure 定价计算器 来估算以下资源的费用。
- Azure Container Apps: 自 2024 年 10 月 28 日起,作为应用部署的默认主机。更多详情请参阅 ACA 部署指南。采用 1 个 CPU 核心、2 GB 内存、最少 0 个副本的 Consumption 计划。按使用量付费(Pay-as-You-Go)定价。定价
- Azure Container Registry: Basic 层。定价
- Azure App Service: 仅当您按照 App Service 部署指南 部署到 Azure App Service 时才会配置。Basic 层,1 个 CPU 核心,1.75 GB 内存。按小时计费。定价
- Azure OpenAI: Standard 层,GPT 和 Ada 模型。按每 1K 使用的 token 计费,且每个问题至少使用 1K tokens。定价
- Azure AI Document Intelligence: 使用预构建布局的 SO (Standard) 层。按文档页数计费,示例文档总计 261 页。定价
- Azure AI Search: Basic 层,1 个副本,免费级别的语义搜索。按小时计费。定价
- Azure Blob Storage: 采用 ZRS (Zone-redundant storage) 的 Standard 层。按存储和读取操作计费。定价
- Azure Cosmos DB: 仅当您启用了 使用 Cosmos DB 的聊天历史 时才会配置。Serverless 层。按请求单元和存储计费。定价
- Azure AI Vision: 仅当您启用了 多模态方法 时才会配置。按每 1K 交易计费。定价
- Azure AI Content Understanding: 仅当您启用了 媒体描述 时才会配置。按每 1K 图像计费。定价
- Azure Monitor: Pay-as-you-go 层。成本基于摄入的数据量。定价
为降低成本,您可以将各种服务切换到免费 SKU,但这些 SKU 存在限制。 请参阅此指南以了解以最低成本部署的更多详细信息。
⚠️ 为避免不必要的成本,如果应用不再使用,请记得将其下线,
方法是在 Portal 中删除资源组或运行 azd down。
入门
您有几种设置此项目的选项。 最简单的入门方式是使用 GitHub Codespaces,因为它会为您设置所有工具, 但您也可以根据需要在本地设置。
GitHub Codespaces
您可以使用 GitHub Codespaces 虚拟运行此仓库,它将在您的浏览器中打开基于 Web 的 VS Code:
代码空间打开后(这可能需要几分钟),打开一个终端窗口。
VS Code 开发容器
一个相关的选项是 VS Code Dev Containers,它将使用 Dev Containers 扩展 在本地 VS Code 中打开该项目:
本地环境
- 安装所需的工具:
- Azure Developer CLI
- Python 3.10, 3.11, 3.12, 3.13, or 3.14
- Important: 在 Windows 中,Python 和 pip 包管理器必须在路径中,安装脚本才能正常工作。
- Important: 确保您可以从控制台运行
python --version。在 Ubuntu 上,您可能需要运行sudo apt install python-is-python3以将python链接到python3。
- Node.js 20+
- Git
- Powershell 7+ (pwsh) - 仅适用于 Windows 用户。
- Important: 确保您可以从 PowerShell 终端运行
pwsh.exe。如果失败,您可能需要升级 PowerShell。
- Important: 确保您可以从 PowerShell 终端运行
- Python 3.10, 3.11, 3.12, 3.13, or 3.14
-
创建一个新文件夹并在终端中切换到该文件夹。
-
运行此命令以下载项目代码:
azd init -t azure-search-openai-demo
请注意,此命令将初始化一个 git 仓库,因此您无需克隆此仓库。
部署
以下步骤将配置 Azure 资源并将应用程序代码部署到 Azure Container Apps。若要改为部署到 Azure App Service,请遵循 app service 部署指南。
-
登录您的 Azure 账户:
azd auth login
对于 GitHub Codespaces 用户,如果上一条命令失败,请尝试:
azd auth login --use-device-code
```
1. 创建一个新的 azd 环境:
```shell
azd env new
```
输入将用于资源组的名称。
这将在 `.azure` 文件夹中创建一个新文件夹,并将其设置为后续对 `azd` 调用的活动环境。
1. (可选)这是通过设置环境变量来自定义部署的环节,以便 [使用现有资源](docs/deploy_existing.md)、[启用可选功能(如身份验证或视觉)](docs/deploy_features.md)、或 [部署低成本选项](docs/deploy_lowcost.md)、或 [使用 Azure 免费试用进行部署](docs/deploy_freetrial.md)。
1. 运行 `azd up` - 这将配置 Azure 资源并将此示例部署到这些资源中,包括基于在 `./data` 文件夹中找到的文件构建搜索索引。
- **重要**:请注意,此命令创建的资源将立即产生费用,主要来自 AI Search 资源。即使您在命令完全执行之前中断它,这些资源也可能产生费用。您可以运行 `azd down` 或手动删除资源以避免不必要的支出。
- 系统将提示您选择两个位置,一个用于大多数资源,另一个用于 OpenAI 资源,目前这是一个简短的列表。该位置列表基于 [OpenAI 模型可用性表](https://learn.microsoft.com/azure/cognitive-services/openai/concepts/models#model-summary-table-and-region-availability),并可能随着可用性的变化而过时。
1. 应用程序成功部署后,您将在控制台中看到一个打印的 URL。 点击该 URL 在浏览器中与应用程序交互。
它将如下所示:

> 注意:在显示 'SUCCESS' 后,应用可能需要 5-10 分钟才能完全部署。如果您看到 "Python Developer" 欢迎屏幕或错误页面,请等待片刻并刷新页面。
### 再次部署
如果您仅更改了 `app` 文件夹中的后端/前端代码,则无需重新配置 Azure 资源。您只需运行:
```shell
azd deploy
如果你已更改基础设施文件(infra 文件夹或 azure.yaml),则需要重新配置 Azure 资源。你可以通过运行以下命令来完成:
azd up
运行开发服务器
只有在成功运行 azd up 命令之后,才能在本地运行开发服务器。如果尚未运行,请按照上述 部署 步骤操作。
- 如果最近未登录,请运行
azd auth login。 - 启动服务器:
Windows:
./app/start.ps1
Linux/Mac:
./app/start.sh
VS Code:运行“VS Code Task: Start App”任务。
也可以启用热加载或 VS Code 调试器。 请参阅本地开发指南]中的更多提示。
使用应用
- 在 Azure 中:导航到由 azd 部署的 Azure WebApp。URL 会在 azd 完成时打印出来(作为 "Endpoint"),或者你可以在 Azure 门户中找到它。
- 本地运行:导航到 127.0.0.1:50505
进入 Web 应用后:
- 在聊天中尝试不同的主题。尝试追问、澄清、要求简化或详细阐述答案等。
- 探索引用和来源
- 点击“设置”以尝试不同的选项、调整提示词等。
清理
要清理此示例创建的所有资源:
- Run
azd down - When asked if you are sure you want to continue, enter
y - When asked if you want to permanently delete the resources, enter
y
资源组及其所有资源将被删除。
指导
你可以在 docs 文件夹中找到详尽的文档:
资源
- 📖 文档:开始使用“使用您的数据进行聊天”示例
- 📖 博客:使用 ChatGPT 革新您的企业数据:基于 Azure OpenAI 和 AI Search 的下一代应用
- 📖 文档:Azure AI Search
- 📖 文档:Azure OpenAI Service
- 📖 文档:比较 Azure OpenAI 和 OpenAI
- 📖 博客:使用 Azure AI Search 在生成式 AI 应用中实现访问控制
- 📺 演讲:在 Azure 上快速构建和部署融入您自有数据的 OpenAI 应用
- 📺 视频:RAG 深入解析系列
获取帮助
这是一个示例,旨在展示现代生成式 AI 应用的功能,以及如何在 Azure 中构建它们。 如需有关部署此示例的帮助,请在 GitHub Issues 中发帖。如果您是 Microsoft 员工,也可以在 我们的 Teams 频道 中发帖。
此仓库由维护者提供支持,而非 Microsoft 支持, 因此请使用上述支持机制,我们将尽力为您提供帮助。
如需了解在 Azure 上开发 AI 解决方案的一般问题, 请加入 Azure AI Foundry 开发者社区:
注意
注意:本演示中使用的 PDF 文档包含使用语言模型(Azure OpenAI Service)生成的信息。这些文档中包含的信息仅用于演示目的,并不代表 Microsoft 的观点或信念。Microsoft 不对本文档中包含的信息的完整性、准确性、可靠性、适用性或可用性作出任何明示或暗示的陈述或保证。版权所有 Microsoft。