零售多代理解决方案 - 基础设施模板 第5章:生产部署包 课程主页:AZD 初学者指南 相关章节:第5章:多代理AI解决方案 场景指南:完整架构 快速部署:一键部署 ⚠️ 仅限基础设施模板 此ARM模板用于部署多代理系统的Azure资源。 部署内容(15-25分钟): ✅ Azure OpenAI(GPT-4o、GPT-4o-mini、跨3个区域的嵌入模型) ✅ AI搜索服务(空白,准备创建索引) ✅ 容器应用(占位镜像,准备好您的代码) ✅ 存储、Cosmos DB、Key Vault、Application Insights 未包含内容(需要开发): ❌ 代理实现代码(客户代理、库存代理) ❌ 路由逻辑和API端点 ❌ 前端聊天界面 ❌ 搜索索引架构和数据管道 ❌
第5章:生产部署包
⚠️ 仅限基础设施模板
此ARM模板用于部署多代理系统的Azure资源。部署内容(15-25分钟):
- ✅ Azure OpenAI(GPT-4o、GPT-4o-mini、跨3个区域的嵌入模型)
- ✅ AI搜索服务(空白,准备创建索引)
- ✅ 容器应用(占位镜像,准备好您的代码)
- ✅ 存储、Cosmos DB、Key Vault、Application Insights
未包含内容(需要开发):
- ❌ 代理实现代码(客户代理、库存代理)
- ❌ 路由逻辑和API端点
- ❌ 前端聊天界面
- ❌ 搜索索引架构和数据管道
- ❌ 预计开发时间:80-120小时
使用此模板的条件:
- ✅ 您希望为多代理项目配置Azure基础设施
- ✅ 您计划单独开发代理实现
- ✅ 您需要生产就绪的基础设施基线
不适用的情况:
- ❌ 您期望立即获得一个可用的多代理演示
- ❌ 您正在寻找完整的应用代码示例
此目录包含一个全面的Azure资源管理器(ARM)模板,用于部署多代理客户支持系统的基础设施基础。该模板会配置所有必要的Azure服务,并正确连接,准备好您的应用开发。
部署后,您将拥有: 生产就绪的Azure基础设施
完成系统所需: 代理代码、前端UI和数据配置(参见架构指南)
✅ Azure OpenAI服务(准备好API调用)
✅ Azure AI搜索(空白 - 准备配置)
✅ Azure存储账户(空白 - 准备上传)
documents,uploads⚠️ 容器应用环境(部署了占位镜像)
✅ Azure Cosmos DB(空白 - 准备数据)
✅ Azure Key Vault(可选 - 准备存储机密)
✅ Application Insights(可选 - 监控已激活)
✅ 文档智能(准备好API调用)
✅ 必应搜索API(准备好API调用)
| 模式 | OpenAI容量 | 容器实例 | 搜索层 | 存储冗余 | 最适合 |
|---|---|---|---|---|---|
| 最小化 | 10K-20K TPM | 0-2副本 | 基础 | LRS(本地) | 开发/测试、学习、概念验证 |
| 标准 | 30K-60K TPM | 2-5副本 | 标准 | ZRS(区域) | 生产、中等流量(<10K用户) |
| 高级 | 80K-150K TPM | 5-10副本,区域冗余 | 高级 | GRS(地理) | 企业、高流量(>10K用户),99.99% SLA |
成本影响:
容量规划:
Azure CLI(版本2.50.0或更高)
az --version # 检查版本 az login # 认证
有效的Azure订阅,具有所有者或贡献者权限
az account show # 验证订阅
在部署之前,请验证目标区域是否有足够的配额:
# 检查 Azure OpenAI 在您所在地区的可用性 az cognitiveservices account list-skus \ --kind OpenAI \ --location eastus2 # 验证 OpenAI 配额(以 gpt-4o 为例) az cognitiveservices usage list \ --location eastus2 \ --query "[?name.value=='OpenAI.Standard.gpt-4o']" # 检查容器应用配额 az provider show \ --namespace Microsoft.App \ --query "resourceTypes[?resourceType=='managedEnvironments'].locations"
最低要求配额:
如果配额不足:
az support tickets create \ --ticket-name "OpenAI-Quota-Increase" \ --severity "minimal" \ --description "Request quota increase for Azure OpenAI GPT-4o in eastus2"
# 克隆或下载模板文件 git clone <repository-url> cd examples/retail-multiagent-arm-template # 使部署脚本可执行 chmod +x deploy.sh # 使用默认设置进行部署 ./deploy.sh -g myResourceGroup # 为生产环境部署高级功能 ./deploy.sh -g myProdRG -e prod -m premium -l eastus2
# 创建资源组 az group create --name myResourceGroup --location eastus2 # 部署模板 az deployment group create \ --resource-group myResourceGroup \ --template-file azuredeploy.json \ --parameters azuredeploy.parameters.json
| 阶段 | 时长 | 发生了什么 |
|---|---|---|
| 模板验证 | 30-60秒 | Azure验证ARM模板语法和参数 |
| 资源组设置 | 10-20秒 | 创建资源组(如有需要) |
| OpenAI配置 | 5-8分钟 | 创建3-4个OpenAI账户并部署模型 |
| 容器应用 | 3-5分钟 | 创建环境并部署占位容器 |
| 搜索与存储 | 2-4分钟 | 配置AI搜索服务和存储账户 |
| Cosmos DB | 2-3分钟 | 创建数据库并配置容器 |
| 监控设置 | 2-3分钟 | 设置Application Insights和日志分析 |
| RBAC配置 | 1-2分钟 | 配置托管身份和权限 |
| 总部署时间 | 15-25分钟 | 完成基础设施准备 |
部署后:
# 验证所有资源是否成功部署 az resource list \ --resource-group myResourceGroup \ --query "[?provisioningState!='Succeeded'].{Name:name, Status:provisioningState, Type:type}" \ --output table
预期: 空表(所有资源显示“成功”状态)
# 列出所有OpenAI账户 az cognitiveservices account list \ --resource-group myResourceGroup \ --query "[?kind=='OpenAI'].{Name:name, Location:location, Status:properties.provisioningState}" \ --output table # 检查主要区域的模型部署 OPENAI_NAME=$(az cognitiveservices account list \ --resource-group myResourceGroup \ --query "[?kind=='OpenAI'] | [0].name" -o tsv) az cognitiveservices account deployment list \ --name $OPENAI_NAME \ --resource-group myResourceGroup \ --output table
预期:
# 获取容器应用程序URL az containerapp list \ --resource-group myResourceGroup \ --query "[].{Name:name, URL:properties.configuration.ingress.fqdn, Status:properties.runningStatus}" \ --output table # 测试路由器端点(占位符图像将响应) ROUTER_URL=$(az containerapp show \ --name retail-router \ --resource-group myResourceGroup \ --query "properties.configuration.ingress.fqdn" -o tsv) echo "Testing: https://$ROUTER_URL" curl -I https://$ROUTER_URL || echo "Container running (placeholder image - expected)"
预期:
# 获取OpenAI端点和密钥 OPENAI_ENDPOINT=$(az cognitiveservices account show \ --name $OPENAI_NAME \ --resource-group myResourceGroup \ --query "properties.endpoint" -o tsv) OPENAI_KEY=$(az cognitiveservices account keys list \ --name $OPENAI_NAME \ --resource-group myResourceGroup \ --query "key1" -o tsv) # 测试GPT-4o部署 curl "${OPENAI_ENDPOINT}openai/deployments/gpt-4o/chat/completions?api-version=2024-08-01-preview" \ -H "Content-Type: application/json" \ -H "api-key: $OPENAI_KEY" \ -d '{ "messages": [{"role": "user", "content": "Say hello"}], "max_tokens": 10 }'
预期: JSON响应包含聊天完成(确认OpenAI功能正常)
✅ 部署后可用:
❌ 尚未工作(需要开发):
下一步: 参见部署后配置以开发和部署您的应用
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
projectName |
string | "retail" | 所有资源名称的前缀 |
location |
string | 资源组位置 | 主部署区域 |
secondaryLocation |
string | "westus2" | 多区域部署的次区域 |
tertiaryLocation |
string | "francecentral" | 嵌入模型的区域 |
environmentName |
string | "dev" | 环境标识(开发/预生产/生产) |
deploymentMode |
string | "standard" | 部署配置(最小化/标准/高级) |
enableMultiRegion |
bool | true | 启用多区域部署 |
enableMonitoring |
bool | true | 启用Application Insights和日志记录 |
enableSecurity |
bool | true | 启用Key Vault和增强安全性 |
编辑azuredeploy.parameters.json:
{ "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentParameters.json#", "contentVersion": "1.0.0.0", "parameters": { "projectName": { "value": "mycompany" }, "environmentName": { "value": "prod" }, "deploymentMode": { "value": "premium" }, "location": { "value": "eastus2" } } }
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ Frontend │ │ Agent Router │ │ Agents │ │ (Container App) │───▶│ (Container App) │───▶│ Customer + Inv │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ AI Search │ │ Azure OpenAI │ │ Storage │ │ (Vector DB) │ │ (Multi-region) │ │ (Documents) │ └─────────────────┘ └─────────────────┘ └─────────────────┘ │ │ ▼ ▼ ┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐ │ Cosmos DB │ │ App Insights │ │ Key Vault │ │ (Chat History) │ │ (Monitoring) │ │ (Secrets) │ └─────────────────┘ └─────────────────┘ └─────────────────┘
deploy.sh脚本提供交互式部署体验:
# 显示帮助 ./deploy.sh --help # 基本部署 ./deploy.sh -g myResourceGroup # 使用自定义设置的高级部署 ./deploy.sh \ -g myProductionRG \ -p companyname \ -e prod \ -m premium \ -l eastus2 # 无多区域的开发部署 ./deploy.sh \ -g myDevRG \ -e dev \ -m minimal \ --no-multi-region \ --no-security
# 列出部署 az deployment group list --resource-group myResourceGroup --output table # 获取部署详情 az deployment group show \ --resource-group myResourceGroup \ --name retail-deployment-YYYYMMDD-HHMMSS # 监视部署进度 az deployment group create \ --resource-group myResourceGroup \ --template-file azuredeploy.json \ --parameters azuredeploy.parameters.json \ --verbose
成功部署后,以下输出可用:
** 重要提示:** 基础设施已部署,但您需要开发并部署应用程序代码。
ARM 模板创建了空的容器应用,并使用了占位的 nginx 镜像。您需要完成以下任务:
需要开发的内容:
代理实现(30-40 小时)
前端开发(20-30 小时)
后端服务(12-16 小时)
参考: 架构指南 了解详细的实现模式和代码示例
创建与您的数据模型匹配的搜索索引:
# 获取搜索服务详情 SEARCH_NAME=$(az search service list \ --resource-group myResourceGroup \ --query "[0].name" -o tsv) SEARCH_KEY=$(az search admin-key show \ --service-name $SEARCH_NAME \ --resource-group myResourceGroup \ --query "primaryKey" -o tsv) # 使用您的模式创建索引(示例) curl -X POST "https://${SEARCH_NAME}.search.windows.net/indexes?api-version=2023-11-01" \ -H "Content-Type: application/json" \ -H "api-key: ${SEARCH_KEY}" \ -d '{ "name": "products", "fields": [ {"name": "id", "type": "Edm.String", "key": true}, {"name": "title", "type": "Edm.String", "searchable": true}, {"name": "content", "type": "Edm.String", "searchable": true}, {"name": "category", "type": "Edm.String", "filterable": true}, {"name": "content_vector", "type": "Collection(Edm.Single)", "searchable": true, "dimensions": 1536, "vectorSearchProfile": "default"} ], "vectorSearch": { "algorithms": [{"name": "default", "kind": "hnsw"}], "profiles": [{"name": "default", "algorithm": "default"}] } }'
资源:
一旦您拥有产品数据和文档:
# 获取存储账户详情 STORAGE_NAME=$(az storage account list \ --resource-group myResourceGroup \ --query "[0].name" -o tsv) STORAGE_KEY=$(az storage account keys list \ --account-name $STORAGE_NAME \ --resource-group myResourceGroup \ --query "[0].value" -o tsv) # 上传您的文档 az storage blob upload-batch \ --destination documents \ --source /path/to/your/product/docs \ --account-name $STORAGE_NAME \ --account-key $STORAGE_KEY # 示例:上传单个文件 az storage blob upload \ --container-name documents \ --name "product-manual.pdf" \ --file /path/to/product-manual.pdf \ --account-name $STORAGE_NAME \ --account-key $STORAGE_KEY
完成代理代码开发后:
# 1. 创建 Azure 容器注册表(如果需要) az acr create \ --name myregistry \ --resource-group myResourceGroup \ --sku Basic # 2. 构建并推送代理路由器镜像 docker build -t myregistry.azurecr.io/agent-router:v1 /path/to/your/router/code az acr login --name myregistry docker push myregistry.azurecr.io/agent-router:v1 # 3. 构建并推送前端镜像 docker build -t myregistry.azurecr.io/frontend:v1 /path/to/your/frontend/code docker push myregistry.azurecr.io/frontend:v1 # 4. 使用您的镜像更新容器应用 az containerapp update \ --name retail-router \ --resource-group myResourceGroup \ --image myregistry.azurecr.io/agent-router:v1 az containerapp update \ --name retail-frontend \ --resource-group myResourceGroup \ --image myregistry.azurecr.io/frontend:v1 # 5. 配置环境变量 az containerapp update \ --name retail-router \ --resource-group myResourceGroup \ --set-env-vars \ OPENAI_ENDPOINT=secretref:openai-endpoint \ OPENAI_KEY=secretref:openai-key \ SEARCH_ENDPOINT=secretref:search-endpoint \ SEARCH_KEY=secretref:search-key
# 获取您的应用程序 URL ROUTER_URL=$(az containerapp show \ --name retail-router \ --resource-group myResourceGroup \ --query "properties.configuration.ingress.fqdn" -o tsv) # 测试代理端点(代码部署后) curl -X POST "https://${ROUTER_URL}/chat" \ -H "Content-Type: application/json" \ -d '{ "message": "Hello, I need help with my order", "agent": "customer" }' # 检查应用程序日志 az containerapp logs show \ --name retail-router \ --resource-group myResourceGroup \ --follow
架构与设计:
代码示例:
预计总工作量:
# 检查当前配额使用情况 az cognitiveservices usage list --location eastus2 # 请求增加配额 az support tickets create \ --ticket-name "OpenAI-Quota-Increase" \ --severity "minimal" \ --description "Request quota increase for Azure OpenAI in region X"
# 检查容器应用日志 az containerapp logs show \ --name retail-router \ --resource-group myResourceGroup \ --follow # 重启容器应用 az containerapp revision restart \ --name retail-router \ --resource-group myResourceGroup
# 验证搜索服务状态 az search service show \ --name <search-service-name> \ --resource-group myResourceGroup # 测试搜索服务连接 curl -X GET "https://<search-service-name>.search.windows.net/indexes?api-version=2023-11-01" \ -H "api-key: <search-admin-key>"
# 验证所有资源已创建 az resource list \ --resource-group myResourceGroup \ --output table # 检查资源健康状况 az resource list \ --resource-group myResourceGroup \ --query "[?provisioningState!='Succeeded'].{Name:name, Status:provisioningState, Type:type}" \ --output table
# 为托管身份分配必要的角色 az role assignment create \ --assignee <container-app-managed-identity> \ --role "Cognitive Services OpenAI User" \ --scope <openai-resource-id>
| 模式 | OpenAI | 容器应用 | 搜索 | 存储 | 总计估算 |
|---|---|---|---|---|---|
| 最低 | $50-200 | $20-50 | $25-100 | $5-20 | $100-370 | ||
| 标准 | $200-800 | $100-300 | $100-300 | $20-50 | $420-1450 | ||
| 高级 | $500-2000 | $300-800 | $300-600 | $50-100 | $1150-3500 |
# 设置预算提醒 az consumption budget create \ --account-name <subscription-id> \ --budget-name "retail-budget" \ --amount 500 \ --time-grain Monthly \ --start-date 2024-01-01 \ --end-date 2024-12-31
# 使用新参数更新 az deployment group create \ --resource-group myResourceGroup \ --template-file azuredeploy.json \ --parameters azuredeploy.parameters.json \ --mode Incremental
⚡ 准备好部署您的多代理解决方案了吗?
开始: ./deploy.sh -g myResourceGroup
免责声明:
本文档使用AI翻译服务Co-op Translator进行翻译。尽管我们努力确保翻译的准确性,但请注意,自动翻译可能包含错误或不准确之处。原始语言的文档应被视为权威来源。对于重要信息,建议使用专业人工翻译。我们对因使用此翻译而产生的任何误解或误读不承担责任。