4.4 KiB
Sistema de Fallback con Grok para Explicación de Errores
Descripción
Se ha implementado un sistema de fallback que utiliza Grok para explicar errores cuando el procesamiento principal de la aplicación falla. Esta funcionalidad proporciona al usuario una explicación comprensible de qué salió mal cuando no se puede generar una respuesta normal.
Funcionamiento
-
Detección de Error: Cuando el procesamiento principal falla (por ejemplo, error 529 de Claude por sobrecarga del servidor), el sistema captura la excepción.
-
Obtención de Logs: Se obtienen los logs de la última interacción usando el método
GetRecentLogs()
del Logger, que busca desde "Iniciando corrección de texto" hasta el final. -
Llamada a Grok: Se envía a Grok un prompt del sistema que lo instruye como "asistente técnico especializado en explicar errores de software" junto con los logs de error.
-
Presentación del Resultado: Si Grok puede explicar el error, se presenta al usuario:
[Texto original] ERROR: [Explicación de Grok]
-
Fallback del Fallback: Si Grok también falla, se muestra el último mensaje de error encontrado en los logs.
Archivos Modificados
Logger.cs
- Nuevo:
GetRecentLogs(string sinceMessage)
- Obtiene logs desde un mensaje específico - Nuevo:
GetLastLogLines(int lineCount)
- Obtiene las últimas N líneas del log - Modificado: Almacena la ruta del archivo de log para poder leerlo
gtpask.cs
- Nuevo:
ExplicarErrorConGrok(string originalText, string errorLogs)
- Método principal del fallback - Nuevo:
CallGrokForErrorExplanation(string systemPrompt, string userPrompt)
- Llamada específica a Grok para explicaciones - Nuevo:
GetLastErrorMessage(string errorLogs)
- Extrae el último mensaje de error de los logs
App.xaml.cs
- Nuevo:
TryErrorFallbackWithGrok(Exception originalError)
- Método que coordina el fallback - Modificado: Catch de
ProcessCorreccionWithTimeout()
- Ahora usa el fallback - Modificado: Catch de timeout - Ahora usa el fallback
- Modificado: Catch de error en procesamiento final - Ahora usa el fallback
Configuración
Prerequisitos
- API key de Grok configurada en
appsettings.json
bajoApiKeys.Grok
Parámetros de Grok
- Modelo:
grok-beta
- Temperatura:
0.3
(para respuestas consistentes) - Max Tokens:
500
(para explicaciones concisas) - Stream:
false
Ejemplo de Uso
Escenario: Error 529 de Claude (servidor sobrecargado)
Logs de entrada:
[2025-06-17 12:48:42] Iniciando corrección de texto
[2025-06-17 12:48:42] Iniciando proceso de corrección
[2025-06-17 12:48:42] Texto original: Que modelos de SEW en profinet existen?
[2025-06-17 12:48:42] Idioma detectado: Spanish
[2025-06-17 12:48:42] Texto marcado: Que modelos de SEW en profinet existen?
[2025-06-17 12:48:42] Enviando solicitud a https://api.anthropic.com/v1/messages
[2025-06-17 12:49:12] Respuesta recibida: {"type":"error","error":{"type":"overloaded_error","message":"Overloaded"}}
[2025-06-17 12:49:12] Error en llamada a Claude Web Search API: Error en la solicitud HTTP: 529 - {"type":"error","error":{"type":"overloaded_error","message":"Overloaded"}}
[2025-06-17 12:49:12] Error no controlado: Error en la solicitud HTTP: 529 - {"type":"error","error":{"type":"overloaded_error","message":"Overloaded"}}
Resultado esperado:
Que modelos de SEW en profinet existen?
ERROR: El servidor de Claude está actualmente sobrecargado y no puede procesar la solicitud. Esto es un problema temporal del proveedor del servicio. Intente nuevamente en unos minutos.
Características de Seguridad
- No Recursivo: El sistema de fallback se ejecuta solo una vez por error, no recursivamente.
- Manejo de Errores: Si Grok falla, se muestra el error original sin causar fallos adicionales.
- Timeouts: Usa los mismos timeouts configurados para las otras APIs.
- Logging: Todas las operaciones del fallback se registran en el log para debugging.
Casos de Error Cubiertos
- Errores de API (429, 500, 529, etc.)
- Timeouts de operación
- Errores de procesamiento
- Errores de formato de respuesta
- Errores de conectividad
Limitaciones
- Requiere que la API key de Grok esté configurada
- Solo funciona si Grok está disponible
- No funciona para errores de inicialización de la aplicación
- Limitado a 500 tokens para mantener respuestas concisas