Volver al inicio

Integración de YandexGPT en .NET — Guía

Guía para integrar YandexGPT en proyectos .NET. Cubre inicialización segura del cliente, procesamiento de tareas asíncronas con retroceso exponencial, validación y guardado de imágenes, conversión de Markdown a HTML seguro. Objetivo — solución lista para producción para desarrolladores.

¿Cómo conectar correctamente YandexGPT a un proyecto .NET?
Advertisement 728x90

Integración de YandexGPT en .NET: Guía práctica para desarrolladores

YandexGPT no es solo un servicio de LLM en la nube; es una API totalmente gestionada que admite la generación asíncrona de texto e imágenes y se integra a la perfección con la infraestructura empresarial de .NET. Este artículo proporciona una implementación de integración lista para producción, abordando desafíos del mundo real como los tiempos de espera, el estado de las operaciones, el manejo de Base64 y la sanitización de la salida en Markdown. Nos centramos en lo que más importa en entornos de producción: tolerancia a fallos, seguridad de tipos, control de la ingeniería de prompts y almacenamiento seguro de credenciales.

Arquitectura del cliente e inicialización segura

La clase MyGPTClient debe ser thread-safe y evitar fugas de recursos. Utilizar un HttpClient global es un antipatrón. En su lugar, aprovechamos IHttpClientFactory, registrado mediante Inyección de Dependencias:

// Program.cs
builder.Services.AddHttpClient<MyGPTClient>((sp, client) =>
{
    var config = sp.GetRequiredService<IConfiguration>();
    client.BaseAddress = new Uri("https://llm.api.cloud.yandex.net/");
    client.DefaultRequestHeaders.Authorization = 
        new System.Net.Http.Headers.AuthenticationHeaderValue(
            "Api-Key", config["Yandex:ApiKey"]);
});

El constructor de MyGPTClient ahora acepta IHttpClientFactory en lugar de crear directamente un HttpClient. Las URI de los modelos (gpt://.../yandexgpt, art://.../yandex-art/latest) se trasladan a la configuración, lo que permite cambiar fácilmente entre entornos (desarrollo, staging y producción) sin recompilar.

Google AdInline article slot

Importante: El rol ai.languageModels.user requiere una asignación explícita en la política IAM del catálogo de Yandex Cloud. Para entornos CI/CD, se necesita una cuenta de servicio separada con permisos mínimos—solo ai.*.user”—sin roles de editor ni admin`.

Manejo de tareas asíncronas: desde el polling hasta la lógica de reintentos

El método original WaitForTaskCompletionAsync utiliza un bucle infinito con un Task.Delay(1000) fijo. Esto es inaceptable en producción: con más de 50 solicitudes concurrentes, sobrecarga los límites de la API y agota los hilos. Implementamos un polling adaptativo con retroceso exponencial y límites de reintentos:

private async Task<dynamic> WaitForTaskCompletionAsync(string taskId, int maxAttempts = 30)
{
    int attempt = 0;
    TimeSpan delay = TimeSpan.FromMilliseconds(500);

    while (attempt < maxAttempts)
    {
        try
        {
            var response = await _client.GetAsync($

— Editorial Team

Google AdInline article slot
Advertisement 728x90

Leer después