如何验证Azure Open AI配置三元组(端点、密钥、部署名)的有效性?
验证Azure OpenAI配置三元组有效性的合适方法
针对仅用Endpoint、API Key、Deployment Name验证连接有效性的需求,推荐以下两种方案,均不依赖模型部署类型,适合作为健康检查接口:
方案一:调用部署模型元数据API(最优选择)
该API仅获取指定部署的模型元数据,不执行推理操作,轻量级且能精准验证配置有效性,同时兼容所有模型部署类型。
C#代码示例
[HttpGet] [Route("/healthz/openai")] public async Task<ActionResult> OpenAIAsync() { var config = m_configuration.GetSection(nameof(AzureOpenAIServiceConfig)).Get<AzureOpenAIServiceConfig>(); var client = new OpenAIClient(new Uri(config.OpenAIResourceEndpoint), new AzureKeyCredential(config.OpenAIResourceKey)); try { // 获取部署模型元数据,验证配置 var model = await client.GetDeploymentModelAsync(config.OpenAIDeploymentName); return Ok($"Azure OpenAI配置有效,部署模型:{model.Value.Id}"); } catch (RequestFailedException ex) { // 根据错误码返回对应状态 return ex.Status switch { 401 => Unauthorized("API密钥无效"), 404 => NotFound("Endpoint或Deployment Name无效"), _ => StatusCode((int)ex.Status, $"连接失败:{ex.Message}") }; } }
核心优势
- 不依赖模型类型:无论部署的是Chat、Completion还是Embeddings模型,均可正常调用
- 轻量级:仅获取元数据,资源消耗远低于推理请求
- 错误定位清晰:通过状态码可直接判断是密钥、端点还是部署名的问题
方案二:多API Fallback(兼容旧版SDK或特殊场景)
如果因SDK版本限制无法调用元数据API,可依次尝试不同类型的轻量级推理请求,覆盖主流模型部署场景:
C#代码示例
[HttpGet] [Route("/healthz/openai")] public async Task<ActionResult> OpenAIAsync() { var config = m_configuration.GetSection(nameof(AzureOpenAIServiceConfig)).Get<AzureOpenAIServiceConfig>(); var client = new OpenAIClient(new Uri(config.OpenAIResourceEndpoint), new AzureKeyCredential(config.OpenAIResourceKey)); // 先尝试Chat模型请求 try { var chatOptions = new ChatCompletionsOptions { Messages = { new ChatMessage(ChatRole.User, "ping") }, MaxTokens = 1 // 最小化输出,降低资源消耗 }; await client.GetChatCompletionsAsync(config.OpenAIDeploymentName, chatOptions); return Ok("Azure OpenAI配置有效(Chat模型)"); } catch (RequestFailedException ex) when (ex.Status == 400 && ex.Message.Contains("does not support chat completions")) { // Chat模型不支持,尝试Completion模型 try { var completionOptions = new CompletionsOptions { Prompt = "ping", MaxTokens = 1 }; await client.GetCompletionsAsync(config.OpenAIDeploymentName, completionOptions); return Ok("Azure OpenAI配置有效(Completion模型)"); } catch (RequestFailedException ex2) when (ex2.Status == 400 && ex2.Message.Contains("does not support completions")) { // Completion模型不支持,尝试Embeddings模型 try { var embeddingOptions = new EmbeddingsOptions { Input = new[] { "ping" } }; await client.GetEmbeddingsAsync(config.OpenAIDeploymentName, embeddingOptions); return Ok("Azure OpenAI配置有效(Embeddings模型)"); } catch (RequestFailedException ex3) { return HandleOpenAIError(ex3); } } catch (RequestFailedException ex2) { return HandleOpenAIError(ex2); } } catch (RequestFailedException ex) { return HandleOpenAIError(ex); } } private ActionResult HandleOpenAIError(RequestFailedException ex) { return ex.Status switch { 401 => Unauthorized("API密钥无效"), 404 => NotFound("Endpoint或Deployment Name无效"), _ => StatusCode((int)ex.Status, $"连接失败:{ex.Message}") }; }
核心优势
- 兼容多种模型部署类型,覆盖绝大多数场景
- 轻量级推理请求,资源消耗极低
内容的提问来源于stack exchange,提问作者mark
相关产品推荐
相关产品推荐

