
Aspire Azure OpenAI 托管集成指南模型编排、本地预配与连接属性全解析【免费下载链接】aspireAspire is the tool for code-first, extensible, observable dev and deploy.项目地址: https://gitcode.com/GitHub_Trending/as/aspire本指南以 Aspire 仓库中 Aspire.Hosting.Azure.CognitiveServices 集成模块 为骨架系统讲解如何在 Aspire 解决方案中建模、配置并编排 Azure OpenAI 资源从aspire add引入集成、aspire secret set配置本地开发预配到 C#/TypeScript 双语言下的资源引用、部署Deployment管理与连接属性注入。读完本文你将掌握在 AppHost 中以代码优先方式声明 Azure OpenAI 账号与模型部署、向消费项目注入Uri/ModelName等连接配置并理解其底层 Bicep 生成与角色分配的源码实现。集成概览在 Aspire 中编排 Azure OpenAIAspire.Hosting.Azure.CognitiveServices是 Aspire 针对 Azure AI 服务当前核心为 Azure OpenAI的托管集成。它允许开发者在 AppHost 的应用模型中直接声明 Azure OpenAI 资源AzureOpenAIResource与模型部署资源AzureOpenAIDeploymentResource由 Aspire 在本地开发阶段自动完成 Azure 资源预配provisioning并在运行时以标准连接属性connection properties的方式把端点与部署信息注入到引用了它的下游项目。从源码结构看该模块由五个核心文件构成职责清晰AzureOpenAIExtensions.cs —— 对外公开的AddAzureOpenAI、AddDeployment、WithRoleAssignments等扩展方法AzureOpenAIResource.cs —— Azure OpenAI 账号资源模型实现IResourceWithConnectionString、IAzurePrivateEndpointTarget等接口AzureOpenAIDeploymentResource.cs —— 模型部署资源模型挂载在父级 Azure OpenAI 资源之下AzureOpenAIDeployment.cs —— 旧版部署描述类型已标记 Obsolete建议改用 DeploymentResourceAzureOpenAIRole.cs —— ATS 兼容的内置角色枚举。快速开始前置条件与添加集成前置条件使用该集成需要一个 Azure 订阅官方文档提示可在 Azure 门户免费创建试用订阅。本地开发阶段 Aspire 会代表开发者预配 Azure 资源因此开发者必须对目标订阅拥有 Owner 权限以便 Aspire 为预配出的资源配置角色分配role assignments。添加集成在 AppHost 项目目录下使用 Aspire CLI 添加集成包aspire add Aspire.Hosting.Azure.CognitiveServices命令执行后集成包即被引入 AppHost 项目builder.AddAzureOpenAI(...)等扩展方法便可用。在仓库中该集成的工程文件位于 Aspire.Hosting.Azure.CognitiveServices.csproj。配置本地开发的 Azure Provisioning把 Azure 资源加入 AppHost 应用模型后Aspire 会自动开启“开发时预配”development-time provisioning无需手动到 Azure 门户创建账号。预配过程需要 AppHost 配置中提供几项 Azure 设置官方推荐在 AppHost 目录下用aspire secret set写入密钥保存在本地用户机密中避免硬编码进代码仓库aspire secret set Azure:SubscriptionId your subscription id aspire secret set Azure:ResourceGroupPrefix prefix for the resource group aspire secret set Azure:Location azure location三个配置项的含义与作用如下配置键说明Azure:SubscriptionId目标 Azure 订阅 ID预配资源将创建在该订阅下Azure:ResourceGroupPrefix资源组前缀Aspire 按此前缀生成并管理资源组Azure:LocationAzure 区域如eastus决定资源部署位置注意开发者必须具备目标订阅的Owner权限否则角色分配无法成功配置预配将失败。这一行为在源码中可以得到印证AddAzureOpenAI内部首先调用builder.AddAzureProvisioning()见 AzureOpenAIExtensions.cs把 Azure 预配能力挂接到应用模型随后通过configureInfrastructure委托生成 Cognitive Services 账号的预配描述包括Kind OpenAI、SKU 为S0、DisableLocalAuth true强制使用托管标识禁用本地密钥认证以及按资源名派生的CustomSubDomainName等关键属性。使用示例C# 与 TypeScript 双语言建模在 AppHost 中添加一个 Azure OpenAI 服务并让其他资源引用它C# 写法如下var openai builder.AddAzureOpenAI(openai); var myService builder.AddProjectProjects.MyService() .WithReference(openai);TypeScriptpolyglot AppHost写法如下const openai await builder.addAzureOpenAI(openai); const myService await builder.addNodeApp(myService, ../my-service, server.js) .withReference(openai);若需要同时声明模型部署可链式调用AddDeployment。仓库端到端示例 AzureOpenAIEndToEnd.AppHost/AppHost.cs 给出了真实用法var chat builder.AddAzureOpenAI(openai) .AddDeployment(chat, gpt-4o, 2024-05-13); builder.AddProjectProjects.AzureOpenAIEndToEnd_WebStory(webstory) .WithExternalHttpEndpoints() .WithReference(chat);其中AddDeployment(chat, gpt-4o, 2024-05-13)的三个参数分别对应部署名在 Azure 中的部署名称、模型名与模型版本。WithReference(chat)引用的是部署资源消费项目拿到的连接属性会同时包含父账号的端点与部署名。连接属性Connection Properties详解通过WithReference引用 Azure OpenAI 资源后Aspire 会把以下连接属性暴露给消费项目。Azure OpenAI 资源账号级属性名说明UriAzure OpenAI 资源端点 URI形如https://resource-name.openai.azure.com/Azure OpenAI 部署Deployment 级部署资源继承父级 Azure OpenAI 资源的全部连接属性并额外增加一项属性名说明ModelNameAzure OpenAI 部署的名称例如chatAspire 会把每个属性以[RESOURCE]_[PROPERTY]的命名规则暴露为环境变量。例如名为chat的资源的Uri属性将变成环境变量CHAT_URI。上述行为有源码与测试双重佐证AzureOpenAIResource.cs 中GetConnectionProperties()通过UriExpression产出Uri属性其值引用 Bicep 输出endpointAzureOpenAIDeploymentResource.cs 的GetConnectionProperties()先遍历父资源的属性再追加ModelName取值为部署名单元测试 AzureOpenAIDeploymentConnectionPropertiesTests.cs 断言部署资源产出的两个属性恰为Uri表达式{openai.outputs.endpoint}与ModelName取值为部署名。此外部署资源的连接字符串还包含部署信息源码 AzureOpenAIResource.cs 中的GetConnectionString(deploymentName)会拼接为{connectionString};Deployment{deploymentName}的格式方便 SDK 直接定位到具体模型部署。深入实现预配基础设施与角色分配AddAzureOpenAI的核心逻辑位于 AzureOpenAIExtensions.cs 的configureInfrastructure委托中它利用 Azure.Provisioning 的 CDK 风格 API 生成 Bicep 描述账号资源创建CognitiveServicesAccount设置Kind OpenAI、SKUS0、DisableLocalAuth true若资源带有私有端点注解PrivateEndpointTargetAnnotation则自动将PublicNetworkAccess设为Disabled否则为Enabled预配输出依次声明connectionString格式Endpoint{endpoint}、endpoint、name、id四个输出其中name用于外部化角色分配部署串联为每个DeploymentResources创建CognitiveServicesAccountDeployment模型Format OpenAI且后续部署通过DependsOn显式依赖前一个部署等效于batchSize(1)串行创建避免并发建部署导致失败默认角色AddAzureOpenAI默认给资源附加CognitiveServicesOpenAIUser角色分配见 AzureOpenAIExtensions.cs使下游服务能以托管标识完成推理调用。角色分配可通过WithRoleAssignments定制。源码同时提供两个重载接受CognitiveServicesBuiltInRole[]Azure.Provisioning 类型C# 专用与接受 ATS 兼容的AzureOpenAIRole[]内部枚举见 AzureOpenAIRole.cs。三种可用角色为角色权限说明CognitiveServicesOpenAIContributor允许完整管理 Azure OpenAI 资源CognitiveServicesOpenAIUser允许调用 Azure OpenAI 模型进行推理CognitiveServicesUser允许访问 Azure 认知服务资源相关行为在 AzureOpenAIExtensionsTests.cs 中有完整覆盖测试断言了默认角色清单生成的 Bicep 中Microsoft.Authorization/roleAssignments的定义、无效角色值抛出ArgumentException、重复角色与空数组不抛异常等边界场景。部署资源定制SKU 与容量AddDeployment返回的部署资源AzureOpenAIDeploymentResource支持通过WithProperties定制底层预配参数可调整的属性如下属性默认值说明DeploymentName资源名Azure 中的实际部署名称默认与资源名一致可另行指定ModelName/ModelVersion构造时必填要部署的模型名称与版本SkuNameStandard部署 SKU 名称SkuCapacity8部署容量吞吐单位默认值与可写性均定义在 AzureOpenAIDeploymentResource.cs设置器会对空字符串抛出异常。测试 AzureOpenAIExtensionsTests.cs 展示了典型用法——先添加部署再用WithProperties把 SKU 改为Basic、容量改为4。验证与延伸阅读若希望验证整个链路可运行仓库中的单元测试如 AzureOpenAIExtensionsTests.cs、AzureOpenAIDeploymentConnectionPropertiesTests.cs并参考 AzureOpenAIEndToEnd 端到端示例查看完整 AppHost 与消费端代码。该模块属于评估期 API源码中带有ASPIREAZURE003诊断抑制部分类型如AzureOpenAIDeployment已标记废弃新代码应优先使用返回AzureOpenAIDeploymentResource的AddDeployment重载预配与角色分配等细节以当前仓库实现为准实际部署前请结合目标 Azure 订阅的配额与模型可用区域进行确认。【免费下载链接】aspireAspire is the tool for code-first, extensible, observable dev and deploy.项目地址: https://gitcode.com/GitHub_Trending/as/aspire创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考