Azure OpenAI 连接器 #

概述 #

Azure OpenAI 连接器是 Semantic Kernel 与 Azure OpenAI 服务通信的桥梁,提供企业级的安全性、合规性和可扩展性。

基本配置 #

添加 Azure OpenAI 服务 #

csharp
using Microsoft.SemanticKernel;

var builder = Kernel.CreateBuilder();

builder.AddAzureOpenAIChatCompletion(
    deploymentName: "gpt-4-deployment",
    endpoint: "https://your-resource.openai.azure.com/",
    apiKey: Environment.GetEnvironmentVariable("AZURE_OPENAI_API_KEY")
);

var kernel = builder.Build();

配置参数说明 #

csharp
builder.AddAzureOpenAIChatCompletion(
    deploymentName: "gpt-4-deployment",    // Azure 部署名称
    endpoint: "https://your-resource.openai.azure.com/",  // 终结点
    apiKey: "your-api-key",                // API 密钥
    modelId: "gpt-4",                      // 可选:模型标识
    serviceId: "azure-gpt4"                // 可选:服务标识
);

认证方式 #

API Key 认证 #

csharp
builder.AddAzureOpenAIChatCompletion(
    deploymentName: "gpt-4-deployment",
    endpoint: "https://your-resource.openai.azure.com/",
    apiKey: configuration["AzureOpenAI:ApiKey"]
);

Azure DefaultAzureCredential #

csharp
using Azure.Identity;

var credential = new DefaultAzureCredential();

builder.AddAzureOpenAIChatCompletion(
    deploymentName: "gpt-4-deployment",
    endpoint: "https://your-resource.openai.azure.com/",
    credentials: credential
);

Managed Identity #

csharp
using Azure.Identity;

// 用于 Azure 资源的托管标识
var credential = new DefaultAzureCredential(
    new DefaultAzureCredentialOptions
    {
        ManagedIdentityClientId = "your-client-id"
    }
);

builder.AddAzureOpenAIChatCompletion(
    deploymentName: "gpt-4-deployment",
    endpoint: "https://your-resource.openai.azure.com/",
    credentials: credential
);

Service Principal #

csharp
using Azure.Identity;

var credential = new ClientSecretCredential(
    tenantId: "your-tenant-id",
    clientId: "your-client-id",
    clientSecret: "your-client-secret"
);

builder.AddAzureOpenAIChatCompletion(
    deploymentName: "gpt-4-deployment",
    endpoint: "https://your-resource.openai.azure.com/",
    credentials: credential
);

部署配置 #

创建 Azure OpenAI 资源 #

text
┌─────────────────────────────────────────────────────────────┐
│                    Azure OpenAI 部署流程                     │
├─────────────────────────────────────────────────────────────┤
│                                                             │
│  1. 创建 Azure OpenAI 资源                                   │
│     ┌─────────────────────────────────────────────────┐    │
│     │  az cognitiveservices account create \          │    │
│     │    --name my-openai \                           │    │
│     │    --resource-group my-rg \                     │    │
│     │    --kind OpenAI \                              │    │
│     │    --sku S0                                     │    │
│     └─────────────────────────────────────────────────┘    │
│                                                             │
│  2. 部署模型                                                │
│     ┌─────────────────────────────────────────────────┐    │
│     │  az cognitiveservices account deployment create \│   │
│     │    --name my-openai \                           │    │
│     │    --resource-group my-rg \                     │    │
│     │    --deployment-name gpt-4-deployment \         │    │
│     │    --model-name gpt-4 \                         │    │
│     │    --model-version "latest" \                   │    │
│     │    --sku-capacity 30 \                          │    │
│     │    --sku-name "Standard"                        │    │
│     └─────────────────────────────────────────────────┘    │
│                                                             │
│  3. 获取终结点和密钥                                        │
│     ┌─────────────────────────────────────────────────┐    │
│     │  az cognitiveservices account show \            │    │
│     │    --name my-openai \                           │    │
│     │    --resource-group my-rg \                     │    │
│     │    --query properties.endpoint                  │    │
│     └─────────────────────────────────────────────────┘    │
│                                                             │
└─────────────────────────────────────────────────────────────┘

支持的模型 #

模型 部署名称示例 用途
gpt-4o gpt-4o-deployment 最新旗舰模型
gpt-4-turbo gpt-4-turbo-deployment 高性能 GPT-4
gpt-4 gpt-4-deployment 标准 GPT-4
gpt-35-turbo gpt-35-deployment 快速经济模型
text-embedding-ada-002 embedding-deployment 文本嵌入

执行设置 #

基本配置 #

csharp
using Microsoft.SemanticKernel.Connectors.OpenAI;

var settings = new OpenAIPromptExecutionSettings
{
    MaxTokens = 1000,
    Temperature = 0.7
};

var result = await kernel.InvokePromptAsync(
    "问题",
    new KernelArguments(settings)
);

Azure 特有配置 #

csharp
var settings = new OpenAIPromptExecutionSettings
{
    MaxTokens = 2000,
    Temperature = 0.7,
    TopP = 0.9,
    FrequencyPenalty = 0.5,
    PresencePenalty = 0.5,
    // Azure 特有
    User = "user-identifier",
    Seed = 42
};

嵌入服务 #

配置嵌入服务 #

