مدیریت خطای Azure OpenAI در هسته معنایی

در سیستمهای دنیای واقعی، رسیدگی مؤثر به خطاهای HTTP، به ویژه هنگام تعامل با مدلهای زبان بزرگ (LLM) مانند Azure OpenAI بسیار مهم است. خطاهای بیش از حد مجاز (توکن در دقیقه یا درخواست در دقیقه) همیشه در یک نقطه اتفاق می افتد و منجر به 429 خطا می شود. این پست وبلاگ رویکردهای مختلف مدیریت خطای HTTP با هسته معنایی و Azure OpenAI را بررسی میکند.
پیش فرض
var builder = Kernel.CreateBuilder();
builder.AddAzureOpenAIChatCompletion(
deploymentName: "gpt-4o-2024-08-06",
endpoint: "https://resource-name.openai.azure.com",
apiKey: "api-key"); // Or DefaultAzureCredential
تنظیم پیشفرض Semantic Kernel با Azure OpenAI توسط AddAzureOpenAIChatCompletion. این رویکرد یک خطمشی سعی مجدد داخلی ارائه میکند که بهطور خودکار درخواستها را تا سه بار با عقبنشینی نمایی تکرار میکند. علاوه بر این، میتواند سرصفحههای HTTP خاصی مانند «دوباره-پس از» را برای اجرای دوبارههای سفارشیتر شناسایی کند.
HttpClient
var factory = provider.GetRequiredService<IHttpClientFactory>();
var httpClient = factory.CreateClient("auzre:gpt-4o");
var builder = Kernel.CreateBuilder();
builder.AddAzureOpenAIChatCompletion(
deploymentName: "gpt-4o-2024-08-06",
endpoint: "https://resource-name.openai.azure.com",
apiKey: "api-key", // Or DefaultAzureCredential
httpClient: httpClient);
با پیکربندی یک نمونه HttpClient، می توانید کنترل بیشتری بر مدیریت خطاهای HTTP به دست آورید. زمانی که HttpClient ارائه میشود، Semantic Kernel خطمشی تکرار پیشفرض را غیرفعال میکند. این به شما امکان می دهد منطق تکرار سفارشی را با استفاده از کتابخانه Microsoft.Extensions.Http.Resilience پیاده سازی کنید. با این رویکرد، میتوانید تعداد تلاشهای مجدد، وقفههای زمانی و نحوه رسیدگی به کدهای خطای خاص مانند 429 را تعریف کنید (میزان نرخ بیش از حد مجاز است). اکیداً توصیه میشود که سیاستهای امتحان مجدد را برای مدیریت خطاهای گذرا با HttpClient اضافه کنید
services.AddHttpClient("auzre:gpt-4o")
// 'standard' automatically handle transient errors inlcuding '429'
.AddStandardResilienceHandler()
.Configure(options =>
{
// Options for attempts and time out etc
options.Retry.MaxRetryAttempts = 5;
});
یکی از مزایای مهم استفاده از HttpClient این است که به Azure OpenAI محدود نمی شود. این رویکرد با سایر رابط های هوش مصنوعی مانند OpenAI نیز کار می کند.
AzureOpenAIClient
var azureOpenAIClient = new AzureOpenAIClient(
endpoint: new Uri("https://resource-name.openai.azure.com"),
new ApiKeyCredential("api-key"), // Or DefaultAzureCredential
new AzureOpenAIClientOptions());
var builder = Kernel.CreateBuilder();
builder.AddAzureOpenAIChatCompletion(
deploymentName: "gpt-4o-2024-08-06",
azureOpenAIClient);
این رویکرد عملکردی مشابه با راهاندازی پیشفرض با خطمشی سعی مجدد داخلی ارائه میدهد. علاوه بر این، AzureOpenAIClient انعطاف پذیری بیشتری را از AzureOpenAIClientOptions فراهم می کند.
var clientOptions = new AzureOpenAIClientOptions
{
Transport = new HttpClientPipelineTransport(httpClient),
RetryPolicy = new ClientRetryPolicy(maxRetries: 5)
};
این پیکربندی به شما امکان میدهد تا سیاستهای امتحان مجدد HTTP از HttpClient را با آزمایشهای مجدد مبتنی بر خطمشی خطمشی سفارشی از Azure OpenAI SDK ترکیب کنید.
توصیه ها
تنظیم پیشفرض ممکن است برای سناریوهایی که اغلب با مشکلات محدودیت رمز مواجه میشوید مناسب نباشد.
اگر قبلاً AzureOpenAIClient را ثبت کردهاید و به حداکثر کنترل نیاز دارید، این رویکرد به شما امکان میدهد از سیاستهای مشتری HTTP و تلاشهای مجدد مبتنی بر خطمشی خط لوله OpenAI Azure استفاده کنید.
لطفا با خیال راحت در توییتر تماس بگیرید @roamingcode