你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
注释
本文档指的是 Microsoft Foundry(新) 门户网站。
标准代理设置提供企业级安全性、合规性和控制。 此配置使用客户管理的单租户资源来存储代理状态,并确保所有数据都保留在你的控制范围内。
在此设置中:
- 代理状态(对话、响应)存储在你自己的 Azure 资源中。
利用自己的资源存储客户数据
这两种标准设置配置旨在通过要求使用自己的 Azure 资源来完全控制敏感数据。 所需的自带 (BYO) 资源包括:
- BYO 文件存储:开发人员上传的所有文件(在代理配置期间)或最终用户(在交互期间)直接存储在客户的 Azure 存储帐户中。
- BYO 搜索:代理创建的所有矢量存储都利用客户的 Azure AI 搜索资源。
- BYO 线程存储:所有客户消息和聊天历史记录都将存储在客户自己的 Azure Cosmos DB 帐户中。
通过将这些 BYO 功能(文件存储、搜索和线程存储)捆绑在一起,标准设置可确保默认情况下部署安全。 Foundry 代理服务处理的所有数据都会自动存储在自己的 Azure 资源中,帮助满足内部策略、合规性要求和企业安全标准。
Azure Cosmos DB for NoSQL
标准设置中使用的现有 Azure Cosmos DB for NoSQL 帐户的总吞吐量限制必须至少 为 3000 RU/秒。 同时支持 预配吞吐量 和 无服务器 模式。
使用标准设置时,将在现有 Cosmos DB 帐户中预配三个容器,每个容器都需要 1000 RU/秒。
- 线程消息存储:终端用户对话
- system-thread-message-store:内部系统消息
- agent-entity-store:代理元数据,包括其说明、工具、名称等。
Project-Level 数据隔离
默认情况下,标准设置强制实施项目级数据隔离。 存储帐户中将自动预配两个 Blob 存储容器,一个用于文件和一个用于中间系统数据(区块、嵌入)和三个容器将在 Cosmos DB 中预配,一个用于用户系统,一个用于系统消息,一个用于与创建代理相关的用户输入,例如其说明、工具、名称、 等。选择此默认行为以减少设置复杂性,同时仍在项目之间强制实施严格的数据边界。
功能主机
功能主机 是帐户和项目上的子资源,可实现与代理服务的交互。
- 帐户功能主机:该帐户功能主机的请求体是空的,仅包含参数 capabilityHostKind="Agents"。
- 项目功能主机:指定用于存储代理状态的资源,可以是托管的多租户(基本设置)或客户拥有的(标准设置)单租户资源。 将项目功能主机视为项目设置。
局限性
- 不支持更新:无法更新项目或帐户的功能主机。
分步预配过程
Manual
为标准设置创建项目依赖资源
- 创建新的 Cosmos DB 资源(或传入现有资源 ID)
- 创建新的 Azure 存储资源(或传入现有资源 ID)
- 创建新的 Azure AI 搜索资源(或传入现有资源 ID)
- 创建新的 Key Vault 资源
- [可选]:创建新的 Application Insights 资源
- [可选]:传入现有 Foundry 资源的资源 ID
创建Microsoft Foundry 资源(认知服务/帐户类型=AIServices)
创建帐户级连接
- 创建到 Application Insights 资源的帐户连接
部署 gpt-4o 或其他代理兼容的模型
创建项目(认知服务/帐户/项目)
创建项目连接
- [如果提供] 与 Foundry 资源的项目连接
- 创建与 Azure 存储帐户的项目连接
- 创建与 Azure AI 搜索帐户的项目连接
- 创建到 Cosmos DB 帐户的项目连接
为项目托管标识(包括用于 SMI 的)分配以下角色:
- Cosmos DB 帐户资源的帐户级别范围内的 Cosmos DB 操作员
- 存储帐户资源的帐户级别范围内的存储帐户参与者
为帐户功能主机设置空属性部分。
为项目功能主机设置属性:Cosmos DB、Azure 存储和 AI 搜索连接
在指定的资源范围内,为项目托管标识(包括 SMI 和 UMI)分配以下角色:
- Azure AI 搜索(可在 capHost 创建之前或之后分配)
- 分配角色:搜索索引数据参与者、搜索服务参与者
- Azure Blob 存储容器:
<workspaceId>-azureml-blobstore- 分配角色:存储 Blob 数据参与者
- Azure Blob 存储容器:
<workspaceId>- agents-blobstore- 分配角色:存储 Blob 数据所有者
- 用于 NoSQL 数据库的 Cosmos DB:
enterprise_memory- 分配角色:Cosmos DB 内置数据贡献者
- 设置范围:数据库级别,涵盖所有容器(没有单独指定特定于容器的角色)。
- Azure AI 搜索(可在 capHost 创建之前或之后分配)
预配所有资源后,应为想要在项目中创建/编辑代理的所有开发人员分配角色:项目范围内的 Azure AI 用户。
使用 Bicep 模板
通过在 标准代理模板文件中提供完整的 ARM 资源 ID,使用现有的 Azure OpenAI、Azure 存储帐户、Azure Cosmos DB for NoSQL 帐户和/或 Azure AI 搜索资源。
使用现有的 Azure OpenAI 资源
按照基本代理设置中的步骤获取 Foundry 工具帐户资源 ID。
在标准代理模板文件中,替换以下占位符:
existingAoaiResourceId:/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.CognitiveServices/accounts/{serviceName}
将现有的 Azure 存储帐户用于文件存储
要获取存储帐户资源 ID,请使用存储帐户登录到 Azure CLI 并选择订阅:
az login然后运行命令:
az storage account show --resource-group <your-resource-group> --name <your-storage-account> --query "id" --output tsv输出是需要在模板中使用的
aiStorageAccountResourceID。在标准代理模板文件中,替换以下占位符:
aiStorageAccountResourceId:/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Storage/storageAccounts/{storageAccountName}
将现有的 Azure Cosmos DB for NoSQL 帐户用于线程存储
为每个 Foundry 帐户创建 Azure Cosmos DB for NoSQL 帐户。
对于 Foundry 帐户下的每个项目,三个容器部署在同一 Cosmos DB 帐户中。 每个容器至少需要 1000 RU/秒。
例如,如果两个项目部署在同一 Foundry 帐户下,则 Cosmos DB 帐户必须配置至少 6000 RU/秒(3 个容器× 1000 RU/秒× 2 个项目),以确保足够的吞吐量。
同时支持预配的吞吐量和无服务器模式。
注释
Cosmos DB 帐户中的 RU/s 容量不足将导致部署期间功能主机预配失败。
若要获取 Azure Cosmos DB 帐户资源 ID,请登录到 Azure CLI,并使用帐户选择订阅:
az login然后运行命令:
az cosmosdb show --resource-group <your-resource-group> --name <your-comosdb-account> --query "id" --output tsv输出是需要在模板中使用的
cosmosDBResourceId。在标准代理模板文件中,替换以下占位符:
cosmosDBResourceId:/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.DocumentDB/databaseAccounts/{cosmosDbAccountName}
使用现有的 Azure AI 搜索资源
要获取 Azure AI 搜索资源 ID,请登录到 Azure CLI,并使用搜索资源选择订阅:
az login然后运行命令:
az search service show --resource-group <your-resource-group> --name <your-search-service> --query "id" --output tsv在标准代理模板文件中,替换以下占位符:
aiSearchServiceResourceId:/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Search/searchServices/{searchServiceName}