csharp
builder.AddAzureOpenAITextEmbeddingGeneration(
    deploymentName: "embedding-deployment",
    endpoint: "https://your-resource.openai.azure.com/",
    apiKey: "api-key"
);

使用嵌入服务 #

csharp
var embeddingGenerator = kernel.GetRequiredService<ITextEmbeddingGenerationService>();

var embeddings = await embeddingGenerator.GenerateEmbeddingAsync("文本内容");

Console.WriteLine($"嵌入维度: {embeddings.Length}");

多区域部署 #

配置多区域 #

csharp
var builder = Kernel.CreateBuilder();

// 东亚区域
builder.AddAzureOpenAIChatCompletion(
    serviceId: "azure-eastasia",
    deploymentName: "gpt-4-deployment",
    endpoint: "https://your-resource-eastasia.openai.azure.com/",
    apiKey: "api-key"
);

// 美国区域
builder.AddAzureOpenAIChatCompletion(
    serviceId: "azure-eastus",
    deploymentName: "gpt-4-deployment",
    endpoint: "https://your-resource-eastus.openai.azure.com/",
    apiKey: "api-key"
);

var kernel = builder.Build();

区域故障转移 #

csharp
public class RegionalFailoverService
{
    private readonly Kernel _kernel;
    private readonly string[] _regions = { "azure-eastasia", "azure-eastus" };
    private int _currentRegion = 0;

    public async Task<string> GetCompletionAsync(string prompt)
    {
        var attempts = 0;
        while (attempts < _regions.Length)
        {
            try
            {
                return await _kernel.InvokePromptAsync(
                    prompt,
                    serviceName: _regions[_currentRegion]
                );
            }
            catch (HttpOperationException)
            {
                _currentRegion = (_currentRegion + 1) % _regions.Length;
                attempts++;
            }
        }
        throw new Exception("所有区域都不可用");
    }
}

企业级特性 #

私有终结点 #

csharp
// 使用私有终结点
builder.AddAzureOpenAIChatCompletion(
    deploymentName: "gpt-4-deployment",
    endpoint: "https://your-private-endpoint.privatelink.openai.azure.com/",
    credentials: new DefaultAzureCredential()
);

网络隔离 #

csharp
// 配置 VNet 规则
var handler = new HttpClientHandler
{
    // 配置代理
    Proxy = new WebProxy("http://corporate-proxy:8080"),
    UseProxy = true
};

builder.AddAzureOpenAIChatCompletion(
    deploymentName: "gpt-4-deployment",
    endpoint: "https://your-resource.openai.azure.com/",
    apiKey: "api-key",
    httpClient: new HttpClient(handler)
);

内容过滤 #

csharp
// Azure OpenAI 自动应用内容过滤
// 可在 Azure 门户配置过滤规则
var result = await kernel.InvokePromptAsync("敏感内容测试");

监控与日志 #

启用诊断日志 #

csharp
using Microsoft.Extensions.Logging;

var loggerFactory = LoggerFactory.Create(builder =>
{
    builder.AddConsole();
    builder.AddApplicationInsights("your-instrumentation-key");
});

var kernel = Kernel.CreateBuilder()
    .AddAzureOpenAIChatCompletion(...)
    .Build();

kernel.LoggerFactory = loggerFactory;

监控指标 #

csharp
kernel.FunctionInvoked += (sender, e) =>
{
    var usage = e.Result.Metadata?["Usage"] as Dictionary<string, object>;
    
    _metricsService.RecordTokenUsage(
        model: "gpt-4",
        promptTokens: (int)usage["PromptTokens"],
        completionTokens: (int)usage["CompletionTokens"]
    );
};

最佳实践 #

1. 使用托管标识 #

csharp
// 生产环境推荐使用托管标识
var credential = new DefaultAzureCredential();

builder.AddAzureOpenAIChatCompletion(
    deploymentName: "gpt-4-deployment",
    endpoint: "https://your-resource.openai.azure.com/",
    credentials: credential
);

2. 配置重试策略 #

csharp
var retryPolicy = new HttpRetryStrategyOptions
{
    MaxRetryAttempts = 3,
    BackoffType = DelayBackoffType.Exponential,
    Delay = TimeSpan.FromSeconds(2)
};

var httpClient = new HttpClient(
    new ResilienceHandler(retryPolicy)
    {
        InnerHandler = new HttpClientHandler()
    }
);

3. 成本管理 #

csharp
// 选择合适的部署 SKU
// Standard: 适合一般工作负载
// Provisioned: 适合稳定高并发

// 监控和限制 Token 使用
var settings = new OpenAIPromptExecutionSettings
{
    MaxTokens = 500  // 限制输出长度
};

4. 安全配置 #

csharp
// 使用 Azure Key Vault 存储密钥
var keyVaultUrl = "https://your-vault.vault.azure.net/";
var secretClient = new SecretClient(
    new Uri(keyVaultUrl),
    new DefaultAzureCredential()
);

var apiKey = (await secretClient.GetSecretAsync("OpenAI-ApiKey")).Value.Value;

builder.AddAzureOpenAIChatCompletion(
    deploymentName: "gpt-4-deployment",
    endpoint: "https://your-resource.openai.azure.com/",
    apiKey: apiKey
);

下一步 #

现在你已经掌握了 Azure OpenAI 连接器,接下来学习 其他 LLM 连接器,了解如何连接更多 AI 服务!

最后更新:2026-04-04